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
包内。不一样语言访问或建立数据类型方法不同: