本トピックでは、DataWorks における Databricks データソースからのデータ同期の特徴および制限事項について説明します。
注意事項
制限事項
リソースグループ:Databricks Reader は サーバーレスリソースグループのみをサポートします。また、該当のリソースグループがバインドされた VPC に対して、パブリック NAT ゲートウェイおよび Elastic IP Address (EIP) を設定する必要があります。
読み取りモード:データ同期タスクは
JDBCモードでのみデータを読み取ることができます。カタログの種類と機能制限:データソースの接続性テストまたはウィザードモードによるデータ同期タスクの構成を行う際、DataWorks は
databricks-sdkを使用して Databricks REST API を呼び出します。この API は Unity Catalog のみをサポートしています。Unity Catalog 以外のカタログ(例:hive_metastore)を使用する場合、これらの機能は利用できません。以下のいずれかのソリューションをご検討ください:解決策 1(推奨): Unity Catalog への移行。Databricks の推奨に従い、データおよびメタデータを Unity Catalog へ移行します。これにより、DataWorks が提供するすべての機能を使用できるようになります。詳細については、「Unity Catalog への移行」をご参照ください。
ソリューション 2:スクリプトモードを直接使用。DataWorks でデータソースの構成を完了した後、[接続性のテスト] ステップをスキップし、スクリプトモードでデータ同期タスクを構成します。
同時読み取りとデータ整合性
Databricks Reader は、データパーティション分割のために
splitPkパラメーターを使用し、複数の同時実行タスクを起動して同期スループットを向上させます。以下の点にご注意ください:同時実行タスクは同一データベーストランザクション内で実行されず、実行間には時間的な間隔があります。
データソースに対して継続的に書き込みが行われている場合、同時読み取りによって不完全または不整合なデータスナップショットが生成される可能性があります。
技術的制約により、複数の同時読み取りにおいて完全に整合性のあるスナップショットを実現することは不可能です。ビジネス要件に応じて、以下のいずれかのソリューションをご選択ください:
ソリューション 1:シングルスレッド同期を使用し、
splitPkパラメーターを指定せずにデータパーティション分割を行わないようにします。これにより厳密なデータ整合性が保証されますが、同期処理が遅くなります。ソリューション 2:同期中にデータソースを静的状態に保つようにします。たとえば、テーブルロックを実施する、アプリケーションからの書き込みを一時停止する、またはスタンバイデータベースの同期を一時停止するなどの方法があります。この方法は高速ですが、オンラインサービスに影響を与える可能性があります。
エンコーディング
Databricks Reader は Java Database Connectivity (JDBC) を使用してデータを抽出します。JDBC はデータベース間の文字コードを自動検出し変換するため、エンコーディングを手動で構成する必要はありません。
増分同期
Databricks Reader は
SELECT ... WHERE ...文を実行してデータを抽出します。増分同期を実装する鍵は、WHERE句を正しく構築することです。推奨アプローチ(タイムスタンプ列に基づく):
ソースデータベーステーブルに
modify_timeなどのタイムスタンプ列を設計します。アプリケーションによるデータの追加または更新(論理削除を含む)時に、このタイムスタンプ列が適切に更新されるようにします。
データ同期タスクでは、このタイムスタンプ列を
WHERE句で使用し、前回の同期時点以降に変更されたデータを取得します。
非対応シナリオ:タイムスタンプやオートインクリメント ID のような新規/更新レコードを区別可能な列がテーブルに存在しない場合、Databricks Reader は増分同期を実行できません。この場合、フル同期のみが可能です。
サポートされるデータの型
オフライン読み取りの場合、Databricks Reader はほとんどの Databricks データの型をサポートしますが、一部の型はサポートされていません。開始前にデータの型を確認してください。
以下に、Databricks Reader がサポートする Databricks のデータの型を示します。
カテゴリ | Databricks のデータの型 |
整数 | TINYINT、SMALLINT、INT、BIGINT |
浮動小数点数 | FLOAT、DOUBLE、DECIMAL |
文字列 | STRING |
日付/時刻 | DATE、TIMESTAMP、TIMESTAMP_NTZ |
ブール値 | BOOLEAN |
複合型 | ARRAY、MAP、STRUCT |
その他の型 | INTERVAL、BINARY、GEOGRAPHY(srid)、GEOMETRY(srid) |
データソースの作成
データ同期タスクの開発を開始する前に、DataWorks で対応するデータソースを作成してください。詳細については、「データソース管理」をご参照ください。各パラメーターの詳細な説明については、構成ページのツールチップをご確認ください。
データ同期タスクの開発
本セクションでは、データ同期タスクの構成方法について説明します。
単一テーブルのオフライン同期
手順については、「ウィザードモードによるオフライン同期タスクの構成」および「スクリプトモードによるオフライン同期タスクの構成」をご参照ください。
スクリプトモードの全パラメーター一覧およびサンプルスクリプトについては、「付録:スクリプトのサンプルとパラメーター」をご参照ください。
よくある質問
Q:データ読み取り時に以下のエラーが発生しました:
[Databricks][JDBCDriver](500313)結果セットからデータ値を取得できませんでした:Column13:[Databricks][JDBCDriver](500312)データ行のフェッチに失敗しました:タイムスタンプの変換に失敗しました。A:Databricks の TIMESTAMP データの型の値範囲は、Java の Timestamp の値範囲を超えています。値が Java の範囲外である場合、JDBC ドライバーがエラーを返します。この問題を解決するには、
columnパラメーターを修正してください。例:"column": ["CAST(col_timestamp AS STRING)"]。
付録:スクリプトのサンプルとパラメーター
オフラインタスクのスクリプト構成
スクリプトモードでオフラインタスクを構成する場合、タスクスクリプト内に必要な形式でパラメーターを指定する必要があります。詳細については、「スクリプトモードによるオフライン同期タスクの構成」をご参照ください。以降のセクションでは、スクリプトモードにおける Reader のパラメーターについて説明します。
Reader スクリプトのサンプル
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "databricks",
"parameter": {
"datasource": "databricks",
"schema": "schema1",
"table": "table1",
"readMode": "jdbc",
"where": "id>1",
"splitPk": "id",
"column": [
"c1",
"c2"
]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"concurrent": 1
}
}
}Reader スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト |
datasource | DataWorks のデータソース名です。 | はい | 該当なし |
column | 同期対象のソーステーブルのカラム名の配列です。JSON 配列として指定します。
例:
同期対象のカラムを明示的に指定する必要があります。このパラメーターは空にできません。 | はい | 該当なし |
splitPk | データパーティション分割に使用するカラムです。このパラメーターを指定すると、同時実行タスクが有効になり、同期スループットを向上させることができます。
| いいえ | 該当なし |
where | データ選択のフィルター条件です。DataWorks は指定された | いいえ | 該当なし |
schema | 同期対象のスキーマです。 | はい | 該当なし |
table | 同期対象のテーブルです。1 つのタスクで同期できるのは 1 つのテーブルのみです。 | はい | 該当なし |
readMode | データ読み取りモードです。 | いいえ | jdbc |