在查询分析中,往往需要对日志中的时间字段进行处理,例如将时间戳转换成指定格式等,本文档介绍时间字段的常用转换示例。

日志中可能有多个记录时间的字段,例如:
  • __time__:用API/SDK写入日志数据时指定的日志时间,该字段可用于日志投递、查询、分析。
  • 日志中原有的时间字段:日志在生成时,用于记录日志事件发生时间的字段,是原始日志的字段。
时间字段的格式可能不统一、或不便于查看和阅读,可以在查询分析中将其转换为指定格式。例如:
  1. 把__time__转化成时间戳
  2. 把__time__以固定格式打印
  3. 把timestamp转化成指定格式

把__time__转化成时间戳

把字段__time__转化成时间戳格式,建议使用from_unixtime函数。更多信息,请参见from_unixtime函数
* | select from_unixtime(__time__) 

把__time__以固定格式打印

把字段__time__年-月-日 时:分:秒的形式打印下来,建议使用date_format函数。更多信息,请参见date_format函数
* | select date_format(__time__, '%Y-%m-%d %H:%i:%S') 

把日志中的时间转换成指定格式

把日志中的时间字段转化成指定格式(年-月-日 时:分:秒),只取年-月-日部分,并做Group by处理,建议使用date_format函数。更多信息,请参见date_format函数
  • 日志样例:
    __topic__:  
    body_byte_sent:  307
    hostname:  example.com
    http_user_agent:  Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 QQ/192.0.2.1 V1_IPH_SQ_7.1.8_1_APP_A Pixel/750 Core/UIWebView NetType/WIFI QBWebViewType/1
    method:  GET
    referer:  www.example.com
    remote_addr:  192.0.2.0
    request_length:  111
    request_time:  2.705
    status:  200
    upstream_response_time:  0.225582883754
    url:  /?k0=v9&
    time:2017-05-17 09:45:00
  • SQL语句样例:
    * | select date_format (date_parse(time,'%Y-%m-%d %H:%i:%S'), '%Y-%m-%d') as day, count(1) as uv group by day order by day asc