字段操作指令

本文主要介绍字段操作指令的用法和示例。

project

保留与给定模式相匹配的字段、同时可重命名指定字段。指令执行过程中,先执行完成所有字段保留表达式,再执行重命名表达式。

重要

默认保留时间字段__time__和__time_ns_part__,并且不可重命名与覆盖,更多信息,请参见时间字段

语法

| project -wildcard <field-pattern>, <output>=<field>, ...

参数说明

参数

类型

必填

说明

wildcard

Bool

是否开启通配模式。默认为字段精确匹配。您需要开启通配模式时,需添加该参数。

field-pattern

FieldPattern

需要保留的字段名称或字段和通配符组合(处理匹配到的所有字段)。

output

Field

需要重命名的新字段名称,不支持多次重命名至相同的目标字段。

重要

如果新字段与输入数据中字段重名,其结果取值策略,请参见新旧值保留与覆盖

field

Field

是​

需要重命名的原字段名称。

  • 若该字段在输入数据中不存在,则不执行重命名。

  • 不支持同一字段被多次重命名。

示例

  • 示例1:保留特定字段。

    * | project level, err_msg
  • 示例2:重命名字段。

    * | project log_level=level, err_msg
  • 示例3:保留精确匹配的字段__tag__:*

    * | project "__tag__:*"

project-away

移除与给定模式相匹配的字段,原样保留其他所有字段。

重要

该指令将默认保留时间字段__time__和__time_ns_part__,更多详情,请参见时间字段

语法

| project-away -wildcard <field-pattern>, ...

参数说明

参数

类型

必填

说明

wildcard

Bool

是否开启通配模式。默认为字段精确匹配。您需要开启通配模式时,需添加该参数。

field-pattern

FieldPattern

需要移除的字段名称或者字段和通配符组合(处理匹配到的所有字段)。

project-rename

重命名指定字段,并保留其他所有字段原样。

重要

默认保留时间字段__time__和__time_ns_part__,并且不可重命名与覆盖,更多详情,请参见时间字段

语法

| project-rename <output>=<field>, ...

参数说明

参数

类型

必填

说明

output

Field

重命名后的字段名称。不支持多次重命名至相同的目标字段。

重要

如果新字段与输入数据中字段重名,其结果取值策略,请参见新旧值保留与覆盖

field

Field

待重命名的原字段名称。

  • 若该字段在数据条目中不存在,则不执行重命名。

  • 不支持同一字段被多次重命名

示例

重命名指定字段。

* | project-rename log_level=level, log_err_msg=err_msg

expand-values

展开指定字段的第一层JSON对象,生成多条结果。

重要
  • 展开结果的数据类型为VARCHAR。如果结果字段与输入数据中字段重名,取值策略请参见新旧值保留与覆盖

  • 无法操作时间字段__time____time_ns_part__,请参见时间字段

  • 支持场景:数据加工(新版)。不同SPL使用场景请参见通用参考

语法

| expand-values -path=<path> -limit=<limit> -keep <field> as <output>

参数说明

参数

类型

必填

说明

path

JSONPath

否​

指定字段内容中的JSON路径,用于定位需要展开的内容位置。

默认值为空,表示直接展开指定字段的完整内容。

limit

Integer

每条原始数据可展开的最大条目数,值为110之间的整数。默认值为10。

keep

Bool

展开后是否保留原字段。默认不保留,需要保留时,打开此开关。

field

Field

需要展开的原字段名称,支持类型为VARCHAR。如果指定字段不存在,则不执行展开操作。

output

Filed

展开的目标字段名称。如果不指定,则默认输出结果至输入字段。

针对原始内容的展开逻辑为:

JSON数组:根据数组的元素逐个展开。

JSON字典:根据字典键值对逐个展开。

其他JSON类型:返回原值。

非法JSON:返回null

示例

  • 示例1:展开数组,输出多条结果数据。

    • SPL语句

      * | expand-values y
    • 输入数据

      x: 'abc'
      y: '[0,1,2]'
    • 输出数据

      # 条目1
      x: 'abc'
      y: '0'
      
      # 条目2
      x: 'abc'
      y: '1'
      
      # 条目3
      x: 'abc'
      y: '2'
  • 示例2:展开字典,输出多条结果数据。

    • SPL语句

      * | expand-values y
    • 输入数据

      x: 'abc'
      y: '{"a": 1, "b": 2}'
    • 输出数据

      # 条目1
      x: 'abc'
      y: '{"a": 1}'
      
      # 条目2
      x: 'abc'
      y: '{"b": 2}'
  • 示例3:展开指定JSON Path下的内容,并输出至新字段。

    • SPL语句

      * | expand-values -path='$.body' -keep content as body
    • 输入数据

      content: '{"body": [0, {"a": 1, "b": 2}]}'
    • 输出数据

      # 条目1
      content: '{"body": [1, 2]}'
      body: '0'
      
      # 条目2
      content: '{"body": [1, 2]}'
      body: '{"a": 1, "b": 2}'