Db2データソースはデータハブとして機能します。DataWorksは、Db2データソースからデータを読み書きするためのDb2 ReaderとDb2 Writerを提供しています。これにより、大量のデータの計算問題を迅速に解決できます。このトピックでは、Db2データソースとのデータ同期機能について説明します。
サポートされているDb2バージョン
Db2 ReaderとDb2 Writerが使用するDb2 JDBCドライバーのバージョンは、IBM Data Server Driver for JDBC and SQLJ 4.11.77です。Db2 JDBCドライバーのバージョンとDb2バージョンのマッピングの詳細については、IBM Supportをご参照ください。
制限事項
Db2 ReaderとDb2 Writerは、Data Integrationの排他リソースグループのみをサポートし、Data Integrationの共有リソースグループまたはData Integrationのカスタムリソースグループはサポートしていません。
Db2 Writerは、リーダーからデータを取得し、
INSERT INTOステートメントを実行して、データを宛先データベースに書き込みます。主キーの競合または一意のインデックスの競合が発生した場合、競合する行にデータを書き込むことはできません。パフォーマンスを向上させるために、Db2 WriterはPreparedStatementオブジェクトを使用してバッチ更新を実行し、rewriteBatchedStatementsパラメーターをtrueに設定します。これにより、Data Integrationは、蓄積されたバッファリングされたデータの量が特定のしきい値に達すると、書き込みリクエストをコミットします。説明Db2 Writerを使用する同期タスクには、少なくとも
INSERT INTOステートメントを実行するための権限が必要です。他の権限が必要かどうかは、タスクの構成時にpreSqlパラメーターとpostSqlパラメーターで指定するSQLステートメントによって異なります。バッチ同期中にビューのデータを読み取ることができます。
Db2 AES 暗号化アルゴリズムはサポートされていません。
データ型マッピング
バッチデータの読み取りと書き込み
Db2 Readerと Db2 Writerは、ほとんどの Db2 データ型をサポートしています。データベースのデータ型がサポートされていることを確認してください。
次の表に、Db2 Writerと Db2 Readerがデータ型を変換する際に基づくデータ型マッピングを示します。
カテゴリ | Db2 データ型 |
整数 | SMALLINT |
浮動小数点 | DECIMAL、REAL、および DOUBLE |
文字列 | CHAR、CHARACTER、VARCHAR、GRAPHIC、VARGRAPHIC、LONG VARCHAR、CLOB、LONG VARGRAPHIC、および DBCLOB |
日付と時刻 | DATE、TIME、および TIMESTAMP |
ブール値 | N/A |
バイナリ | BLOB |
データ同期タスクの開発
データ同期タスクの開始点と構成手順については、以下のセクションを参照してください。パラメーター設定については、タスクの構成タブにある各パラメーターのヒントをご覧ください。
データソースの追加
特定のデータソースとのデータ同期のためにデータ同期タスクを構成する前に、DataWorksにデータソースを追加する必要があります。詳細については、データソースの追加と管理をご参照ください。
単一テーブルのデータを同期するためのバッチ同期タスクの構成
構成手順の詳細については、コードレスUIを使用したバッチ同期タスクの構成とコードエディターを使用したバッチ同期タスクの構成をご参照ください。
コードエディターを使用してバッチ同期タスクを構成する場合に構成されるすべてのパラメーターと実行されるコードについては、付録:コードとパラメーターをご参照ください。
データベース内のすべてのデータのバッチ同期を実装するための同期設定の構成
構成手順の詳細については、Data Integrationでの同期タスクの構成をご参照ください。
追加情報
プライマリデータベースとセカンダリデータベース間のデータ同期
災害復旧のためにセカンダリDb2データベースをデプロイできます。セカンダリデータベースは、バイナリログに基づいてプライマリデータベースから継続的にデータを同期します。プライマリデータベースとセカンダリデータベース間のデータ遅延を防ぐことはできません。これにより、データの不整合が発生する可能性があります。
データ整合性制御
Db2は、データクエリの強い整合性をサポートするリレーショナルデータベース管理システム(RDBMS)です。同期タスクが開始される前に、データベーススナップショットが作成されます。Db2 Readerは、データベーススナップショットからデータを読み取ります。したがって、データ同期の間に新しいデータがデータベースに書き込まれた場合、Db2 Readerは新しいデータを取得できません。
単一の同期タスクでDb2 Readerが並列スレッドを使用できるようにすると、データの整合性を確保できません。
Db2 Readerは、splitPkパラメーターの値に基づいてソーステーブルをシャーディングし、並列スレッドを使用してデータを読み取ります。これらの並列スレッドは異なるトランザクションに属し、異なる時点でデータを読み取ります。したがって、並列スレッドは異なるスナップショットを観測します。
同期タスクに並列スレッドを使用すると、データの不整合を防ぐことはできません。次の回避策を使用できます。
同期タスクでDb2 Readerが単一スレッドを使用してデータを読み取るようにします。これは、Db2 Readerにシャードキーを指定する必要がないことを示します。これにより、データの整合性は確保されますが、データの同期効率は低下します。
データ同期中にソーステーブルにデータが書き込まれないようにします。これにより、データ同期中にソーステーブルのデータが変更されないことが保証されます。たとえば、ソーステーブルをロックしたり、プライマリデータベースとセカンダリデータベース間のデータ同期を無効にすることができます。これにより、データは効率的に同期されますが、実行中のサービスが中断される可能性があります。
文字エンコーディング
Db2 ReaderはJDBCを使用してデータを読み取ります。これにより、Db2 Readerは文字のエンコード形式を自動的に変換できます。したがって、エンコード形式を指定する必要はありません。
増分データ同期
Db2 ReaderはJDBCを使用してデータベースに接続し、WHERE句を含む
SELECTステートメントを使用して増分データを読み取ります。バッチデータの場合、増分の追加、更新、および削除操作(論理削除操作を含む)はタイムスタンプによって区別されます。特定のタイムスタンプに基づいてWHERE句を指定します。タイムスタンプで示される時間は、前回の同期の最新のタイムスタンプで示される時間よりも後である必要があります。
ストリーミングデータの場合、特定のレコードのIDに基づいてWHERE句を指定します。 IDは、前回の同期に含まれる最大IDよりも大きい必要があります。
追加または変更されたデータを区別できない場合、Db2 Readerは完全なデータのみを読み取ることができます。
構文検証
Db2 Readerでは、querySqlパラメーターを使用してカスタムSELECTステートメントを指定できますが、これらのステートメントの構文は検証されません。
付録:コードとパラメーター
付録:コードエディターを使用したバッチ同期タスクの構成
コードエディターを使用してバッチ同期タスクを構成する場合は、コードエディターの形式要件に基づいて、関連データソースのリーダーとライターのパラメーターを構成する必要があります。形式要件の詳細については、コードエディターを使用したバッチ同期タスクの構成をご参照ください。以下の情報は、コードエディターのリーダーとライターのパラメーターの構成の詳細について説明しています。
Db2 Readerのコード
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"db2",// プラグイン名。
"parameter":{
"password":"",// Db2 データベースへの接続に使用するパスワード。
"jdbcUrl":"",// Db2 データベースの JDBC URL。
"column":[
"id"
],
"where":"",// WHERE 句。
"splitPk":"",// シャードキー。
"table":"",// テーブルの名前。
"username":""// Db2 データベースへの接続に使用するユーザー名。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// 許容されるダーティデータレコードの最大数。
},
"speed":{
"throttle":true,// スロットリングを有効にするかどうかを指定します。値 false はスロットリングが無効であることを示し、値 true はスロットリングが有効であることを示します。 mbps パラメーターは、throttle パラメーターが true に設定されている場合にのみ有効になります。
"concurrent":1, // 並列スレッドの最大数。
"mbps":"12"// 最大伝送速度。単位:MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Db2 Readerのコードのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。追加されたデータソースの名前と同じである必要があります。コードエディターを使用してデータソースを追加できます。 | はい | デフォルト値なし |
jdbcUrl | Db2データベースのJDBC URL。URLは、Db2の公式仕様に従って、 | はい | デフォルト値なし |
username | データベースへの接続に使用するユーザー名。 | はい | デフォルト値なし |
password | データベースへの接続に使用するパスワード。 | はい | デフォルト値なし |
table | データを読み取るテーブルの名前。各同期タスクは、1つのテーブルにのみデータを同期するために使用できます。 | はい | デフォルト値なし |
column | データを読み取る列の名前。JSON配列で名前を指定します。デフォルト値は[ * ]で、ソーステーブルのすべての列を示します。
| はい | デフォルト値なし |
splitPk | Db2 Readerがデータを読み取るときにデータシャーディングに使用されるフィールド。このパラメーターを構成すると、このパラメーターの値に基づいてソーステーブルがシャーディングされます。 Data Integrationは、並列スレッドを実行してデータを読み取ります。これにより、データの同期効率が向上します。
| いいえ | "" |
where | WHERE句。Db2 Readerは、table、column、およびwhereパラメーターの設定に基づいてSQLステートメントを生成し、生成されたステートメントを使用してデータを読み取ります。 たとえば、実際のビジネスシナリオでこのパラメーターを | いいえ | デフォルト値なし |
querySql | 絞り込んだデータフィルタリングに使用するSQLステートメント。このパラメーターを構成すると、Data Integrationはこのパラメーターの値に基づいてデータをフィルタリングします。 たとえば、データ同期のために複数のテーブルを結合する場合、このパラメーターを | いいえ | デフォルト値なし |
fetchSize | 一度に読み取るデータレコードの数。このパラメーターは、Data Integrationとデータベース間のインタラクションの数を決定し、読み取り効率に影響します。 説明 このパラメーターを2048より大きい値に設定すると、データ同期中にメモリ不足(OOM)エラーが発生する可能性があります。 | いいえ | 1024 |
Db2 Writerのコード
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"db2",// プラグイン名。
"parameter":{
"postSql":[],// 同期タスクの実行後に実行する SQL ステートメント。
"password":"",// Db2 データベースへの接続に使用するパスワード。
"jdbcUrl":"jdbc:db2://ip:port/database",// Db2 データベースの JDBC URL。
"column":[
"id"
],
"batchSize":1024,// 一度に書き込むデータレコードの数。
"table":"",// テーブルの名前。
"username":"",// Db2 データベースへの接続に使用するユーザー名。
"preSql":[]// 同期タスクの実行前に実行する SQL ステートメント。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// 許容されるダーティデータレコードの最大数。
},
"speed":{
"throttle":true,// スロットリングを有効にするかどうかを指定します。値 false はスロットリングが無効であることを示し、値 true はスロットリングが有効であることを示します。 mbps パラメーターは、throttle パラメーターが true に設定されている場合にのみ有効になります。
"concurrent":1, // 並列スレッドの最大数。
"mbps":"12"// 最大伝送速度。単位:MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Db2 Writerのコードのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
jdbcUrl | Db2データベースのJDBC URL。Db2の公式仕様に従って、URLはjdbc:db2://ip:port/database形式である必要があります。アタッチメント機能の情報を指定することもできます。 | はい | デフォルト値なし |
username | Db2データベースへの接続に使用するユーザー名。 | はい | デフォルト値なし |
password | Db2データベースへの接続に使用するパスワード。 | はい | デフォルト値なし |
table | データを書き込むテーブルの名前。 | はい | デフォルト値なし |
column | データを書き込む列の名前。"column": ["id", "name", "age"]のように、名前をコンマ(,)で区切ります。宛先テーブルのすべての列にデータを書き込む場合は、"column": ["*"] のように、このパラメーターをアスタリスク(*)に設定します。 | はい | デフォルト値なし |
preSql | 同期タスクの実行前に実行するSQLステートメント。たとえば、このパラメーターを古いデータを削除するために使用されるSQLステートメントに設定できます。コードレスUIでは1つのSQLステートメントのみを実行でき、コードエディターでは複数のSQLステートメントを実行できます。 | いいえ | デフォルト値なし |
postSql | 同期タスクの実行後に実行するSQLステートメント。たとえば、このパラメーターをタイムスタンプを追加するために使用されるSQLステートメントに設定できます。コードレスUIでは1つのSQLステートメントのみを実行でき、コードエディターでは複数のSQLステートメントを実行できます。 | いいえ | デフォルト値なし |
batchSize | 一度に書き込むデータレコードの数。ビジネス要件に基づいて、このパラメーターを適切な値に設定します。これにより、Data IntegrationとDb2間のインタラクションが大幅に削減され、スループットが向上します。このパラメーターを過度に大きい値に設定すると、データ同期中にOOMエラーが発生する可能性があります。 | いいえ | 1024 |