Impala 和 Hive 之间 SQL 区别(翻译)

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 支持这些聚合函数: MAX(), MIN(), SUM(), AVG(),  COUNT()
  • 用户定义产生表函数(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)名称。参见 Joins 
  • 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)

你可能感兴趣的:(Impala 和 Hive 之间 SQL 区别(翻译))