Spark SQL 之 Migration Guide
支持的Hive功能java
轉載請註明出處:http://www.cnblogs.com/BYRans/
sql
Migration Guide
與Hive的兼容(Compatibility with Apache Hive)
Spark SQL與Hive Metastore、SerDes、UDFs相兼容。Spark SQL兼容Hive Metastore從0.12到1.2.1的全部版本。Spark SQL也與Hive SerDes和UDFs相兼容,當前SerDes和UDFs是基於Hive 1.2.1。apache
在Hive warehouse中部署Spark SQL
Spark SQL Thrift JDBC服務與Hive相兼容,在已存在的Hive上部署Spark SQL Thrift服務不須要對已存在的Hive Metastore作任何修改,也不須要對數據作任何改動。數組
Spark SQL支持的Hive特性
Spark SQL支持多部分的Hive特性,例如:ide
- Hive查詢語句,包括:
- SELECT
- GROUP BY
- ORDER BY
- CLUSTER BY
- SORT BY
- 全部Hive運算符,包括
- 比較操做符(=, ⇔, ==, <>, <, >, >=, <=, etc)
- 算術運算符(+, -, *, /, %, etc)
- 邏輯運算符(AND, &&, OR, ||, etc)
- 複雜類型構造器
- 數學函數(sign,ln,cos,etc)
- 字符串函數(instr,length,printf,etc)
- 用戶自定義函數(UDF)
- 用戶自定義聚合函數(UDAF)
- 用戶自定義序列化格式器(SerDes)
- 窗口函數
- Joins
- JOIN
- {LEFT|RIGHT|FULL} OUTER JOIN
- LEFT SEMI JOIN
- CROSS JOIN
- Unions
- 子查詢
- SELECT col FROM ( SELECT a + b AS col from t1) t2
- Sampling
- Explain
- 表分區,包括動態分區插入
- 視圖
- 全部的Hive DDL函數,包括:
- CREATE TABLE
- CREATE TABLE AS SELECT
- ALTER TABLE
- 大部分的Hive數據類型,包括:
- TINYINT
- SMALLINT
- INT
- BIGINT
- BOOLEAN
- FLOAT
- DOUBLE
- STRING
- BINARY
- TIMESTAMP
- DATE
- ARRAY<>
- MAP<>
- STRUCT<>
支持的Hive功能
下面是當前不支持的Hive特性,其中大部分特性在實際的Hive使用中不多用到。函數
Major Hive Featuresoop
- Tables with buckets:bucket是在一個Hive表分區內進行hash分區。Spark SQL當前不支持。
Esoteric Hive Featurespost
- UNION type
- Unique join
- Column statistics collecting:當期Spark SQL不智齒列信息統計,只支持填充Hive Metastore的sizeInBytes列。
Hive Input/Output Formats優化
- File format for CLI: 這個功能用於在CLI顯示返回結果,Spark SQL只支持TextOutputFormat
- Hadoop archive
Hive優化
部分Hive優化尚未添加到Spark中。沒有添加的Hive優化(好比索引)對Spark SQL這種in-memory計算模型來講不是特別重要。下列Hive優化將在後續Spark SQL版本中慢慢添加。ui
- 塊級別位圖索引和虛擬列(用於創建索引)
- 自動檢測joins和groupbys的reducer數量:當前Spark SQL中須要使用「
SET spark.sql.shuffle.partitions=[num_tasks];
」控制post-shuffle的並行度,不能自動檢測。
- 僅元數據查詢:對於能夠經過僅使用元數據就能完成的查詢,當前Spark SQL仍是須要啓動任務來計算結果。
- 數據傾斜標記:當前Spark SQL不遵循Hive中的數據傾斜標記
- jion中STREAMTABLE提示:當前Spark SQL不遵循STREAMTABLE提示
- 查詢結果爲多個小文件時合併小文件:若是查詢結果包含多個小文件,Hive能合併小文件爲幾個大文件,避免HDFS metadata溢出。當前Spark SQL不支持這個功能。
Reference
Data Types
Spark SQL和DataFrames支持的數據格式以下:
- 數值類型
- ByteType: 表明1字節有符號整數. 數值範圍: -128 到 127.
- ShortType: 表明2字節有符號整數. 數值範圍: -32768 到 32767.
- IntegerType: 表明4字節有符號整數. 數值範圍: -2147483648 t到 2147483647.
- LongType: 表明8字節有符號整數. 數值範圍: -9223372036854775808 到 9223372036854775807.
- FloatType: 表明4字節單精度浮點數。
- DoubleType: 表明8字節雙精度浮點數。
- DecimalType: 表示任意精度的有符號十進制數。內部使用java.math.BigDecimal.A實現。
- BigDecimal由一個任意精度的整數非標度值和一個32位的整數組成。
- String類型
- Binary類型
- Boolean類型
- Datetime類型
- TimestampType: 表明包含的年、月、日、時、分和秒的時間值
- DateType: 表明包含的年、月、日的日期值
- 複雜類型
- ArrayType(elementType, containsNull): 表明包含一系列類型爲elementType的元素。若是在一個將ArrayType值的元素能夠爲空值,containsNull指示是否容許爲空。
- MapType(keyType, valueType, valueContainsNull): 表明一系列鍵值對的集合。key不容許爲空,valueContainsNull指示value是否容許爲空
- StructType(fields): 表明帶有一個StructFields(列)描述結構數據。
- StructField(name, dataType, nullable): 表示StructType中的一個字段。name表示列名、dataType表示數據類型、nullable指示是否容許爲空。
Spark SQL全部的數據類型在 org.apache.spark.sql.types
包內。不一樣語言訪問或建立數據類型方法不同: