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) と組み合わせると、条件に基づいて特定のレコードを除外できます。詳細と例については、「述語」を参照してください。