时间函数
最近更新时间: 2024-10-17 17:10:00
时间函数支持对日志时间进行格式转换,分组聚合等处理,通常应用于根据日志时间做统计分析的场景。日志服务 CLS 在每条日志中附带日志采集时间,格式为 long 型的毫秒级时间戳__TIMESTAMP__
(1597807109000)。
时间转换函数 cast
函数名 | 作用 | 示例 |
---|---|---|
cast(date_string as timestamp) |
将 long 型或 text 型时间戳转换为TIMESTAMP 类型 ,该数据类型可用于 时间分组函数 histogram 和时间展示 |
cast(1597807109000 as timestamp) 转换结果:2020-08-19T03:18:29.000Z |
参数限制
long 型时间戳转换只支持毫秒级,如1597807109000,如果是秒级时间戳或微秒级时间戳,需要进行量级转换。
text 型时间戳转换只支持 ISO 8601格式的时间字符串,如:2019-12-25T16:17:01+08:00。
场景示例
- 将日志服务附带的日志采集时间
__TIMESTAMP__
转换为TIMESTAMP 类型
。
* | select cast(__TIMESTAMP__ as timestamp)
- 用户日志本身带有 long 型的秒级时间戳,如
time:1597807109
,需要转换为TIMESTAMP 类型
。
* | select cast(time*1000 as timestamp)
时间分组函数 histogram
日志服务支持按固定时间间隔对日志数据进行分组聚合统计,该函数可用于如统计每5分钟的访问次数等时间数据处理场景。
函数语法
`histogram(date_expression,date_interval)`
参数说明
date_expression 必须使用
TIMESTAMP 类型
数据格式,用户可通过 cast 函数把 ISO8601 格式的时间字符串,或者 UNIX 数值类型的时间转换为TIMESTAMP 类型
。date_interval 取值如下:
date_interval | 取值样例 |
---|---|
MINUTE | histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 1 MINUTE) |
HOUR | histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 1 HOUR) |
DAY | histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 1 DAY) |
MONTH | histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 1 MONTH) |
YEAR | histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 1 YEAR) |
场景示例
统计每5分钟访问次数 PV 值。
* | select histogram( cast(__TIMESTAMP__ as timestamp),INTERVAL 5 MINUTE) AS time , count(*) as PV group by time order by time
注意:
histogram 函数时间聚合最小粒度只能为1min,如需更小的粒度聚合,推荐使用数学取模方法。
* | select cast((__TIMESTAMP__-__TIMESTAMP__%60000) as timestamp) as time, count(1) as PV,count (distinct(remote_addr)) as UV group by time order by time
上述公式中,%60000 表示按60秒时间进行对齐聚合。