本文主要介绍字段操作指令的用法和示例。
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对象,生成多条结果。
语法
| expand-values -path=<path> -limit=<limit> -keep <field> as <output>
参数说明
参数 | 类型 | 必填 | 说明 |
path | JSONPath | 否 | 指定字段内容中的JSON路径,用于定位需要展开的内容位置。 默认值为空,表示直接展开指定字段的完整内容。 |
limit | Integer | 否 | 每条原始数据可展开的最大条目数,值为1至10之间的整数。默认值为10。 |
keep | Bool | 否 | 展开后是否保留原字段。默认不保留,需要保留时,打开此开关。 |
field | Field | 是 | 需要展开的原字段名称,支持类型为 |
output | Filed | 否 | 展开的目标字段名称。如果不指定,则默认输出结果至输入字段。 针对原始内容的展开逻辑为: JSON数组:根据数组的元素逐个展开。 JSON字典:根据字典键值对逐个展开。 其他JSON类型:返回原值。 非法JSON:返回 |
示例
示例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}'