Impala vs. Presto简要对比梳理


腾讯灯塔产品相关介绍文档:

SQL模式下的第一个tab【查询结果】右边的帮助提示信息如下:

① 请确保在SQL查询语句末尾带上limit条件,否则页面默认显示前5000条结果;
Impala SQL语法指南 (查询托管在灯塔集群的数据需使用)
③ OneSQL 语法指南 (跨源查询模式需使用)

腾讯灯塔 DataTalk 没有固定的语法,是按查询的数据源SQL语法。

旧日报(Impala)

旧的 DataTalk 页面是引用的灯塔融合引擎(DataInsight的数据源),对应 Impala SQL 语法。

核心语法

主要用到 IF、CASE、IN、BETWEEN、CAST、AVG、COUNT 等关键字。

SQL Operators

Impala Conditional Functions

时间范围

recent_7_days 是DataTalk中拖入的时间范围交互组件定义的变量。

在辅助画布中,可以看到拖入了两个时间范围交互组件:

点击进入【最近7天】组件的设置(⚙️),可以修改变量字段类型、变量KEY、变量名以及组件配置(默认取值)。

  1. 变量字段类型YYYYMMDDHH整形,注意SQL中要将时间戳变量的类型转换对齐,才能使用 BETWEEN 进行日期比较。
  2. 变量KEY变量显示名 可以自定义。可在SQL中引用变量KEY,start、end分别表示起、止整点时间。
  3. 组件配置(默认组织):最近7天。

点击顶部工具栏中的【变量池】,在【系统变量】中可以看到时间范围组件变量KEY——recent_7_days

时间转换

Impala Date and Time Functions

Impala Date and Time Functions 中支持字符串强转时间戳类型:cast('2016-01-31' as timestamp)

JSON解析

Impala Miscellaneous Functions

  • GET_JSON_OBJECT(STRING json_str, STRING selector)

Purpose: Extracts JSON object from the json_str based on the selector JSON path and returns the string of the extracted JSON object.
The function returns NULL if the input json_str is invalid or if nothing is selected based on the selector JSON path.

相关参考

例如解析 value 中的 cmd 和 retcode 字段:

  • GET_JSON_OBJECT(value, ‘$.cmd’)
  • GET_JSON_OBJECT(value, ‘$.retcode’)

新日报(Presto)

新的 DataTalk 页面引用的是扩展TDW数据源,则使用的是 Presto SQL

核心语法

需查询 Presto SQL 与 Impala SQL 中的 IF、CASE、IN、BETWEEN、CAST、AVG、COUNT 等关键字对应语法。

cast、json解析,有点类似 CLS日志查询语法,可参考监控告警方案 - CLS告警策略存档中的相关实践。

常用语法

Comparison Functions and Operators:

Conditional Expressions

Conversion Functions

  • cast、try_cast

Aggregate Functions:

  • count、count_if
  • max、min、avg

SELECT

条件语句

if(condition, true_value, false_value) 基于 CASE WHEN 的等效实现:

CASE
    WHEN condition THEN true_value
    [ ELSE false_value ]
END

其他参考

关于SQL命令中不等号(!=,<>)

t-sql操作符中,不等号(!=,<>)查询出来的结果集不包含有当前字段为 null 的数据。

Presto的IN条件语句的实现逻辑是限定范围查询

时间范围

参考旧日报,在辅助画布中,拖入了时间范围交互组件,并定义变量KEY。

时间转换

毫秒级时间戳换算成秒级:FLOOR(CAST(f_report_time AS BIGINT) / 1000),floor取整秒,忽略毫秒。

presto vs hive 时间转换:@csdn @zhihu

Date and Time Functions and Operators

相关函数format_datetime

目前,医典正式环境性能上报(formal-yidianperformance)对 f_report_time 字段在 th 和 CLS 开启了筛选、索引, f_log_time 字段未开启。
如果在 th 上对 f_log_time 字段开启了筛选,在CLS日志主题索引配置开启了索引,则可以直接引用 f_log_time 字段。

  1. 毫秒级时间戳 f_report_time 转换为秒级,注意 /1000 将得到浮点数,可以调用 FLOOR 函数取整或 CAST AS BIGINT 强转取整(四舍五入)。
FLOOR(CAST(f_report_time AS BIGINT) / 1000) AS tss,
CAST(CAST(f_report_time AS BIGINT) / 1000 AS BIGINT) AS tss,
  1. 如果 f_log_time 字段有缺失,可以基于 f_report_time 转换为秒级时间戳,再依次调用 from_unixtime - format_datetime 按指定日期格式输出字符串。
-- 1666805107976 -> 2022-10-26 17:25:07
format_datetime(from_unixtime(CAST(f_report_time AS BIGINT)/1000),'yyyy-MM-dd HH:mm:ss')

JSON解析

8.12. JSON Functions and Operators:

  • is_json_scalar
  • json_array_contains
  • json_array_get
  • json_array_length
  • json_extract(json, json_path) → json
  • json_extract_scalar(json, json_path) → varchar

例如解析 value 中的 cmd 和 retcode 字段:

  • json_extract_scalar(json_extract(f_extra, '$.value'), '$.cmd')
  • json_extract_scalar(f_extra, '$.value.retcode')

对空对象的正确判断是 is null 或 is not null,兼顾空对象(null)和空字符串的完整判断为:

json_extract_scalar(f_extra, '$.value.error') is null or length(json_extract_scalar(f_extra, '$.value.error'))  < 1) as count_success_ssrenter

其他参考

揭秘腾讯大数据之平台综述篇
TDW开源:腾讯的分布式数据仓库
从TDW到ClickHouse的最佳实践

TDW与PostgreSQL数据互访问功能
PostgreSQL在腾讯数据仓库TDW的使用教程
「解耦」方能「专注」——腾讯天穹SuperSQL跨引擎计算揭秘

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值