マージ
Merge プレフィックスをスクリプト内の任意の LOAD または SELECT ステートメントに追加して、ロードされたテーブルを別のテーブルに統合する必要があることを指定できます。また、このステートメントを部分的なリロードで実行する必要があることも指定します。
一般的な使用例は、変更ログをロードし、これを使用して inserts、updates、deletes を既存のテーブルに適用する場合です。
Syntax:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
通常の (部分的ではない) リロード中、[Merge] [LOAD] 構造は通常の [Load] ステートメントとして機能しますが、古い廃止されたレコードと削除のマークが付けられたレコードを削除する追加機能があります。load ステートメントの最初の項目は、操作に関する情報(Insert、Update または Delete) を保持する必要があります。
ロードされたレコードごとに、レコード ID が以前にロードされたレコードと比較され、最新のレコード (シーケンス番号による) のみが保持されます。最新のレコードが Delete でマークされている場合、何も保持されません。
[Concatenate] プレフィックスが使用されている場合、または同じ項目のセットを持つテーブルが既に存在する場合、これは変更する関連テーブルになります。それ以外の場合、Merge LOAD 構築の結果は新しいテーブルに格納されます。
[Concatenate] プレフィックスが使用されている場合、結果のテーブルには、[Merge] への入力として使用される変更ログよりも多くの項目が含まれる場合があります。
部分的なリロードは、完全なリロードと同じように実行されます。唯一の違いは、Merge LOAD 構造が新しいテーブルを作成しないことです。変更する前のスクリプト実行からの関連テーブルが常に存在します。
ロードされた変更ログが累積ログである場合、つまり、すでにロードされている変更が含まれている場合、パラメーター SequenceNoVar を Where 句で使用して、入力データの量を制限できます。次に、項目 SequenceNoField が SequenceNoVar より大きいレコードのみをロードするように Merge LOAD を作成できます。完了すると、Merge LOAD は、SequenceNoField 項目に表示される最大値を持つ新しい値を SequenceNoVar に割り当てます。
Arguments:
引数 | 説明 |
---|---|
only | ステートメントが部分的なリロード中にのみ実行される必要があることを示すオプションの修飾子。通常の (部分的ではない) リロード中は無視する必要があります。 |
SequenceNoField | 操作の順序を定義するタイムスタンプまたはシーケンス番号を含む項目の名前。 |
SequenceNoVar |
マージされるテーブルの SequenceNoField の最大値が割り当てられる変数の名前。 |
ListOfKeys | 主キーを指定する項目名のコンマ区切りのリスト。 |
operation | load ステートメントの最初の項目には、次の操作が含まれている必要があります。Insert、Update または Delete。「i」、「u」、「d」も使用できます。 |
Example: データ ロード スクリプト
この例では、Persons という名前のインライン テーブルに 4 つの行がロードされています。次に、Merge はテーブルを次のように変更します。
- 行 (Mary, 4) を追加します。
- 行 (Steven, 3) を削除します
- 番号 5 を Jake に割り当てます
[LastChangeDate] 変数は、[マージ] が実行された後、[ChangeDate] 列の最大値に設定されます。
[Merge] をロードする前は、結果のテーブルは次のように表示されます。
Name | Number |
---|---|
Jake | 3 |
Jill | 2 |
Steven | 3 |
[Merge] のロード後、テーブルは次のように表示されます。
ChangeDate | Name | Number |
---|---|---|
2/1/2021 | Jake | 5 |
- | Jill | 2 |
1/1/2021 | Mary | 4 |
データがロードされると、[データのロード進行状況] ダイアログ ボックスに実行された操作が表示されます。
Example: データ ロード スクリプト - 部分的なリロード
次の例では、[Only] 引数は、[Merge] コマンドが部分的なリロード中にのみ実行されることを指定しています。更新は、以前にキャプチャされた [LastChangeDate] に基づいてフィルタリングされます。[Merge] が終了すると、[LastChangeDate] 変数には、マージ中に処理された [ChangeDate] 列の最大値が割り当てられます。