FINALテーブルサポート4 UPDATE/DELETE並列処理からの続きです。
OLD TABLEを使用したパラレル削除の例
この例では、レコードを削除するときに FROM OLD TABLE を使用する方法を示します。
例 5-14 は、2020 年より古いすべてのレコードを削除する DELETE toystore.sales のサンプル クエリで FROM OLD TABLE を使用する方法を示しています。
掲載サンプルはこちら
-- Switch to Parallelism on QAQQINI options
call qsys2.override_qaqqini(1);
call qsys2.override_qaqqini(2, 'PARALLEL_DEGREE', '*OPTIMIZE');
--
-- DELETE with parallelism Example
-- benefit this when a Large table deletes needs to happen (say 5 Mil+ records)
SELECT COUNT(*)
FROM OLD TABLE
(DELETE FROM toystore.sales WHERE year(sales_date) < 2020);
stop;
call qsys2.override_qaqqini(3);
手順を確認すると、
- ジョブ用のQTEMP.QAQQINIテーブルを作成
- SQLのパラレル処理 PARALLEL_DEGREE を *OPTIMISE に変更してパラレル処理をオンに設定
- OLD TABLEで古い日付のレコードを一括削除し、かつ削除したレコード件数を取得
- ジョブ用のQTEMP.QAQQINIテーブルを削除
となります。
※上記スクショはstep.10のstop時点です。この時点ではQTEP.QAQQINIは存在しています。この後処理を継続すると11行目でQTEMP.QAQQINIテーブルが削除されます。
FINALテーブルのサマリー
・FINALテーブルの機能強化により、生成IDなどのよく使用される値を取得したり、後続の処理のために値を返すためのステートメントを追加する必要がなくなります。
・標準のINSERT、UPDATE、およびDELETEステートメント内でFINAL、NEW、およびOLD TABLEを使用して、さらにカスタマイズされた追加列を使用して、コマンドの前後の行の状態に直接アクセスできます。これにより、コードが合理化され、保守性が向上し、トレーサビリティが強化され、ネイティブDb2 for i SQL内で監査要件をサポートできます。
・これらのテーブル参照はデータ変更操作に本質的に結び付けられているため、追加の読み取り、書き込み、および中間ストレージの必要性が軽減され、I/O要件が低減され、システム全体の効率が向上します。
・最も重要なのは、監査関連データが同じアトミックトランザクション※の一部として取得されるため、コンプライアンスと運用監査の両方を満たす、信頼性が高く検証可能な監査証跡が提供されることです。これにより、コードが合理化され、リソース使用量が最小限に抑えられ、トレーサビリティが向上し、ネイティブのDb2 for i SQLに堅牢な組み込み監査機能が提供されます。
※アトミックトランザクション=原子レベル(で結合された=分離不能な)トランザクション、とは、1つのSQLで2つの処理を同時実行させるのでSQLを2回実行、の場合のように厳密には別時点でのデータとはならず、必ず同一時点でのデータを取得できる、という意味です。
FINALテーブルの章は以上で終了です。
賢くなったと思います^^
