CData Sync はデータソースのテーブル定義が変更された際に、データソースに合わせて同期先のテーブル定義を変更する機能があります。この機能を有効にするにはジョブ設定で以下のように[スキーマの変更]をチェックします(デフォルトではチェックされた状態になっています)。
しかし、同期先によってスキーマの変更がサポートされないものがあります。Apache Kafka はこれまでスキーマの変更がサポートされていませんでしたが、今回、CData Sync V23 へのバージョンアップにより、カラムの追加を伴うテーブル定義の変更*が可能になりました。
*変更対象はカラムの追加のみで、カラムの削除やカラムサイズの変更は同期先スキーマに反映されません。
以下に実行例を示します。
データソースにSalesOrders というテーブルを用意し、これをApache Kafka に同期します。SalesOrders は以下のようにProductCode, ProductName, Quantity の3つのカラムを持ちます。実行例では同期先テーブルが無い状態でProductCode とProductName の2つのカラムを同期し、続いて3つのカラムを同期します。
1回目の同期
以下のようにProductCode とProductName の2つのカラムを同期します。
同期結果
以下のようにApache Kafka にテーブルが構築され、ProductCode とProductName の2つのカラムが同期されました。(このデータはDB Visualizer + CData Apache Kafka JDBC Driver で参照しています。)
2回目の同期
以下のようにProductCode とProductName に加えてQuantity を同期します。
同期結果
同期を実行した結果を示します。
同期先に新たに追加したカラム「Quantity」が追加されています。
Syncは同期の前にスキーマを比較し、変更があるとCreate Table 文を発行して既存のスキーマを上書きします。Schema Registory に登録されているスキーマは更新に応じてバージョンが付与されます。今回、最初に同期したときに作成したスキーマのバージョンは1 ,スキーマ変更時のバージョンは2 となります。
Schema Regisotry のAPI にアクセスすると各バージョンのスキーマを取得できます。今回同期したSalesOrders トピックについてバージョン1 のスキーマを見ると、ProductCode とProduct Name の二つのカラムが定義されていることが分かります。
URL
http://xx.xx.xx.xx/subjects/salesorders-value/versions/1
スキーマ
{"subject":"salesorders-value","version":1,"id":84,"schema":"{\"type\":\"record\",\"name\":\"salesorders_schema\",\"fields\":[{\"name\":\"ProductCode\",\"type\":[\"null\",\"string\"]},{\"name\":\"ProductName\",\"type\":[\"null\",\"string\"]}]}"}
つづいてバージョン2 のスキーマを見るとカラムQuantity が追加されていることが分かります。
URL
http://xx.xx.xx.xx/subjects/salesorders-value/versions/2
スキーマ
{"subject":"salesorders-value","version":2,"id":85,"schema":"{\"type\":\"record\",\"name\":\"salesorders_schema\",\"fields\":[{\"name\":\"ProductCode\",\"type\":[\"null\",\"string\"]},{\"name\":\"ProductName\",\"type\":[\"null\",\"string\"]},{\"name\":\"Quantity\",\"type\":[\"null\",\"int\"]}]}"}
このようにSync のApache Kafka 同期先はスキーマを変更するたびに新しいスキーマで上書きしていきます。
おわりに
本記事ではCData Sync V23 で新たに追加された機能の一つとして、Apache Kafka 同期先のスキーマ変更機能を紹介しました。CData Sync V23 は30日間無料でお使いいただけます。 Apache Kafka との連携をご検討の方はぜひお試しください。
関連コンテンツ