Link Search Menu Expand Document Documentation Menu

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 处理器所需的参数,即 sourcetarget

...
  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"]
}
剩余 350 字符

有问题?

想做贡献?