从Hive迁移

openLooKeng使用ANSI SQL语法和语义,而Hive使用一种类似SQL的语言HiveQL。

使用下标代替UDF访问数组的动态索引

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

SELECT my_array[CARDINALITY(my_array)] as last_element
FROM ...

避免越界访问数组

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

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

对数组使用ANSI SQL语法

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

SELECT my_array[1] AS first_element
FROM ...

使用ANSI语法构造数组:

SELECT ARRAY[1, 2, 3] AS my_array

对标识符和字符串使用ANSI SQL语法

字符串用单引号分隔,标识符用双引号而不是反引号分隔:

SELECT name AS "User Name"
FROM "7day_active"
WHERE name = 'foo'

引用以数字开头的标识符

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

SELECT *
FROM "7day_active"

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

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

SELECT a || b || c
FROM ...

使用CAST目标的标准类型

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

SELECT
  CAST(x AS varchar)
, CAST(x AS bigint)
, CAST(x AS double)
, CAST(x AS boolean)
FROM ...

特别地,使用VARCHAR代替STRING

使用CAST进行整数除法

openLooKeng在对两个整数做除法时遵循执行整数除法的标准行为。例如,7除以2结果是3,而不是3.5。要对两个整数进行浮点除法,将其中一个转换为double:

SELECT CAST(5 AS DOUBLE) / 2

复杂表达式或查询使用WITH

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

WITH a AS (
  SELECT substr(name, 1, 3) x
  FROM ...
)
SELECT *
FROM a
WHERE x = 'foo'

使用UNNEST来扩展数组和映射

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

Hive查询:

SELECT student, score
FROM tests
LATERAL VIEW explode(scores) t AS score;

openLooKeng查询:

SELECT student, score
FROM tests
CROSS JOIN UNNEST(scores) AS t (score);

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫