ExtractField

ここでは、Apache Kafka® SMT org.apache.kafka.connect.transforms.ExtractField の使用方法を説明します。

説明

ExtractField は、複雑な(プリミティブ型でない、Map または Struct の)キーまたは値からフィールドを取得し、キーまたは値全体を抽出したフィールドで置き換えます。null 値はすべてそのまま渡されます。

レコードキー用(org.apache.kafka.connect.transforms.ExtractField$Key)または値用(org.apache.kafka.connect.transforms.ExtractField$Value)の固有の変換タイプを使用します。

以下の例は、ExtractField を単独で使用する方法、および 2 つ目の SMT と組み合わせて使用する方法を示しています。

フィールド名の抽出

次の構成スニペットは、ExtractField を使用してフィールド名 "id" を抽出する方法を示しています。

"transforms": "ExtractField",
"transforms.ExtractField.type": "org.apache.kafka.connect.transforms.ExtractField$Value",
"transforms.ExtractField.field": "id"

変換前: {"id": 42, "cost": 4000}

変換後: 42

ちなみに

その他の例については、マネージド型コネクターの ExtractField を参照してください。

特徴

Name 説明 デフォルト 指定可能な値 重要度
field 抽出するフィールド名。 string    

変換のチェーン化

SMT を組み合わせて使用すると、より複雑な変換を実行できます。

以下の例は、ValueToKeyExtractField の SMT をチェーン化して、JDBC コネクター からのデータのキーを設定する方法を示しています。変換では、ValueToKey によりメッセージ c1 フィールドがメッセージキーにコピーされ、ExtractField によりそのフィールドの整数部分のみが抽出されます。

"transforms": "createKey,extractInt",
"transforms.createKey.type": "org.apache.kafka.connect.transforms.ValueToKey",
"transforms.createKey.fields": "c1",
"transforms.extractInt.type": "org.apache.kafka.connect.transforms.ExtractField$Key",
"transforms.extractInt.field": "c1"

変換前のメッセージの状態を以下に示します。

"./bin/kafka-avro-console-consumer \
                              --bootstrap-server localhost:9092 \
                              --property schema.registry.url=http://localhost:8081 \
                              --property print.key=true \
                              --from-beginning \
                              --topic mysql-foobar

null {"c1":{"int":1},"c2":{"string":"foo"},"create_ts":1501796305000,"update_ts":1501796305000}
null {"c1":{"int":2},"c2":{"string":"foo"},"create_ts":1501796665000,"update_ts":1501796665000}

コネクターの構成が適用された後、新しい行が MySQL テーブルに挿入(パイプ)されます。

"echo "insert into foobar (c1,c2) values (100,'bar');"|mysql --user=username --password=pw demo

以下の内容が Avro コンソールコンシューマーに表示されます。キー(行の最初の値)が変換で定義されていた c1 の値と一致していることに注目してください。

100 {"c1":{"int":100},"c2":{"string":"bar"},"create_ts":1501799535000,"update_ts":1501799535000}

述語

"述語" を使用することにより、一定の条件を満たすレコードのみに変換が適用されるように、変換を構成することができます。述語は変換チェーンで使用することができ、Filter(Apache Kafka) と組み合わせると、条件に基づいて特定のレコードを除外できます。詳細と例については、「述語」を参照してください。