メイン コンテンツをスキップする

マージ

Merge プレフィックスをスクリプト内の任意の LOAD または SELECT ステートメントに追加して、ロードされたテーブルを別のテーブルに統合する必要があることを指定できます。また、このステートメントを部分的なリロードで実行する必要があることも指定します。

一般的な使用例は、変更ログをロードし、これを使用して insertsupdatesdeletes を既存のテーブルに適用する場合です。

[リロード] ボタンを使用して部分的なリロードを実行します。詳細については、「ボタン」を参照してください。Qlik Engine JSON API を使用することもできます。

スケジュールで部分的なリロードを実行するには、アプリで More をクリックしてから、[リロードをスケジュール] を選択します。開いたダイアログ ボックスで、[部分的なリロード] をオンにします。

Syntax:  

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

 

通常の (部分的ではない) リロード中、[Merge] [LOAD] 構造は通常の [Load] ステートメントとして機能しますが、古い廃止されたレコードと削除のマークが付けられたレコードを削除する追加機能があります。load ステートメントの最初の項目は、操作に関する情報(InsertUpdate または Delete) を保持する必要があります。

ロードされたレコードごとに、レコード ID が以前にロードされたレコードと比較され、最新のレコード (シーケンス番号による) のみが保持されます。最新のレコードが Delete でマークされている場合、何も保持されません。

[Concatenate] プレフィックスが使用されている場合、または同じ項目のセットを持つテーブルが既に存在する場合、これは変更する関連テーブルになります。それ以外の場合、Merge LOAD 構築の結果は新しいテーブルに格納されます。

[Concatenate] プレフィックスが使用されている場合、結果のテーブルには、[Merge] への入力として使用される変更ログよりも多くの項目が含まれる場合があります。

部分的なリロードは、完全なリロードと同じように実行されます。唯一の違いは、Merge LOAD 構造が新しいテーブルを作成しないことです。変更する前のスクリプト実行からの関連テーブルが常に存在します。

ロードされた変更ログが累積ログである場合、つまり、すでにロードされている変更が含まれている場合、パラメーター SequenceNoVarWhere 句で使用して、入力データの量を制限できます。次に、項目 SequenceNoFieldSequenceNoVar より大きいレコードのみをロードするように Merge LOAD を作成できます。完了すると、Merge LOAD は、SequenceNoField 項目に表示される最大値を持つ新しい値を SequenceNoVar に割り当てます。

Arguments:  

引数
引数 説明
only ステートメントが部分的なリロード中にのみ実行される必要があることを示すオプションの修飾子。通常の (部分的ではない) リロード中は無視する必要があります。
SequenceNoField 操作の順序を定義するタイムスタンプまたはシーケンス番号を含む項目の名前。
SequenceNoVar

マージされるテーブルの SequenceNoField の最大値が割り当てられる変数の名前。

ListOfKeys 主キーを指定する項目名のコンマ区切りのリスト。
operation load ステートメントの最初の項目には、次の操作が含まれている必要があります。InsertUpdate または Delete。「i」、「u」、「d」も使用できます。

Example: データ ロード スクリプト

この例では、Persons という名前のインライン テーブルに 4 つの行がロードされています。次に、Merge はテーブルを次のように変更します。

  • 行 (Mary, 4) を追加します。
  • 行 (Steven, 3) を削除します
  • 番号 5Jake に割り当てます

[LastChangeDate] 変数は、[マージ] が実行された後、[ChangeDate] 列の最大値に設定されます。

Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];

[Merge] をロードする前は、結果のテーブルは次のように表示されます。

Resulting table
Name Number
Jake 3
Jill 2
Steven 3

[Merge] のロード後、テーブルは次のように表示されます。

Resulting table
ChangeDate Name Number
2/1/2021 Jake 5
- Jill 2
1/1/2021 Mary 4

データがロードされると、[データのロード進行状況] ダイアログ ボックスに実行された操作が表示されます。

[データのロード進行状況] ダイアログ ボックス

Data load progress dialog box.

Example: データ ロード スクリプト - 部分的なリロード

次の例では、[Only] 引数は、[Merge] コマンドが部分的なリロード中にのみ実行されることを指定しています。更新は、以前にキャプチャされた [LastChangeDate] に基づいてフィルタリングされます。[Merge] が終了すると、[LastChangeDate] 変数には、マージ中に処理された [ChangeDate] 列の最大値が割り当てられます。

Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);