跳到主要內容

合併

Merge 前置詞可新增至指令碼中的任何 LOADSELECT 陳述式,以指定載入的表格應合併至另一個表格中。這也能指定應在部分載入中執行此陳述式。

常見使用情況是當您載入變更記錄並想要用來將 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 陳述式的第一個欄位必須保留關於操作的資訊:InsertUpdateDelete

對於每個載入的記錄,會比較記錄識別碼與先前載入的記錄,只會保留最新記錄 (根據序號)。若以 Delete 標記最新記錄,將不會保留任何內容。

目標表格

要修改哪個表格由欄位組決定。若具有相同欄位組 (第一個欄位除外;操作) 的表格已存在,這將會是要修改的相關表格。或者,Concatenate 前置詞可用來指定表格。若未決定目標表格,Merge LOAD 建構的結果會儲存在新的表格中。

若使用串連前置詞,產生的表格具有一組對應至現有表格聯集和要合併之輸入的欄位。因此,相較於作為要合併之輸入使用的變更記錄,目標表格可能會取得更多欄位。

部分載入會進行與完整載入相同的事項。差異是部分載入很少建立新的表格。除非您已使用 Only 子句,否則永遠存在具有相同欄位組 (來自先前指令碼執行) 的目標表格。

序號

若載入的變更記錄是累積記錄,亦即這包含已經載入的變更,則參數 SequenceNoVar 可用於 Where 子句,以限制輸入資料量。然後可以讓 Merge LOAD 僅載入記錄,其中欄位 SequenceNoField 大於 SequenceNoVar。完成後,Merge LOAD 會將新的值指派至 SequenceNoVar,並可在 SequenceNoField 欄位中看見最大值。

操作

Merge LOAD 可以有比目標表格更少的欄位。不同的操作以不同的方式處理遺失的欄位:

Insert: 在 Merge LOAD 中遺失但存在於目標表格的欄位,會在目標表格中取得 NULL。

Delete: 遺失的欄位不會影響結果。仍會刪除相關記錄。

Update: 列於 Merge LOAD 的欄位會在目標表格中更新。不會變更遺失的欄位。這表示下列兩個陳述式不相同:

  • 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。第二個不會變更 F2,但會在目標表格中留下值。