Shark是一种分布式SQL查询工具,它的设计目标就是兼容Hive,今天就来总结一下Shark对Hive特性的兼容。
一、Shark可以直接部署在Hive的数据仓库上。支持Hive的绝大多数特性,具体如下:
- Hive查询语句,包括以下:
- SELECT
- GROUP_BY
- ORDER_BY
- CLUSTER_BY
- SORT_BY
- 支持Hive中所有的操作符:
- 关系运算符(=, ⇔, ==, <>, <, >, >=, <=, 等)
- 算术运算符(+, -, *, /, %, 等)
- 逻辑运算符(AND, &&, OR, ||, 等)
- 复杂类型构造器
- 数学函数 (sign, ln, cos, 等)
- 字符串函数(instr, length, prinf, 等)
- 支持用户自定义函数(UDF)
- 支持用户自定义聚合函数(UDAF)
- 支持用户自定义的序列化格式(SerDe’s)
- 支持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
- ARRAY<>
- MAP<>
- STRUCT<>
- UNIONTYPE<>
二、下面是不支持的特性
下面列出来的Hive特性在Shark是不支持的;当然,这些特性在Hive开发中也不经常使用。
- Shark不支持Hive中的桶(buckets)
- 在Hive中,不同的分区可以用不同的input format,目前在Shark中,所有的分区必须使用相同的input format
- 不等值的outer join("key < 10"),在Shark中将会得到错误的结果
- 不支持Unique join
- 不支持单查询多插入语句
- 不支持列统计收集
- 不支持Hadoop archive
- 对于返回到CLI界面的结果信息,Shark目前只支持TextOutputFormat
- 少数的Hive优化目前Shark是不支持的。这些不支持的优化中有些是因为Shark是内存计算模型,所以这些优化(比如索引)就没必要去支持;其他的一些优化特性将在Shark未来版本中支持。
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Shark对Hive的兼容性总结】(https://www.iteblog.com/archives/1025.html)
这一点不是很理解,因为shark是内存计算模型,所以hive中部分优化(索引)就没有必要支持。基于内存就不能在扫描全表之前先看索引文件来决定是否加载内存嘛?这是一点。还有就是spark sql已经到了2.4.4了都,现在支持hive部分优化。特指索引这个优化。因为orc压缩格式中的索引提升很大,spark sql不支持太可惜了。