パーティション
パーティションを使用して、マッピングタスクのパフォーマンスを最適化できます。
マッピングタスクで大規模なデータセットが処理される場合、または、複雑な計算を実行するトランスフォーメーションが含まれる場合は、タスクの処理に時間がかかる場合があります。複数のパーティションを使用すると、マッピングタスクはデータを複数のパーティションに分割し、それらのパーティションを同時に処理します。これにより、パフォーマンスを最適化できます。すべてのソースタイプがパーティション化をサポートしているわけではありません。
Mapping Designerでソーストランスフォーメーションを設定する際に、パーティション化を有効にします。ソーストランスフォーメーションにパーティションを設定すると、マッピング全体でパーティション化されます。
マッピング内のすべてのデータフローにわたるそれぞれのソーストランスフォーメーションには、同じ数のパーティションが含まれている必要があります。
ソースのパーティション化を有効にするには、[パーティション化]タブでパーティション化方法を選択します。選択できるパーティション化方法は、ソースタイプによって異なります。さまざまなタイプのソースのパーティション化の詳細については、目的のコネクタのヘルプを参照してください。
ソースタイプに応じて、次のいずれかのパーティション化方法を選択できます。
- なし
- マッピングタスクが、単一のパーティションですべてのデータを処理します。これがデフォルトのオプションです。
- 固定
マッピングタスクが、指定したパーティション数に基づいてデータの行を分散します。最大で64のパーティションを指定できます。
この方法は、フラットファイルソースなどの、キー範囲によるパーティション化ができないソースタイプや、キー範囲のパーティション化をサポートしないトランスフォーメーションがマッピングに含まれる場合に使用します。
マッピングで渡されるレコードの数を考慮して、マッピングに適したパーティションの数を決定してください。レコードが少ない場合、パーティション化による利点はあまりありません。
マッピングに複数のソースが含まれる場合は、ソースごとに同じ数のパーティションを指定します。
- キーの範囲
マッピングタスクが、パーティションキーとして定義したフィールドに基づいてデータの行を分散します。ソース内の1つのフィールドをパーティションキーとして選択してから、パーティションキーの値の範囲を定義します。
この方法は、表形式のソースに使用できます(リレーショナル、Google BigQuery、およびJDBC V2のソースなど)。
キー範囲には、次のデータ型を使用できます。
- - 文字列。
- - すべての数値データ型。ただし、キー範囲の値には少数は使用できません。
- - 日付/時刻タイプ。MM/DD/YYYY HH24:MI:SSの形式を使用します。
マッピングに複数のソースが含まれる場合は、ソースごとに同じ数のキー範囲を使用します。
- パススルー
マッピングタスクが、パーティション間で行を再分散せずにデータを処理します。単一のパーティション内のすべての行が、そのパーティション内に留まります。パフォーマンスを向上させるために新しいパーティションを作成して、パーティション間のデータの分散を変更しない場合に、パススルーパーティション化を選択します。
この方法は、Amazon S3、Netezza、およびTeradataなどのソースに使用できます。
- 動的
マッピングタスクが、ソースサイズに基づいて、実行時に作成するパーティションの最適な数を決定します。
次のような状況では、マッピングをパーティション化できません。
- •マッピングにWebサービスまたは階層パーサートランスフォーメーションが含まれる。
- •マッピングにカスタムリレーションまたは詳細リレーションを使用する複数のソースが含まれる。
- •マッピングがSQL ELTモードのマッピングである。
パーティションを設定したら、Mapping Designerでマッピングを保存および実行して、パーティション設定を検証してください。
パーティション化に関するルールおよびガイドライン
マッピングをパーティション化する前に、次の規則とガイドラインに注意してください。
- •予期しない結果になることを避けるために、マッピング内のトランスフォーメーションのタイプとその順序を考慮します。マッピングタスクがパーティション化されたデータを処理する際にデータの整合性を維持できる場合は、マッピングをパーティション化できます。
- •フラットファイルのパーティション化で最適なセッションパフォーマンスを得るには、大きいソースファイルを使用します。入力データの量が少ない場合は、負荷が分散されない可能性があります。
- •フラットファイルのパーティション化とMatchQuotesPastEndOfLine詳細カスタムプロパティを有効にすると、タスクは設定されたパーティション化の方法を無視します。
- •パーティション化したマッピングにシーケンスジェネレータトランスフォーメーションが含まれる場合は、シーケンスジェネレータトランスフォーメーションにキャッシュを設定したことを確認します。キャッシュが設定されていないと、タスクが各パーティションに対して生成するシーケンス番号が連番でなくなります。
- •ノーマライザトランスフォーメーションおよびシーケンスジェネレータ トランスフォーメーションで生成されるシーケンス番号は、パーティション化されたソースの場合は連番ではないことがありますが、一意です。
- •パーティション化したマッピングにソータートランスフォーメーションが含まれる場合、タスクはパーティションごとにデータをソートします。
- •ソータートランスフォーメーションは、ソート済みデータを使用するように設定されているジョイナトランスフォーメーションまたはアグリゲータトランスフォーメーションの前に配置する必要があります。
- •キー範囲の値には、入出力パラメータを使用できません。
- •マッピングに9個以上パーティションが含まれると、マッピングタスクのパフォーマンスが低下する場合があります。パフォーマンスを向上させるには、マッピングタスクの詳細プロパティ、[バッファブロックサイズ]および[DTMバッファサイズ]を設定します。
- •Linuxで、ターゲットテーブル名にUnicode文字が含まれる場合、マルチバイトデータをサポートするためにデフォルトのロケールをUTF-8に設定する必要があります。デフォルトのロケールをUTF-8に設定する場合は、次の例を参照してください。
- - bash系UNIXシェルの場合:
export LC_ALL=en_US.UTF-8
- - csh系UNIXシェルの場合:
setenv LC_ALL en_US.UTF-8
- •詳細モードのマッピングでソースにキー範囲によるパーティション化を使用する場合、次の条件がすべて当てはまるときは、マッピングが失敗します。
- - データ統合サーバーがソースを処理している。
- - 詳細クラスタがミッドストリームトランスフォーメーションを処理している。
- - 詳細クラスタがGoogle CloudまたはMicrosoft Azure環境で実行される。
- •キー範囲または固定パーティション化で設定されたマッピングでは、SQLクエリを使用してデフォルトのクエリをオーバーライドすることはできません。
詳細については、該当するコネクタのヘルプを参照してください。
パーティション化の例
次の例は、マッピングでパーティション化を設定する方法を示します。
フラットファイルソースを使用したパーティション化
1GBの大容量フラットファイルソースを使用するマッピングタスクがあるとします。パフォーマンスを最適化するために、ソーストランスフォーメーション内に2つのパーティションを指定します。
次の図に示すように、ソーストランスフォーメーションの[パーティション化]タブで、固定パーティション化を選択してパーティションの数を入力します。
リレーショナルデータベースソースを使用したキー範囲パーティション化
顧客の名前、住所、および購入履歴がリレーショナルデータベースソースに格納されているとします。郵便番号に基づいて、次の範囲を使用してソースデータを3つのパーティションに分けることにしました。
- •1つ目のパーティション: 最小値-30000
- •2つ目のパーティション: 30000-50000
- •3つ目のパーティション: 50000-最大値
ソーストランスフォーメーションの[パーティション化]タブで、キー範囲パーティション化を選択し、パーティションキーとしてBILLINGPOSTALCODEフィールドを選択します。次の図に示すように、3つのキー範囲を追加して3つのパーティションを作成します。
1つ目のパーティションでは、開始の値を空白にして最小値を設定します。最後のパーティションでは、終了値を空白にして最大値を設定します。
これらの値を使用して、郵便番号が0から30000までのレコードは1つ目のパーティション、郵便番号が30001から50000までのレコードは2つ目のパーティション、郵便番号が50001以降のレコードは3つ目のパーティションで処理されます。
設定したマッピングを保存して実行し、パーティションを検証します。