Impala 和 Hive 之间 SQL 区别
当前版本的 Impala(1.2.3)不支持以下在 HiveQL 中可用的 SQL 特性:
- 非标量数据类型如 maps, arrays, structs
- 可扩展机制(Extensibility mechanisms)例如 TRANSFORM, 自定义文件格式, 或自定义 SerDes; zImpala 1.2
- XML 和 JSON 函数
- HiveQL 中的某些聚合函数: variance, var_pop, var_samp, stddev_pop, stddev_samp, covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric,collect_set; Impala 支持这些聚合函数: , , , ,
- 用户定义产生表函数(User Defined Table Generating Functions,UDTFs)
- 采样
- Lateral views
- 授权功能如角色
- 一个查询中多个 DISTINCT 子句(Multiple DISTINCT clauses per query)
Impala 当前不支持这些 HiveQL 语句:
- ANALYZE TABLE (在 Impala 有等价的 COMPUTE STATS)
- DESCRIBE COLUMN
- DESCRIBE DATABASE
- EXPORT TABLE
- IMPORT TABLE
- SHOW PARTITIONS
- SHOW TABLE EXTENDED
- SHOW INDEXES
- SHOW COLUMNS
许多情况下 Impala 与 Hive 中使用相似的 SQL 语句和子句的语义不同:
- Impala 使用不同的语法和查询提示(query hints)名称。参见
- Impala 在执行 SORT BY, DISTRIBUTE BY, CLUSTER BY 时不使用 MapReduce(Impala does not expose MapReduce specific features of SORT BY, DISTRIBUTE BY, or CLUSTER BY)
- Impala 查询中可以不需要 FROM 子句
- Impala 支持有限的几组隐式类型转换。这可以避免从未预期的转换行为导致未知的结果
- Impala 在 string 和 numeric 或 Boolean 之间不进行隐式转换
- Impala 在 numeric 或 string 到 timestamp 之间不进行隐式转换(Impala does perform implicit casts among the numeric types or from string to timestamp)
- Impala 不使用本地时区保存时间戳,以避免超出预期的时区导致的未知的结果。时间戳都是相对于 GMT(格林尼治时间) 存储的
- 就像在传统数据库系统中那样,Impala 不会为溢出列(column overflows)返回 NULL,以便客户可以区分 NULL 数据和溢出条件。Impala 返回该数据类型的最大或最小值。例如,tinyint 的有效值范围是 -128 到 127。在 Impala 里,设置 tinyint 为 -200 则返回值是 -128 而不是 NULL。设置 tinyint 为 200 实际是 127。
- Impala 不提供虚拟列(virtual columns)
- Impala 没有公开锁(Impala does not expose locking)
- Impala 没有公开一些配置属性(Impala does not expose some configuration properties)