SQL模式下的第一个tab【查询结果】右边的帮助提示信息如下:
① 请确保在SQL查询语句末尾带上limit条件,否则页面默认显示前5000条结果;
② Impala SQL语法指南 (查询托管在灯塔集群的数据需使用)
③ OneSQL 语法指南 (跨源查询模式需使用)
腾讯灯塔 DataTalk 没有固定的语法,是按查询的数据源SQL语法。
旧的 DataTalk 页面是引用的灯塔融合引擎(DataInsight的数据源),对应 Impala SQL
语法。
主要用到 IF、CASE、IN、BETWEEN、CAST、AVG、COUNT 等关键字。
SQL Operators:
=
, !=
, <>
;<
, <=
, >
, >=
。AND
、OR
、NOT
Impala Conditional Functions:
IS NOT NULL
。IS NULL
。recent_7_days
是DataTalk中拖入的时间范围交互组件定义的变量。
在辅助画布中,可以看到拖入了两个时间范围交互组件:
点击进入【最近7天】组件的设置(⚙️),可以修改变量字段类型、变量KEY、变量名以及组件配置(默认取值)。
YYYYMMDDHH整形
,注意SQL中要将时间戳变量的类型转换对齐,才能使用 BETWEEN 进行日期比较。点击顶部工具栏中的【变量池】,在【系统变量】中可以看到时间范围组件变量KEY——recent_7_days
。
Impala Date and Time Functions
Impala Date and Time Functions 中支持字符串强转时间戳类型:cast('2016-01-31' as timestamp)
。
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 returnsNULL
if the input json_str is invalid or if nothing is selected based on the selector JSON path.
相关参考:
例如解析 value 中的 cmd 和 retcode 字段:
新的 DataTalk 页面引用的是扩展TDW数据源,则使用的是 Presto SQL
。
需查询 Presto SQL 与 Impala SQL 中的 IF、CASE、IN、BETWEEN、CAST、AVG、COUNT 等关键字对应语法。
cast、json解析,有点类似 CLS日志查询语法,可参考监控告警方案 - CLS告警策略存档中的相关实践。
常用语法:
Comparison Functions and Operators:
<
、>
、<=
、>=
、=
、<>
、!=
(non-standard)。Conditional Expressions:
val1 = val2 ? null : val1
。Conversion Functions
Aggregate Functions:
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
字段。
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,
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')
8.12. JSON Functions and Operators:
is_json_scalar
json_array_contains
json_array_get
json_array_length
json_extract
(json, json_path) → jsonjson_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跨引擎计算揭秘