flatten
The flatten
处理器将事件中的嵌套对象转换为扁平结构。
配置
下表描述了 flatten
处理器的配置选项。
选项 | 必需 | 类型 | 描述 |
---|---|---|---|
source | 是 | 字符串 | 要对其执行操作的源键。如果设置为空字符串 ("" ),则处理器将事件的根作为源。 |
目标 | 是 | 字符串 | 要放入扁平化字段的目标键。如果设置为空字符串 ("" ),则处理器将事件的根作为目标。 |
exclude_keys(排除的键) | 否 | 列表 | 应从处理中排除的源字段中的键。默认值为空列表 ([] )。 |
remove_processed_fields | 否 | 布尔型 | 当设置为 true 时,处理器会从源中删除所有已处理的字段。默认值为 false 。 |
remove_list_indices | 否 | 布尔型 | 当设置为 true 时,处理器会将源映射中的字段转换为列表,并将这些列表放入目标字段。默认值为 false 。 |
flatten_when | 否 | 字符串 | 一个条件表达式,例如 /some-key == "test"' ,它决定 flatten 处理器是否在事件上运行。默认值为 null ,这意味着除非另有说明,否则所有事件都将被处理。 |
tags_on_failure | 否 | 列表 | 当事件处理失败时,要添加到事件元数据中的标签列表。 |
用法
以下示例展示了如何在 OpenSearch Data Prepper 管道中使用 flatten
处理器。
最小配置
以下示例仅显示了使用 flatten
处理器所需的参数,即 source
和 target
。
...
processor:
- flatten:
source: "key2"
target: "flattened-key2"
...
例如,当输入事件包含以下嵌套对象时
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
}
}
The flatten
处理器在 flattened-key2
对象下创建一个扁平结构,如以下输出所示
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
},
"flattened-key2": {
"key3.key4": "val2"
}
}
删除已处理字段
在扁平化事件的所有嵌套对象时,使用 remove_processed_fields
选项。这将删除事件的所有已处理字段,如以下示例所示
...
processor:
- flatten:
source: "" # empty string represents root of event
target: "" # empty string represents root of event
remove_processed_fields: true
...
例如,当输入事件包含以下嵌套对象时
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
},
"list1": [
{
"list2": [
{
"name": "name1",
"value": "value1"
},
{
"name": "name2",
"value": "value2"
}
]
}
]
}
The flatten
处理器创建一个扁平结构,其中所有已处理字段均不存在,如以下输出所示
{
"key1": "val1",
"key2.key3.key4": "val2",
"list1[0].list2[0].name": "name1",
"list1[0].list2[0].value": "value1",
"list1[0].list2[1].name": "name2",
"list1[0].list2[1].value": "value2",
}
从扁平化中排除特定键
使用 exclude_keys
选项可防止特定键在输出中被扁平化,如以下示例所示,其中排除了 key2
值
...
processor:
- flatten:
source: "" # empty string represents root of event
target: "" # empty string represents root of event
remove_processed_fields: true
exclude_keys: ["key2"]
...
例如,当输入事件包含以下嵌套对象时
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
},
"list1": [
{
"list2": [
{
"name": "name1",
"value": "value1"
},
{
"name": "name2",
"value": "value2"
}
]
}
]
}
输入事件中的所有其他嵌套对象(不包括 key2
键)都将被扁平化,如以下示例所示
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
},
"list1[0].list2[0].name": "name1",
"list1[0].list2[0].value": "value1",
"list1[0].list2[1].name": "name2",
"list1[0].list2[1].value": "value2",
}
删除列表索引
使用 remove_list_indices
选项可将源映射中的字段转换为列表,并将这些列表放入目标字段,如以下示例所示
...
processor:
- flatten:
source: "" # empty string represents root of event
target: "" # empty string represents root of event
remove_processed_fields: true
remove_list_indices: true
...
例如,当输入事件包含以下嵌套对象时
{
"key1": "val1",
"key2": {
"key3": {
"key4": "val2"
}
},
"list1": [
{
"list2": [
{
"name": "name1",
"value": "value1"
},
{
"name": "name2",
"value": "value2"
}
]
}
]
}
处理器将从输出中删除所有索引,并将其作为扁平化的结构化列表放入源映射中,如以下示例所示
{
"key1": "val1",
"key2.key3.key4": "val2",
"list1[].list2[].name": ["name1","name2"],
"list1[].list2[].value": ["value1","value2"]
}