时间函数

最近更新时间: 2024-06-12 15:06: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

参数限制

  1. long 型时间戳转换只支持毫秒级,如1597807109000,如果是秒级时间戳或微秒级时间戳,需要进行量级转换。

  2. text 型时间戳转换只支持 ISO 8601格式的时间字符串,如:2019-12-25T16:17:01+08:00。

场景示例

  1. 将日志服务附带的日志采集时间__TIMESTAMP__转换为 TIMESTAMP 类型

    * | select cast(__TIMESTAMP__ as timestamp)
  2. 用户日志本身带有 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秒时间进行对齐聚合。