最近更新时间:2024.04.19 11:28:18
首次发布时间:2024.04.19 11:28:18
本文介绍日志服务支持的窗口函数语法及常见场景的使用示例。
窗口函数用于聚合、排序等操作,包含分区、排序和框架这三个核心元素。不同于普通聚合函数,窗口函数支持为每一行数据生成一个结果。
说明
在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time'
代表字符串,time
或 "time"
代表字段名或列名。
函数名称 | 语法 | 说明 |
---|---|---|
LAG(KEY, offset, default_value) | 查询分区内位于当前行上方第 offset 行的值。 | |
LEAD(KEY, offset, default_value) | 查询分区内位于当前行下方第 offset 行的值。 |
LAG 函数用于查询分区内位于当前行上方第 offset 行的值。
语法格式
LAG(KEY, offset, default_value) over ( [partition by partition_expression] [order by order_expression] [frame] )
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值可以为任意数据类型。 |
offset | 指定偏移量。如果 offset 为 0,则返回当前行的值。 |
default_value | 指定默认值,如果指定的偏移行不存在值,则返回您所指定的默认值。 |
partition by | 窗口函数将根据分区表达式将各行数据分为不同的分区。 |
order by | 窗口函数将根据排序表达式对各个分区内的各行数据进行排序。 |
frame | 窗口框架。 |
返回值说明
返回值与 KEY 的数据类型一致。
场景
计算每小时的请求数量以及一小时内的请求数量与前一小时的占比。
检索和分析语句
* | SELECT hour, total, total * 1.00000 /(LAG(total, 1, 1) over(ORDER BY hour)) AS ratio FROM ( SELECT COUNT(Action) AS total, DATE_TRUNC('hour', __time__) AS hour GROUP BY hour )
检索和分析结果
LEAD 函数用于查询分区内位于当前行下方第 offset 行的值。
语法格式
LEAD(KEY, offset, default_value) over ( [partition by partition_expression] [order by order_expression] [frame] )
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值可以为任意数据类型。 |
offset | 指定偏移量。如果 offset 为 0,则返回当前行的值。 |
default_value | 指定默认值,如果指定的偏移行不存在值,则返回您所指定的默认值。 |
partition by | 窗口函数将根据分区表达式将各行数据分为不同的分区。 |
order by | 窗口函数将根据排序表达式对各个分区内的各行数据进行排序。 |
frame | 窗口框架。 |
返回值说明
返回值与 KEY 的数据类型一致。
场景
计算每小时的请求数量以及一小时内的请求数量与后一小时的占比。
检索和分析语句
* | SELECT hour, total, total * 1.00000 /(LEAD(total, 1, 1) over(ORDER BY hour)) AS ratio FROM ( SELECT COUNT(Action) AS total, DATE_TRUNC('hour', __time__) AS hour GROUP BY hour )
检索和分析结果