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

マージ

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

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

情報メモ部分的なリロードが正しく機能するためには、部分的なリロードがトリガーされる前に、アプリをデータで開く必要があります。

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

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

構文:  

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

引数:  

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

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

ListOfKeys 主キーを指定する項目名のコンマ区切りのリスト。
Operation load ステートメントの最初の項目には、次の操作は含まれている必要があります: 'Insert'、'Update'あるいは'Delete'。‘i’、‘u’および ‘d’も受け入れ可能です。

一般的機能

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

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

ターゲット テーブル

変更するテーブルは、一連のフィールドにより決まります。同じ一連のフィールド(最初のフィールドと操作を除く)を持つテーブルが既に存在する場合、これは変更すべき関連テーブルになります。または、Concatenate プレフィックスを使用してテーブルを指定することもできます。ターゲット テーブルが指定されていない場合、Merge LOAD 構築結果は新規テーブルに保存されます。

Concatenateプレフィックスが使用されている場合、結果としてできたテーブルには、既存テーブルの結合とマージへの入力に対応する一連フィールドが含まれます。したがって、ターゲット テーブルは、マージへの入力として使用される変更ログよりも多くのフィールドを持つ可能性があります。

部分的なリロードは、完全なリロードと同じように実行されます。1つの違いは、部分的なリロードは、新規テーブルを作成することがほとんどないことです。Only 句を使用しない限り、前のスクリプト実行と同じ一連のフィールドを持つターゲット テーブルは常に存在します。

シーケンス番号

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

演算

Merge LOADは、ターゲット テーブルよりも少ないフィールドを持つことができます。操作が異なれば、欠落しているフィールドの処理も異なります:

Insert:Merge LOADで欠落しているが、ターゲット テーブルに存在するフィールドは、ターゲット テーブルで NULL を取得します。

Delete: 欠落しているフィールドは結果に影響しません。いずれにせよ関連レコードは削除されます。

Update:Merge LOADで一覧表示されているフィールドは、ターゲット テーブルで更新されます。欠落しているフィールドは、変更されません。これは、以下の2つステートメントが同一でないことを意味します:

  • Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
  • Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;

最初のステートメントは、一覧表示されたレコードを更新し、F2 を NULL に変更します。2番目のステートメントは F2 を変更しませんが、その代わり、ターゲット テーブルに値を残します。