美文网首页
CDH5.13.x文档翻译SQL Differences Bet

CDH5.13.x文档翻译SQL Differences Bet

作者: gregocean | 来源:发表于2019-07-21 11:05 被阅读0次

    https://www.cloudera.com/documentation/enterprise/5-13-x/topics/impala_langref_unsupported.html#langref_hiveql_delta
    Impala的SQL语法遵循SQL-92标准,还包括了很多业界扩展比如内置函数。查看Porting SQL from Other Database Systems to Impala从多种数据库系统的SQL适配到Impala的讨论。

    因为Impala和Hive共享metastore数据库,他们的表也共享,接下来几节会说明Impala和Hive细节上的不同。

    扩展阅读:

    Impala不支持的HiveQL特性

    当前Impala的release不支持以下你可能已经熟悉的HiveQL:

    • 扩展机制比如 TRANSFORM,定制的文件格式,或者定制的SerDes
    • DATE数据类型
    • XML和JSON函数
    • HiveQL中特定的聚合函数:covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric, collect_set;
      Impala支持这些聚合函数:Impala Aggregate Functions
      以及这些分析函数: Impala Analytic Functions
    • 采样
    • Lateral views.在CDH5.5/Impala2.3以及更高版本,Impala支持对复杂类型(STRUCT,MAP,ARRAY)的查询,使用join而非EXPLODE()关键字。 查看Complex Types (CDH 5.5 or higher only) 获得Impala对复杂类型查询支持的细节。
    • 单查询中存在多个DISTINCT语句,尽管Impala对这个局限采取了一些补救措施。

    Note:
    默认情况下Impala只允许在每个查询中包含一个COUNT(DISTINGCT columns)表达式。
    如果不需要完全精准,可以使用NDV(colum)得到一个列的distinct的估计值。一个查询可以包含多个NDV(colum)。让Impala自动重写COUNT(DISTINCT)NDV(),需要设置APPX_COUNT_DISTINCT选项。
    要让结果与COUNT(DISTINCT)一致,可以使用下面的查询例子:
    select v1.c1 result1, v2.c1 result2 from
    (select count(distinct col1) as c1 from t1) v1
    cross join
    (select count(distinct col2) as c1 from t1) v2;
    由于CROSS JOIN是一个代价很高的操作,还是建议尽量使用NDV()

    Impala在1.2之后支持UDFs。查看Impala UDFs的细节:User-Defined Functions (UDFs)

    • Impala支持C++编写的高性能UDFs,也支持重用一些Java-based Hive UDFs。
    • Impala支持标量UDF与UDAFs。Impala目前不支持UDTFs。
    • 在JavaUDF中出现的Hive的current_user()语句不能被Impala调用。

    Impala目前不支持这些HiveQL语句:

    • ANALYZE TABLE (Impala中等价的是 COMPUTE STATS)
    • DESCRIBE COLUMN
    • DESCRIBE DATABASE
    • EXPORT TABLE
    • IMPORT TABLE
    • SHOW TABLE EXTENDED
    • SHOW TBLPROPERTIES
    • SHOW INDEXES
    • SHOW COLUMNS
    • INSERT OVERWRITE DIRECTORY; use INSERT OVERWRITE table_name or CREATE TABLE AS SELECT 基于Impala表物化查询结果至hdfs中。

    Impala只在TEXT格式的表中支持serialization.null.format,忽略Parquet的属性以及其他格式。Hive支持Parquet和其他格式中的serialization.null.format属性并在扫描过程中将匹配到的值转为NULL。
    查看 Data Files for Text Tables 获取Impala中使用表属性的细节。

    Impala与HiveQL特性中语义上的不同

    这部分阐述Impala和Hive具有相似功能、有时是相同语法,但运行时有不同语义的特性。

    安全

    SQL语句

    ImpalaSQL语句在有时尽管和HiveQL在语法和声明上相似但语义不同。

    • Impala使用不同的语法和名字做查询提示,[SHUFFLE]和[NOSHUFFLE]而非MapJoinStreamJoin。 Impala具体查看 Joins in Impala SELECT Statements
    • Impala不暴露MapReduce的某些特性:SORT BY,DISTRIBUTE BY, CLUSTER BY
    • Impala不要求查询包含FROM语句

    数据类型

    • Impala支持有限的隐式转换。这有助于避免预料外的行为。
      1. 不会隐式地在string/numeric/boolean类型间转换。总是需要CAST()
      2. 当往更大、更精确的类型转换时,Impala不会在numeric的类型间隐式转换。比如,SMALLINT到BIGINT会隐式转换,但DOUBLEFLOATINTTINYINT就不会,而需要CAST()。
      3. Impala不会对string到timestamp做隐式转换,Impala对TIMESTAMP类型以及from_unixtime()的字符串格式有限制;详细信息 TIMESTAMP Data Type .
    • Impala不会使用本地时区保存或解释timestamps。
    • Impala TIMESTAMP 数据类型 可以表示1400-01-01 到 9999-12-31范围内的日期。这和Hive的不同(0000-01-01 到 9999-12-31)。
    • Impala不会将列值溢出处理为NULL,而是返回该类型最大或最小值。比如tinyint合法取值范围为-128到127,如果赋值-200则返回-128,赋值200则返回127。

    其他

    • 不提供virtual columns
    • 不暴露锁
    • 不暴露某些配置属性

    相关文章

      网友评论

          本文标题:CDH5.13.x文档翻译SQL Differences Bet

          本文链接:https://www.haomeiwen.com/subject/upqszqtx.html