Apache Hive兼容性

適用於:勾選“是”磚運行時

Databricks中的Apache Spark SQL被設計為與Apache Hive兼容,包括metastore連接、SerDes和udf。

SerDes和udf

Hive SerDes和udf基於Hive 1.2.1。

Metastore連接

看到外部Apache Hive亞穩態有關如何將Databricks連接到外部托管的Hive metastore的信息。

支持的Hive特性

Spark SQL支持絕大多數Hive特性,例如:

  • Hive查詢語句,包括:

    • 選擇

    • 集團

    • 命令

    • 集群的

    • 排序

  • 所有Hive表達式,包括:

    • 關係表達式(= =<><>>=< =等)

    • 算術表達式(+-/等)

    • 邏輯表達式(AND, &&, OR, ||,等)

    • 複雜類型構造函數

    • 數學表達式(符號,ln, cos等)

    • 字符串表達式(instr, length, printf等)

  • 用戶定義函數(UDF)

  • 用戶定義的聚合函數(UDAF)

  • 用戶定義的序列化格式(SerDes)

  • 窗口函數

  • 連接

    • 加入

    • {左|右| full}外層連接

    • 左半聯接

    • 交叉連接

  • 工會

  • 子查詢

    • SELECT col FROM (SELECT a + b AS col FROM t1

  • 抽樣

  • 解釋

  • 分區表,包括動態分區插入

  • 視圖

  • 絕大多數DDL語句,包括:

    • 創建表

    • 創建表為select

    • ALTER TABLE

  • 大多數Hive數據類型,包括:

    • 非常小的整數

    • 短整型

    • INT

    • 長整型數字

    • 布爾

    • 浮動

    • 字符串

    • 二進製

    • 時間戳

    • 日期

    • 數組< >

    • 地圖< >

    • STRUCT < >

不支持的Hive功能

下麵的章節包含了Spark SQL不支持的Hive特性列表。這些特性中的大多數在Hive部署中很少使用。

Hive的主要特性

  • 寫入由Hive創建的bucket表

  • ACID細粒度更新

神秘的Hive特性

  • 聯合類型

  • 獨特的加入

  • 列統計信息收集:Spark SQL目前不搭載掃描來收集列統計信息,隻支持填充Hive metastore的sizeInBytes字段

Hive輸入輸出格式

  • CLI的文件格式:對於顯示回CLI的結果,Spark SQL隻支持TextOutputFormat

  • Hadoop存檔

蜂群優化

少數Hive優化沒有包含在Spark中。由於Spark SQL的內存計算模型,其中一些(如索引)不那麼重要。

  • 塊級位圖索引和虛擬列(用於構建索引)。

  • 自動確定join和groupby的reducer數量:在Spark SQL中,您需要控製shuffle使用後的並行度spark.sql.shuffle.partitions = [num_tasks];

  • 傾斜數據標誌:Spark SQL不遵循Hive中的傾斜數據標誌。

  • STREAMTABLEjoin中的提示:Spark SQL不遵循STREAMTABLE提示。

  • 合並多個小文件查詢結果:如果結果輸出包含多個小文件,Hive可以選擇將小文件合並為更少的大文件,以避免溢出HDFS元數據。Spark SQL不支持。