すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Db2データソース

最終更新日:Jan 11, 2025

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にデータソースを追加する必要があります。詳細については、データソースの追加と管理をご参照ください。

単一テーブルのデータを同期するためのバッチ同期タスクの構成

データベース内のすべてのデータのバッチ同期を実装するための同期設定の構成

構成手順の詳細については、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の公式仕様に従って、jdbc:db2://ip:port/database形式である必要があります。アタッチメント機能の情報を指定することもできます。

はい

デフォルト値なし

username

データベースへの接続に使用するユーザー名。

はい

デフォルト値なし

password

データベースへの接続に使用するパスワード。

はい

デフォルト値なし

table

データを読み取るテーブルの名前。各同期タスクは、1つのテーブルにのみデータを同期するために使用できます。

はい

デフォルト値なし

column

データを読み取る列の名前。JSON配列で名前を指定します。デフォルト値は[ * ]で、ソーステーブルのすべての列を示します。

  • 読み取る特定の列を選択できます。

  • 列の順序を変更できます。これは、ソーステーブルのスキーマで指定された順序とは異なる順序で列を指定できることを示します。

  • 定数がサポートされています。列名は、["id", "1", "'const name'", "null", "upper('abc_lower')", "2.3" , "true"]など、Db2でサポートされているSQL構文に準拠して配置する必要があります。

    • id: 列名。

    • 1: 整数定数。

    • 'const name': 文字列定数。単一引用符(')で囲みます。

    • null: ヌルポインター。

    • upper('abc_lower'): 関数式。

    • 2.3: 浮動小数点定数。

    • true: ブール値。

  • columnパラメーターは、データを読み取るすべての列を明示的に指定する必要があります。このパラメーターを空にすることはできません。

はい

デフォルト値なし

splitPk

Db2 Readerがデータを読み取るときにデータシャーディングに使用されるフィールド。このパラメーターを構成すると、このパラメーターの値に基づいてソーステーブルがシャーディングされます。 Data Integrationは、並列スレッドを実行してデータを読み取ります。これにより、データの同期効率が向上します。

  • splitPkパラメーターをテーブルの主キー列の名前に設定することをお勧めします。主キー列に基づいてデータを異なるシャードに均等に分散できます。特定のシャードにのみ集中的に分散されることはありません。

  • splitPkパラメーターは、整数データ型のデータのシャーディングのみをサポートします。このパラメーターを、文字列、浮動小数点、日付データ型などのサポートされていないデータ型の列に設定すると、エラーが報告されます。

いいえ

""

where

WHERE句。Db2 Readerは、tablecolumn、およびwhereパラメーターの設定に基づいてSQLステートメントを生成し、生成されたステートメントを使用してデータを読み取ります。

たとえば、実際のビジネスシナリオでこのパラメーターをgmt_create > $bizdateに設定して、現在の日付に生成されたデータを読み取ることができます。WHERE句を使用して増分データを読み取ることができます。このパラメーターを空のままにすると、Db2 Readerはソーステーブルのすべてのデータを読み取ります。

いいえ

デフォルト値なし

querySql

絞り込んだデータフィルタリングに使用するSQLステートメント。このパラメーターを構成すると、Data Integrationはこのパラメーターの値に基づいてデータをフィルタリングします。

たとえば、データ同期のために複数のテーブルを結合する場合、このパラメーターをselect a,b from table_a join table_b on table_a.id = table_b.idに設定します。querySqlパラメーターを構成すると、Db2 Readerは構成したtablecolumn、およびwhereパラメーターを無視します。

いいえ

デフォルト値なし

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