创建定时SQL-时序库导入 日志库/时序库

本文主要介绍在时序数据库中进行自定义分析后使用定时SQL。通过定时执行SQL查询,可以对时序数据进行灵活、高效的分析处理。

前提条件

已经采集数据到MetricStore,具体操作,请参见指标数据采集(Metric)

时序库中创建定时SQL任务

  1. 登录日志服务控制台。在Project列表区域,单击目标Project。

    image

  2. 时序存储 > 时序库页签中,单击目标MetricStore。image

  3. 选择更多操作 > 自定义分析,系统将跳转到自定义分析页面。在自定义分析页面,输入SQL查询分析语句。SQL查询分析语法请参见SQL语法使用SQL查询时序库案例

    image

    在时序数据的SQL语法中,FROM的表名只能为{metrics_store_name}.prom{metrics_store_name}为采集到数据的源MetricStore名称。表名两端的双引号('''')需要保留。例如* | SELECT * FROM "my_metric_store.prom" WHERE __name__ != ''。查询结果字段说明如下:

    字段

    字段类型

    说明

    示例

    __name__

    varchar

    Metric名称。

    nginx_ingress_controller_response_size

    __labels__

    map<varchar, varchar>

    Label信息,格式为{key}#$#{value}|{key}#$#{value}|{key}#$#{value}

    app#$#ingress-nginx|controller_class#$#nginx|controller_namespace#$#kube-system|controller_pod#$#nginx-ingress-controller-589877c6b7-hw9cj

    __time_nano__

    bigint

    时间戳,单位为纳秒。

    1585727297293000000

    __value__

    double

    某个时间点对应的值。

    36.0

  4. 在自定义分析页面,如果想将查询分析结果保存为定时SQL,可以单击另存为定时SQL

    自定义分析页面执行 SQL查询分析语句后,本质上是将时序数据转为了日志数据,您可将查询结果通过定时SQL导入到新的日志库或时序库。

    创建定时SQL面板中,写入模式分为日志库导入日志库和日志库导入时序库。

    • 时序库数据分析后导入到日志库

    • 时序库数据分析后导入到时序库

      与导入日志库不同的是,时序库对数据格式及数据类型有一定的要求,如下:

      1. 指标字段:日志数据中应包含可以转换为时序数据库指标的字段,例如数值型字段(如计数、平均值等)。这些字段将被用于生成时序数据库中的指标数据。

      2. 标签字段(可选):如果需要对时序数据进行更细粒度的分类或查询优化,建议在日志数据中添加标签字段(Labels)。这些字段可以在定时SQL任务中通过附加静态标签的方式增强数据局部性。

      3. 时间字段:日志数据必须包含时间戳字段(如__time__),用于标识每条日志的时间信息。如果未在SQL代码中定义__time__字段,默认会使用调度窗口的开始时间作为时间戳。

      4. 避免__name__、__labels__、__value__直接配置到指标列或Lables。

数据处理常用 - SQL函数

element_at()

__labels__可使用element_at函数获取其中某个Key的值,例如element_at(__labels__, 'key')

  • 示例1

    查询和分析全部数据。

    *| SELECT * FROM "my_metric_store.prom" WHERE __name__ != '' 
  • 示例2

    针对指标 http_request_count,查询__labels__中'domain'值为www.example.com的数据,并对__value__字段进行求和计算。

    *| SELECT sum(__value__) FROM "my_metric_store.prom" WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com' 
  • 示例3

    针对指标 http_request_count,查询__labels__中 'domain'值为www.example.com的数据,并对__value__字段按小时粒度执行聚合求和计算。

    *| SELECT sum(__value__),date_trunc('hour', __time_nano__/1000000) as t
    FROM "my_metric_store.prom" 
    WHERE __name__='http_request_count' and element_at(__labels__, 'domain')='www.example.com'
    GROUP BY t
    ORDER BY t DESC

split_to_map()

__labels__可使用split_to_map函数进行拆分,组合成map数据结构。

  • 示例

    * |
    select
      split_to_map(__labels__, '|', '#$#') as labels,
      __name__ as metric,
      __value__ as value,
      __time_nano__ as time
    FROM  "test-c.prom"
    where
      __name__ != ''

相关内容

使用SQL查询时序库示例: