从Hive迁移

    SQL中的下标运算符支持全表达式,而Hive只支持常量。因此,你可以如下编写查询:

    避免越界访问数组

    越界访问数组元素将导致异常。你可以使用通过以下方式避免此情况:

    1. SELECT IF(CARDINALITY(my_array) >= 3, my_array[3], NULL)
    2. FROM ...

    对数组使用ANSI SQL语法

    数组的索引从1开始,而不是从0开始:

    1. FROM ...

    使用ANSI语法构造数组:

    1. SELECT ARRAY[1, 2, 3] AS my_array

    引用以数字开头的标识符

    以数字开头的标识符在ANSI SQL中是不合法的,必须使用双引号括起来:

    1. SELECT *
    2. FROM "7day_active"

    使用标准字符串连接运算符

    使用ANSI SQL字符串连接运算符:

    1. SELECT a || b || c
    2. FROM ...

    CAST目标支持以下标准类型:

    1. SELECT
    2. CAST(x AS varchar)
    3. , CAST(x AS double)
    4. , CAST(x AS boolean)
    5. FROM ...

    特别地,使用VARCHAR代替STRING

    使用CAST进行整数除法

    复杂表达式或查询使用WITH

    当希望将复杂的输出表达式重新用作筛选器时,可以使用内联子查询,也可以使用WITH子句将其分解出来:

    1. SELECT substr(name, 1, 3) x
    2. )
    3. SELECT *
    4. FROM a
    5. WHERE x = 'foo'

    openLooKeng支持unnest用于扩展数组和映射。使用UNNEST代替LATERAL VIEW explode()

    Hive查询:

    1. SELECT student, score
    2. FROM tests
    3. LATERAL VIEW explode(scores) t AS score;

    openLooKeng查询:

    1. SELECT student, score
    2. FROM tests