Apache Hive 相容性
適用於: Databricks Runtime
Azure Databricks 中的 Apache Spark SQL 的設計目的是要與 Apache Hive 相容,包括中繼存放區連線能力、SerDes 和 UDF。
SerDes 和 UDF
Hive SerDes 和 UDF 是以 Hive 1.2.1 為基礎。
中繼存放區連線能力
如需如何將 Azure Databricks 連線至外部裝載 Hive 中繼存放區的資訊,請參閱 外部 Apache Hive 中繼存放區(舊版 )。
支援的Hive功能
Spark SQL 支持絕大多數 Hive 功能,例如:
- Hive 查詢語句,包括:
- SELECT
- GROUP BY
- 排序依據
- CLUSTER BY
- 排序依據
- 所有 Hive 運算式,包括:
- 關係運算式(
=
、、⇔
、、==
等<
<=
>=
<>
>
) - 算術表示式 (
+
、 、-
*
、 、/
等%
) - 邏輯表達式 (AND、&&、OR、||等等)
- 複雜類型建構函式
- 數學運算式(符號、ln、cos 等)
- 字串表示式(instr、length、printf 等)
- 關係運算式(
- 使用者定義函數 (UDF)
- 使用者定義聚合函數 (UDAF)
- 使用者定義的串行化格式 (SerDes)
- 視窗函式
- 加入
- JOIN
- {LEFT|RIGHT|FULL} 外部聯接
- LEFT SEMI JOIN
- CROSS JOIN
- 等位
- 子查詢
- SELECT col FROM ( SELECT a + b AS col from t1) t2
- 取樣
- 解說
- 數據分割數據表,包括動態數據分割插入
- 檢視
- 絕大多數 DDL 語句,包括:
- CREATE TABLE
- CREATE TABLE AS SELECT
- ALTER TABLE
- 大部分的Hive資料類型,包括:
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- 字串
- BINARY
- timestamp
- 日期
- 陣列<>
- 地圖<>
- 結構<>
不支援的Hive功能
下列各節包含 Spark SQL 不支援的 Hive 功能清單。 大部分的功能很少用於Hive部署。
主要 Hive 功能
- 寫入Hive所建立的貯體數據表
- ACID 細部更新
Esoteric Hive 功能
- 等位類型
- 唯一聯結
- 數據行統計數據收集:Spark SQL 目前不會進行回溯掃描以收集數據行統計數據,而且只支援填入 Hive 中繼存放區的大小InBytes 欄位
Hive 輸入和輸出格式
- CLI 的檔案格式:針對顯示回 CLI 的結果,Spark SQL 僅支援 TextOutputFormat
- Hadoop 封存
Hive 優化
Spark 中未包含少數 Hive 優化。 其中一些(例如索引)較不重要,因為 Spark SQL 的記憶體內部計算模型。
- 區塊層級位圖索引和虛擬數據行(用來建置索引)。
- 自動判斷聯結和 groupbys 的歸納器數目:在 Spark SQL 中,您需要使用
SET spark.sql.shuffle.partitions=[num_tasks];
來控制平行處理原則的隨機處理程度。 - 扭曲數據旗標:Spark SQL 不會遵循Hive中的扭曲數據旗標。
STREAMTABLE
聯結中的提示:Spark SQL 不會遵循STREAMTABLE
提示。- 合併多個小型檔案以取得查詢結果:如果結果輸出包含多個小型檔案,Hive 可以選擇性地將小型檔案合併成較少的大型檔案,以避免 HDFS 元數據溢位。 Spark SQL 不支援。