最近更新时间:2024.01.30 10:05:13
首次发布时间:2022.12.09 14:20:11
本文介绍日志服务支持的日期和时间函数语法及常见场景的 SQL 示例。
注意
日志服务产品架构升级,支持更丰富的检索分析功能。
关于 1.0 架构与 2.0 架构的具体说明,请参考日志服务架构升级通知。
__time__
,该字段的值为 UNIX 时间戳格式,单位为毫秒(ms)。例如时间戳 1670555662327 表示 2022-12-09 11:14:22。日志服务提供的日期和时间函数支持对日志中的日期和时间进行格式转换、分组聚合等处理。目前支持的函数如下:
函数名 | 说明 |
---|---|
根据您指定的时间单位截断日期或时间表达式,并按照毫秒、秒、分钟、小时、日、月或年对齐。 | |
将 Timestamp 类型的日期或时间表达式转化为指定格式的日期和时间表达式。 | |
补全查询时间窗口内缺失的数据。 |
根据您指定的时间单位截断日期或时间表达式,并按照毫秒、秒、分钟、小时、日、月或年对齐。
date_trunc(unit, x)
参数说明:
参数 | 说明 |
---|---|
unit | 时间单位,取值为 millisecond、second、minute、hour、day、week、month、quarter、year。详细信息请参考 unit说明。 |
x | 参数值为日期或时间表达式,UNIX 时间戳格式。 |
以下示例表示按照时间字段 __time__
中的分钟维度进行数据聚合。
* | SELECT date_trunc('minute', __time__) AS time group by time
date_format 函数用于将 Timestamp 类型的日期或时间表达式转化为指定格式的日期和时间表达式。
date_format(x, format)
参数说明:
参数 | 说明 |
---|---|
x | 参数值为日期或时间表达式,UNIX 时间戳格式。 |
format | 日期和时间表达式的转换格式。详细信息请参考 format说明。 |
按照时间字段 __time__
中的月份进行数据聚合。
* | SELECT date_format(__time__, 'M') AS m group by m
将 start_time 字段转换为指定的时间格式,精确到秒。
说明
此处的时间字段 start_time 是 10 位的秒级时间戳为例,日志服务中的日志时间戳精确到毫秒,所以该字段需要 *1000
以转换为毫秒单位。
* | SELECT date_format(date_trunc('second', start_time * 1000) , 'HH:mm:ss') AS time
time_series 函数用于补全查询时间窗口内缺失的数据。
说明
time_series 函数根据固定的时间间隔对日志数据进行分组聚合、统计,使用时必须搭配 GROUP BY 语法和 ORDER BY 语法,且 ORDER BY 语法不支持倒序(DESC)排序方式。
time_series(key, window_time, format, padding_data)
参数说明:
参数 | 说明 |
---|---|
key | 表示时间的字段,例如 |
window_time | 窗口大小,即时间间隔。单位为 s(秒)、m(分)、h(小时)、d(天)。例如 10h 表示 10 小时、5d 表示 5 天。 |
format | 返回结果的时间格式。详细信息请参考 format 说明。 |
padding_data | 用于补全的内容。支持的设置包括:
|
以下示例表示按照一个小时的时间粒度进行数据补全,将缺失的值统一设置为 0。
* | select time_series(__time__, '1h', 'Y-MM-dd HH:mm:ss', '0') as time, count(*) as num group by time order by time
format | 说明 |
---|---|
E | 星期的缩写。例如 Mon、Tues。 |
MMM | 月份的缩写。例如 Jan、Feb。 |
M | 月份。数值类型,取值范围为 1~12。 |
dd | 每个月的第几天。十进制格式,取值范围为 01~31。 |
d | 每个月的第几天。十进制格式,取值范围为 1~31。 |
H | 小时,24 小时制。 |
h | 小时,12 小时制。 |
mm | 分钟。数值类型,取值范围为 00~59。 |
DDD | 每年的第几天。取值范围为 001~366。 |
MMMM | 月份的英文表达,例如 January、February。 |
MM | 月份。数值格式,取值范围为 01~12。 |
a | 上午或下午,即 AM 或 PM。 |
hh:mm:ss a | 12 小时制的时间,格式为 hh:mm:ss AM/PM。 |
ss | 秒。取值范围为 00~59。 |
HH:mm:ss | 24 小时制的时间,格式为 HH:mm:ss。 |
ww | 将星期日作为一周的第一天时,ww 表示每年的第几周。取值范围为 01~53。 |
EEEE | 星期几的名称。例如 Monday、Tuesday。 |
u | 4 位数的年份。例如 2022。 |
Y | 4 位数的年份。例如 2022。 |
y | 4 位数的年份。例如 2022。 |
G | 时代代号。例如 AD(公元后) 或 BC(公元前)。 |
L | 一年中的月份(独立形式)。 |
F | 每周过去了几天,例如周二为 1,表示本周过去了 1 天。 |
k | 一天中的小时数。取值范围为 0~23。 |
K | 上午或下午的小时数。取值范围为 0~11。 |
unit | 说明 |
---|---|
millisecond | 毫秒 |
second | 秒 |
minute | 分钟 |
hour | 小时 |
day | 天 |
week | 周 |
month | 月 |
quarter | 季度 |
year | 年 |