升级SPL规则语法对照

更新时间:2025-04-02 02:54:32

本文主要介绍数据加工(旧版)和数据加工(新版)规则语法的对比。

日志服务SPL语言在数据处理场景下与SQL的使用对照请参考SPLSQL的使用场景对照

数据同步(无需处理逻辑)

版本

脚本说明

版本

脚本说明

旧版

数据加工(旧版)DSL脚本为空

新版

数据加工(新版)SPL规则为空

数据筛选与过滤:文本类型精确匹配

版本

脚本说明

版本

脚本说明

旧版

e_keep(v("level") == "ERROR")或者

e_drop(v("level") != "ERROR")或者

e_if(v("level") != "ERROR", e_drop())或者

e_keep(e_search("level==ERROR"))

新版

| where level='ERROR'

数据筛选与过滤:数值类型过滤

版本

脚本说明

版本

脚本说明

旧版

e_keep(ct_int(v("status"))>=400)

新版

| where cast(status as bigint)>=400

数据筛选与过滤:模糊匹配

版本

脚本说明

版本

脚本说明

旧版

e_keep(op_in(v("level"), "ERROR"))或者

e_keep(e_search("level: ERROR")或者

e_if(op_not_in(v("level"), "ERROR"), e_drop())

新版

| where level like '%ERROR%'

新增字段,比如单个关键信息提取或者构造

版本

脚本说明

版本

脚本说明

旧版

  1. 正则提取单个信息。

    e_set("version", regex_select(v("data"), r'"version":\d+'))

  2. JSON提取单个信息,数据加工(旧版)JSON查询语言JMES语法

    e_set("version", json_select(v("data"), "version"))

新版

  1. 正则提取单个信息。

    | extend version=regexp_extract(data, '"version":\d+')

  2. JSON提取单个信息,数据加工(新版)JSON对象路径引用JsonPath

    | extend version=json_extract(data, '$.version')

时间信息解析与格式化

版本

脚本说明

版本

脚本说明

旧版

  1. 提取日志时间字段__time__

    e_set(
        "__time__", 
        dt_parsetimestamp(
            v("time"), 
            fmt="%Y/%m/%d %H-%M-%S",
        ),
    )
  2. 时间格式规范化。

    e_set(
        "__time__", 
        dt_parsetimestamp(
            v("time"), 
            fmt="%Y/%m/%d %H-%M-%S",
        ),
    )

新版

  1. 提取日志时间字段__time__

    | extend time=date_parse(time, '%Y/%m/%d %H-%i-%S')

    | extend __time__=cast(to_unixtime(time) as bigint)

  2. 时间格式规范化。

    | extend time=date_parse(time, '%Y/%m/%d %H-%i-%S')

    | extend time=date_format(time, '%Y-%m-%d %H:%i:%S')

字段处理与筛选

版本

脚本说明

版本

脚本说明

旧版

  1. 精确选择字段。

    e_keep_fields("__tag__:node", "path", regex=False)

  2. 按模式选择字段。

    e_keep_fields("__tag__:.*", regex=True)

  3. 原地重命名部分字段。

    e_rename("__tag__:node", node)

  4. 按模式排除字段。

    e_drop_fields("__tag__:.*", regex=True)

新版

  1. 精确选择字段。

    | project node="__tag__:node", path

  2. 按模式选择字段。

    | project -wildcard "__tag__:*"

  3. 原地重命名部分字段。

    | project-rename node="__tag__:node"

  4. 按模式排除字段。

    | project-away -wildcard "__tag__:*"

正则提取多个字段

版本

脚本说明

版本

脚本说明

旧版

e_regex("data", r"(\S+)\s+(\w+)", ["time", "level"])

新版

| parse-regexp data, '(\S+)\s+(\w+)' as time, level

JSON Object键值信息展开为数据字段

版本

脚本说明

版本

脚本说明

旧版

数据加工(旧版)JSON查询语言请参见JMES语法

e_json("data", depth=1, jmes="x.y.z")

新版

数据加工(新版)JSON对象路径引用请参见JsonPath

| parse-json -path='$.x.y.z' data

CSV格式内容提取为数据字段

版本

脚本说明

版本

脚本说明

旧版

e_csv("data", ["time", "addr", "user"], sep="\0", quote='"')

新版

  1. 单字符分隔符请参见CSV RFC 4180

    | parse-csv -delim='\0' -quote='"' data as time, addr, user

  2. 多字符分隔符。

    | parse-csv -delim='^_^' data AS time, addr, user

逻辑分支处理:并行分支

版本

脚本说明

版本

脚本说明

旧版

e_if(
    e_has("a"), e_set("mode_a", "1"), 
    e_has("b"), e_set("mode_b", "1"),
)

等价于以下Python代码结构:

if e_has("a"):
    e_set("mode_a", "1")
if e_has("b"):
    e_set("mode_b", "1")

新版

.let a = *
| where a is not null
| extend mode_a='1';

.let b = *
| where b is not null
| extend mode_b='1';

$a;
$b;

逻辑分支处理:互斥分支if-else/switch

版本

脚本说明

版本

脚本说明

旧版

e_switch(
    e_has("a"), e_keep_fields("x", "y", "z"), 
    e_has("b"), e_keep_fields("u", "v"),
    default=e_keep_fields("w"),
)

等价于以下Python代码结构:

if e_has("a"):
    e_keep_fields("x", "y", "z")
elif e_has("b"):
    e_keep_fields("u", "v")
else:
    e_keep_fields("w")

新版

.let src = *
| extend mode=case
    when a is not null then 1
    when b is not null then 2
    else 0
  end;

.let a = $src | where mode=1 | project x, y, z;
.let b = $src | where mode=2 | project u, v;
.let c = $src | where mode=0 | project w;

$a;
$b;
$c;

按照规则动态选择数据的目标Project/Logstore

版本

脚本说明

版本

脚本说明

旧版

e_output(project=v("dst_project"), logstore=v("dst_logstore"))

新版

| extend "__tag__:__sls_etl_output_project__"=dst_project

| extend "__tag__:__sls_etl_output_logstore__"=dst_logstore

加工结果指定HashKey路由写入对应目标Shard

版本

脚本说明

版本

脚本说明

旧版

e_output(hash_key_field="key_field")

新版

| extend "__tag__:__sls_etl_output_hash_key__"=to_hex(md5(to_utf8(key_field))

  • 本页导读 (1)
  • 数据同步(无需处理逻辑)
  • 数据筛选与过滤:文本类型精确匹配
  • 数据筛选与过滤:数值类型过滤
  • 数据筛选与过滤:模糊匹配
  • 新增字段,比如单个关键信息提取或者构造
  • 时间信息解析与格式化
  • 字段处理与筛选
  • 正则提取多个字段
  • JSON Object键值信息展开为数据字段
  • CSV格式内容提取为数据字段
  • 逻辑分支处理:并行分支
  • 逻辑分支处理:互斥分支if-else/switch
  • 按照规则动态选择数据的目标Project/Logstore
  • 加工结果指定HashKey路由写入对应目标Shard
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等