5.3.4.2. イベント値の変更
メッセージキーと同様に、変更イベントメッセージの値には schema セクションおよび payload セクションがあります。SQL Server コネクターによって生成されるすべての変更イベント値の payload セクションには、以下のフィールドが含まれる 構造 があります。
-
op
は、操作のタイプを記述する文字列の値が含まれる必須フィールドです。SQL Server コネクターの値はc
create(または insert)、u
更新、d
削除、およびr
読み取り(スナップショットの場合)になります。 -
before
はオプションのフィールドで、イベント発生 前 の行の状態がある場合はその行の状態になります。この構造は、server1
コネクターがdbo.customers
テーブルのすべての行に使用するserver1.dbo.customers.Value
Kafka Connect スキーマによって記述されます。 -
after
はオプションのフィールドで、イベント発生 後 の行の状態が含まれる場合です。構造は、で使用される同じserver1.dbo.customers.Value
Kafka Connect スキーマによって記述されbefore
ます。 source
イベントのソースメタデータを記述する構造が含まれる必須フィールドです。この場合、SQL Server のフィールドには Debezium バージョン、コネクター名、イベントが進行中のスナップショットの一部であるかどうか、またはコミット LSN、変更が発生した時点の LSN、データベース、スキーマ、および変更の時点を表すタイムスタンプが含まれます。また、ストリーミング時に
event_serial_no
はフィールドが表示されます。これは、同じコミットがあり、LSN を変更するイベント間を区別するために使用されます。値が異なる場合は、ほとんどの場合 2 つの状況があり1
ます。-
更新イベントにはの値がに設定されます。これは
2
、更新によって SQL Server の Change テーブルに 2 つのイベントが生成されるためです(ソースドキュメント)。最初の値には古い値が含まれ、2 つ目には新しい値が含まれます。したがって、1 つ目はドロップされ、Debezium 変更イベントを作成するために 2 つ目の値とともに使用されます。 -
プライマリーキーが更新されると、SQL Server は 2 つのレコードを発行して、古いプライマリーキーの値のレコードを
delete
削除insert
し、新しいプライマリーキーでレコードを作成します。どちらの操作も同じコミットを共有し、LSN を変更します。また、イベント番号は1
およびです2
。
-
更新イベントにはの値がに設定されます。これは
-
ts_ms
は任意で、コネクターがイベントを処理した JVM のシステムクロックを使用して(Kafka Connect タスクを実行している JVM でシステムクロックを使用)。
当然ながら、イベントメッセージ値の スキーマ 部分には、この構造と内部のネストされたフィールドを記述するスキーマが含まれます。
5.3.4.2.1. イベントの作成 リンクのコピーリンクがクリップボードにコピーされました!
イベントの 作成 値を以下の customers
表で見てみましょう。
このイベントの 値 の schema
一部を確認すると、source
構造のスキーマ(SQL Server コネクターに固有で 、 すべてのイベントで再利用される)のスキーマ、before
および after
フィールドのテーブル固有のスキーマが表示されます。
before
および after
フィールドのスキーマ名は logicalName. schemaName . tableName.Value の形式であるため、他のすべてのテーブルの他のすべてのスキーマから完全に独立した名前になります。つまり、Avro Converter を使用すると、各 論理ソース の 各テーブル の Avro スキーマは、独自の進化と履歴になります。
このイベントの 値 の payload
一部を確認すると、イベントの情報が表示されます。つまり、行が作成されたこと(つまり op=c
)、および after
フィールドの値に、新しい挿入された行の、、、id
first_name
last_name
および email
列の値が含まれていることが示されています。
これは、イベントの JSON 表現が記述する行よりもはるかに大きいことが分かります。JSON 表現にはメッセージの スキーマ と ペイロード の部分を含める必要があるため、これは true です。を使用すると、Kafka トピックに書き込まれた実際のメッセージのサイズを大幅に縮小することもできます。