Flatten¶
ここでは、Apache Kafka® SMT org.apache.kafka.connect.transforms.Flatten
の使用方法を説明します。
説明¶
ネストしたデータ構造をフラット化します。階層ごとにフィールド名が区切り文字で連結されて、それぞれのフィールド名が生成されます(区切り文字は変更することができます)。スキーマが存在する場合は Struct に、スキーマのないデータの場合は Map に適用されます。JSON SMT(Single Message Transforms)の区切り文字はピリオド文字 .
で、これがデフォルトになります。
レコードキー用(org.apache.kafka.connect.transforms.Flatten$Key
)または値用(org.apache.kafka.connect.transforms.Flatten$Value
)の固有の変換タイプを使用します。
Avro スキーマ を使用する場合、デフォルトの SMT の区切り文字であるピリオド .
は使用できません。区切り文字には、アンダースコア _
を使用します。区切り文字を変更するには、以下のプロパティを使用します。
"transforms": "flatten",
"transforms.flatten.type": "org.apache.kafka.connect.transforms.Flatten$Value",
"transforms.flatten.delimiter": "_"
注釈
Flatten SMT では配列はフラット化されません。配列はそのまま維持されます。
JSON の例¶
次の構成スニペットは、Flatten
を使用して、ピリオド .
を区切り文字としてフィールド名を連結する方法を示しています。
"transforms": "flatten",
"transforms.flatten.type": "org.apache.kafka.connect.transforms.Flatten$Value",
"transforms.flatten.delimiter": "."
変換前:
{
"content": {
"id": 42,
"name": {
"first": "David",
"middle": null,
"last": "Wong"
}
}
}
変換後:
{
"content.id": 42,
"content.name.first": "David",
"content.name.middle": null,
"content.name.last": "Wong"
}
Avro の例¶
Avro スキーマの仕様では、フィールド名には英数字とアンダースコア文字 _
のみを使用できます。次の構成スニペットは、Flatten
を使用して、アンダースコア _
を区切り文字としてフィールド名を連結する方法を示しています。
"transforms": "flatten",
"transforms.flatten.type": "org.apache.kafka.connect.transforms.Flatten$Value",
"transforms.flatten.delimiter": "_"
変換前:
{
"content": {
"id": 42,
"name": {
"first": "David",
"middle": null,
"last": "Wong"
}
}
}
変換後:
{
"content_id": 42,
"content_name_first": "David",
"content_name_middle": null,
"content_name_last": "Wong"
}
ちなみに
その他の例については、マネージド型コネクターの Flatten を参照してください。
特徴¶
Name | 説明 | 型 | デフォルト | 指定可能な値 | 重要度 |
---|---|---|---|---|---|
delimiter |
出力レコード用のフィールド名を生成する際に、入力レコードのフィールド名の間に挿入する区切り文字。 | string | . | _ | 中 |
述語¶
"述語" を使用することにより、一定の条件を満たすレコードのみに変換が適用されるように、変換を構成することができます。述語は変換チェーンで使用することができ、Filter(Apache Kafka) と組み合わせると、条件に基づいて特定のレコードを除外できます。詳細と例については、「述語」を参照してください。