聚合指令

本文主要介绍聚合指令的用法和示例。

stats

用于统计分析日志的指令,类似 SQL 中的聚合函数(如 COUNTSUMAVG 等)。对日志数据中的特定字段进行统计、分组和聚合操作。

重要
  • 该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。

  • 默认情况stats返回前100条聚合结果,如果需要返回更多可以结合limit指令使用

语法

stats <output>=<aggOperator> by <group>,[<group>...]

参数说明

参数

类型

必填

说明

output

String

为统计结果字段指定别名。

aggOperator

SQLExp

支持以下聚合函数:

  • count

  • count_if

  • min

  • max

  • sum

  • avg

  • skewness

  • kurtosis

  • approx_percentile

  • approx_distinct

  • bool_and

  • bool_or

  • every

  • arbitrary

  • array_agg

group

String

指定聚合的维度,类似sqlgroup by的字段。

示例

  • 示例1:对于accesslogip统计pv

    • SPL语句

      * | stats pv=count(*) by ip
    • 输入数据

      ip: 192.168.1.1
      latencyMs: 10
      
      ip: 192.168.1.1
      latencyMs: 20
      
      ip: 192.168.1.2
      latencyMs: 10
    • 输出数据

      ip: 192.168.1.2
      pv: 1
      
      ip: 192.168.1.1
      pv: 2
  • 示例2:对于accesslog统计所有ip的延迟min/max

    • SPL语句

      * 
      | extend latencyMs=cast(latencyMs as bigint)
      | stats minLatencyMs=min(latencyMs), maxLatencyMs=max(latencyMs) by ip
    • 输入数据

      ip: 192.168.1.1
      latencyMs: 10
      
      ip: 192.168.1.1
      latencyMs: 20
      
      ip: 192.168.1.2
      latencyMs: 10
    • 输出数据

      ip: 192.168.1.2
      minLatencyMs: 10
      maxLatencyMs: 20
      
      ip: 192.168.1.1
      minLatencyMs: 10
      maxLatencyMs: 10
  • 示例3:对于accesslog统计所有pv

    • SPL语句

      * | stats pv=count(*)
    • 输入数据

      ip: 192.168.1.1
      latencyMs: 10
      
      ip: 192.168.1.1
      latencyMs: 20
      
      ip: 192.168.1.2
      latencyMs: 10
    • 输出数据

      pv: 3

sort

对查询结果进行排序,支持对字段值或统计结果进行升序(asc)或降序(desc)排序。它是日志分析中快速定位关键数据、生成有序报表的重要工具。

重要

该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。

语法

sort <field> [asc/desc] ,(<field> [asc/desc])

参数说明

参数

类型

必填

说明

field

String

指定排序的字段。支持以下类型字段:

  • 原始日志字段(如 statusrequest_time)。

  • 统计字段(如 count(*)avg(response_time))。

  • 时间字段(如 @timestamp)。

asc/desc

String

  • asc:升序排序(默认)。

  • desc:降序排序(常用场景:按统计值从高到低排序)。

示例

对于accessloglatencyMs排序。

  • SPL语句

    * 
    | extend latencyMs=cast(latencyMs as bigint) 
    | sort latencyMs desc
  • 输入数据

    ip: 192.168.1.1
    latencyMs: 10
    
    ip: 192.168.1.1
    latencyMs: 20
    
    ip: 192.168.1.2
    latencyMs: 15
  • 输出数据

    ip: 192.168.1.1
    latencyMs: 20
    
    ip: 192.168.1.2
    latencyMs: 15
    
    ip: 192.168.1.1
    latencyMs: 10

limit

用于限制查询结果返回的日志行数,是控制数据量的核心指令之一。通过 limit 可有效防止查询结果过大导致的性能问题或资源浪费,适用于日志分析、实时监控等多种场景。

重要
  • 该指令专用于Logstore的查询分析,不适用于新版数据加工、SPL规则消费、写入处理器和Logtail配置等场景。

  • 若不配合sort指令明确排序规则,limit指令的输出结果的 顺序是随机的(因日志存储时未保证自然顺序)。

语法

limit (<offset>,) <size>

参数说明

参数

类型

必填

说明

offset

Interger

跳过前offset行。

size

Interger

行数限制。

示例

对于accessloglatencyMs排序后取第一条。

  • SPL语句

    * 
    | extend latencyMs=cast(latencyMs as bigint) 
    | sort latencyMs
    | limit 1
  • 输入数据

    ip: 192.168.1.1
    latencyMs: 10
    
    ip: 192.168.1.1
    latencyMs: 20
    
    ip: 192.168.1.2
    latencyMs: 15
  • 输出数据

    ip: 192.168.1.1
    latencyMs: 20