Merge
Merge プレフィックスをスクリプト内の任意の LOAD または SELECT ステートメントに追加して、ロードされたテーブルを別のテーブルに統合する必要があることを指定できます。また、このステートメントを部分的なリロードで実行する必要があることも指定します。
典型的なユース ケースは変更ログをロードする時で、inserts、updates、および deletes を既存のテーブルに適用する場合に使用します。
構文:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
通常 (非パーシャル) のリロードの間、Merge LOAD 構文は、通常の Load ステートメントとして機能しますが、古い廃止されたレコードと削除用にマーク済みのレコードを削除する追加の機能があります。ロード ステートメントの最初の項目には、次の操作についての情報が必要です。Insert、Update、または Delete。
ロードされた各レコードのために、レコード識別子は以前にロードされたレコードを比較し、最新のレコード (順番に基づく) のみを保持します。最新のレコードが Delete でマークされている場合は、一切保持しません。
Concatenate プレフィックスが使用されるか、同一の項目セットのあるテーブルがすでに存在する場合、これが変更するための関連するテーブルです。それ以外の場合、Merge LOAD 構文の結果は、新しいテーブルに保存されます。
Concatenate プレフィックスが使用される場合、結果テーブルには、Merge の入力として使用した変更ログよりも多く項目がある可能性があります。
パーシャル リロードは、フル リロードの場合と同様です。唯一の相違は、Merge LOAD 構文が新しいテーブルを作成しないことです。変更するために、以前のスクリプト実行からの関連するテーブルが常に存在します。
ロードされた変更ログが累積ログ、つまり、すでにロードされた変更がログに含まれる場合は、入力データを制限するために、Where 句でパラメーター SequenceNoVar を使用できます。その後、Merge LOAD を項目 SequenceNoField が SequenceNoVar よりも大きいロード レコードのみに適用します。完了時に Merge LOAD は、最大値が SequenceNoField 項目の新しい値を SequenceNoVar に割り当てます。
引数:
引数 | 説明 |
---|---|
only | パーシャル リロード中に限りステートメントを実行するように指定するオプションの修飾子。通常 (非パーシャル) のリロード中は無視します。 |
SequenceNoField | 日付と時刻、または操作の順序を定義する順序番号を含んだ項目の名前。 |
SequenceNoVar |
結合したテーブルの SequenceNoField の最大値が割り当てられる変数の名前。 |
ListOfKeys | プライマリ キーを指定する項目名のコンマ区切りされたリスト。 |
operation | ロード ステートメントの最初の項目には、次の操作についての情報が含まれている必要があります。Insert、Update、または Delete。「i」、「u」、および「d」も使用できます。 |