下面是spark2.2.1目前不支持的hive的一些特性。这些特性大多数很少在hive部署中应用。
1. hive的主要特性方面
- 不支持表分桶操作:桶简单理解就是使用hash值对hive表进行分区。
2. hive深奥特性方面
- 不支持union数据类型(Hive 0.7.0开始才引入,但目前仍对此类型支持不够完全)。 以下是示例,帮助理解该数据类型,
CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>); SELECT foo FROM union_test; 查询结果: {0:1} {1:2.0} {2:["three","four"]} {3:{"a":5,"b":"five"}} {2:["six","seven"]} {3:{"a":8,"b":"eight"}} {0:9} {1:10.0}
以{0:1}为例,第1个位点的int值为1;同理,{1:2.0}, 第二个位点的double值为2.0 ......
- 不支持unique join
- 不支持列统计信息收集。
3. hive输入输出格式方面
- 不支持CLI文件格式: spark仅支持文本输出格式,不支持将结果返回到CLI。
- 不支持hadoop归档。
4. hive优化特性方面
少量hive优化特性在Spark 中尚不支持。这些不支持的某些特性(比如索引)并不十分重要,因为spark的内存计算模式。以下的其他特性则在未来的Spark SQL中可能被支持。
- 块级位图索引(Block level bitmap indexes)及虚拟列
- 对 joins 和 groupbys操作,Spark SQL 不能自动确定reducer的数量。目前在 Spark SQL中,通过“
SET spark.sql.shuffle.partitions=[num_tasks];
”来设置shuffle的并行度。 - 查询元数据信息仍然需要启动任务去计算结果,而不像hive那样不需要启动计算资源
- Spark SQL 中没有hive中的数据倾斜标志
- Spark SQL 没有
STREAMTABLE
hint - Spark SQL对于查询结果不支持小文件合并