データセット セグメントの並列ロード
フル ロード中は、データセットをセグメントに分割して並列でロードすることで、大規模なデータセットのロードを高速化できます。テーブルは、データ範囲、すべてのパーティション、すべてのサブパーティション、または特定のパーティションごとに分割できます。
各データセット セグメントは、個別のサブタスクを使用してロードされます。したがって、データセットの分割方法を決定するときは、データベースとネットワーク リソースの可用性を常に考慮する必要があります。テーブルをあまりにも多くのセグメントに分割すると、データベースのパフォーマンスに影響を及ぼし、ネットワーク容量に過負荷がかかる可能性があります。パーティション分割されたデータセットで [データ範囲] のセグメント化の方法を選択した場合、各範囲が 1 つ以上のパーティション全体を含むように範囲を設定するのがベスト プラクティスです。この方法により、データの取得が高速化され、データベース処理リソースへの影響が最小限に抑えられます。
サポートされるデータソースとターゲット
データ タスクは、次のデータ ソースとターゲット コネクタの組み合わせで定義する必要があります。
サポートされるデータ ソース コネクタ
- IBM DB2 for LUW
-
IBM DB2 for z/OS
情報メモパーティションまたはサブパーティションによるテーブルのセグメント化は、IBM DB2 for z/OS ソース コネクタではサポートされていません。
- Microsoft SQL Server (ログ ベース)
- MySQL
- Oracle
-
PostgreSQL
情報メモパーティションまたはサブパーティションによるテーブルのセグメント化は、PostgreSQL ソース コネクタではサポートされていません。
- SAP (アプリケーション)情報メモ
SAP (アプリケーション) ソース エンドポイントを持つテーブルは、デフォルトではクライアントに依存します。MANDT 列は、コネクタから直接自動的に取得されます。
- SAP HANA (データベース)
サポートされるターゲット コネクタ
- Amazon Redshift
- Amazon S3
- Google Cloud BigQuery
- Google Cloud Storage
- Microsoft Fabric Data Warehouse
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- Snowflake
並列ロードの設定
テーブルの分割には、 [データ範囲] または [パーティション] の 2 つの方法のいずれかを使用します。[データ範囲] の方法ではテーブルをデータ範囲で分割し、 [パーティション] の方法ではテーブルをパーティションに従って分割します。
データ範囲の方法を使用する
データ範囲によってセグメント境界を定義するには、次を実行します。
-
[データセット] タブで、データセットの右側にある
メニューをクリックし、 [設定] を選択します。
[並列ロード] のダイアログが開きます。
-
[データ範囲] のセグメント化の方法を選択します。
-
[列を選択] をクリックします。
[テーブルのセグメント化の列] のダイアログが開きます
-
サポートされているすべてのデータ ソースでは、一意のインデックス列が自動的に選択されます。範囲を区切るために使用するデータを含む追加の列を選択し、 [OK] をクリックします。
情報メモ-
NULL を許可せず、通常のソース データベース操作中に更新されない列 (主キー列や固定日付の日付列など) を使用することをお勧めします。フル ロード中に更新される列を使用すると、ターゲット データベースで重複が発生する可能性があります。
-
データ取得のパフォーマンスを最適化するため、インデックス付きのソース列を使用することをお勧めします。
-
最大 10 列まで選択できます
-
NULL 値を持つレコードはレプリケートされません。
-
DOUBLE、FLOAT、LOB (BLOB、CLOB、NCLOB) のデータ型は、範囲によるセグメントの定義には使用できません。
-
-
[データ範囲を追加] をクリックして、データ範囲セグメントを追加します。
選択した列を含む [データ範囲を追加] のダイアログが開きます。
-
各列について、セグメントのデータ範囲の上限を入力します。
情報メモDATE 列の値は、ソースでサポートされている形式で入力する必要があります。たとえば、Oracle ソースの場合、正しい形式は次のようになります。
-
ALTER SESSION SET NLS_DATE_FORMAT:
'YYYY-MM-DD HH24:MI:SS' (YYYY-MM-DD のみの指定も有効)
-
ALTER SESSION SET NLS_TIMESTAMP_FORMAT:
'YYYY-MM-DD HH24:MI:SS.FF9'
-
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT:
'YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM'
-
-
[OK] をクリックして設定を保存し、ダイアログを閉じます。
選択した各列は、指定された範囲で表示されます。
- 必要に応じてステップ 3 ~ 6 を繰り返し、列とデータ範囲を追加します。
- [検証] をクリックして、入力したデータがソース列のデータ型に対応していること、および定義されたすべてのセグメントに値が含まれていることを検証します。
[データ範囲] のセグメント化の方法では、すべての列にデータ範囲が定義されていない場合でも、すべてのテーブル データがレプリケートされます。
データ範囲を編集するには、次を実行します。
- 行の最後で
メニューをクリックして、 [編集] を選択します。
- 必要に応じてデータ範囲を編集し、 [OK] をクリックして変更を保存します。
データ範囲を削除するには、次を実行します。
- 行の最後で
メニューをクリックして、 [削除] を選択します。
- 削除を確認するためのプロンプトが表示されたら、 [削除] をクリックします。
使用例
次のセグメントが定義されていると仮定します。
Column_1 | Column_2 | Column_3 |
---|---|---|
10 |
30 |
105 |
20 |
20 |
120 |
100 |
12 |
99 |
この場合、各負荷セグメントに対して次の「WHERE」句が作成されます。
- セグメント 1:((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105)))
- セグメント 2:NOT ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105))) AND ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120)))
- セグメント 3:NOT ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 30) AND (COL2 = 20) AND (COL3 < 120))) AND ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))
- セグメント 4:NOT ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))
パーティションの方法を使用する
セグメント境界は、すべてのテーブル パーティション、すべてのテーブル サブパーティション (データ ソースがサブパーティションをサポートしている場合)、または特定のパーティションによって定義できます。
- この方法は、データセットがすでにパーティション分割されている場合にのみ使用できます。
- この機能がリリースされる前に存在していたタスクがあり、そのタスクをまだ開始していない場合、またはこの方法を使用して 1 つ以上のテーブルを並列でリロードする場合は、まず データ プラットフォームに既存のデータを登録する で説明されているようにメタデータを更新する必要があります (このトピックで説明されているメタデータの更新プロセスは、すべてのタイプのデータ タスクで同じです)。
すべてのパーティションを使用する
すべてのテーブル パーティションまたはサブパーティションによってセグメント境界を定義するには、次を実行します。
-
[データセット] タブで、データセットの右側にある
メニューをクリックし、 [設定] を選択します。
[並列ロード] のダイアログが開きます。
-
[パーティション] のセグメント化の方法を選択します。
-
次のいずれかを選択します。
-
メイン パーティションをすべて使用
-
サブパーティションをすべて使用
情報メモデータ ソースがサブパーティションをサポートしていない場合、このオプションは無効になります。
-
- [OK] をクリックします。
特定のパーティションを使用する
特定のパーティションでセグメント境界を定義するには、次を実行します。
-
[データセット] タブで、データセットの右側にある
メニューをクリックし、 [設定] を選択します。
[並列ロード] のダイアログが開きます。
-
[パーティション] のセグメント化の方法を選択します。
-
[パーティションを指定] を選択します。
情報メモ[パーティションを指定] を選択すると、指定したパーティションのみレプリケートされます。
-
[パーティションを追加] をクリックします。
[パーティションを追加] のダイアログが開きます。
-
既存のパーティションまたはサブパーティションの名前を指定します。
サブパーティションを追加する場合は、 [ サブパーティション] のチェック ボックスを選択します。
- [OK] をクリックして設定を保存します。
- パーティションまたはサブパーティションを追加するには、必要に応じてステップ 4 ~ 6 を繰り返します。
パーティションを編集するには、次を実行します。
- 行の最後で
メニューをクリックして、 [編集] を選択します。
- 必要に応じてパーティションの情報を編集し、 [OK] を クリックして変更を保存します。
パーティションを削除するには、次を実行します。
- 行の最後で
メニューをクリックして、 [削除] を選択します。
- 削除を確認するためのプロンプトが表示されたら、 [削除] をクリックします。
並列ロードのセグメント数を調整する
並行してロードされるセグメントの数を増減できます。値は、データ タスク設定の [フル ロード] > [パフォーマンス チューニング] > [最大並列ロード テーブル数] 項目から継承されます。現在の値は、 [並列ロード] ダイアログの「最大 <n> 個のセグメントを並列にロードできます」という文字列に表示されます。数値を増やすと、データセットが多数のセグメントに分割されたときにパフォーマンスが向上する可能性がありますが、データベース リソースとネットワーク容量への負担も大きくなります。