跳到主要內容

合併

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

常見使用情況是當您載入變更記錄並想要用來將 insertsupdatesdeletes 套用至現有表格時。

使用載入按鈕執行部分載入。如需詳細資訊,請參閱 按鈕您也可以使用 Qlik Engine JSON API

若要執行排程上的部分載入,按一下應用程式上的 More,然後選擇排程載入。在開啟的對話方塊中,開啟部分載入

Syntax:  

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

 

在一般 (非部分) 載入期間,Merge LOAD 建構將會作為一般 Load 陳述式運作,但具有附加功能,可移除較舊過時記錄和標記要刪除的記錄。LOAD 陳述式的第一個欄位必須保留關於操作的資訊:InsertUpdateDelete

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

若使用 Concatenate 前置詞,或者若已存在具有相同欄位集的表格,這將會是要修改的相關表格。否則,Merge LOAD 建構的結果將會儲存在新的表格中。

若使用 Concatenate 前置詞,則相較於作為輸入至 Merge 使用的變更記錄,產生的表格可能會有更多欄位。

部分載入將會進行與完整載入相同的事項。唯一的差異是 Merge LOAD 建構永遠不會建立新的表格。永遠存在來自先前指令碼執行的相關表格以供修改。

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

Arguments:  

引數
引數 描述
only 選用的限定詞,表示只應在部分載入期間執行該陳述式。這應在一般 (非部分) 載入期間忽略。
SequenceNoField 包含時間戳記的欄位名稱或定義操作順序的序號。
SequenceNoVar

獲得指派合併表格的 SequenceNoField 最大值的變數名稱。

ListOfKeys 以逗號分隔、指定主要金鑰的欄位名稱清單。
operation LOAD 陳述式的第一個欄位必須包含操作:InsertUpdateDelete。也能接受「i」、「u」和「d」。

Example: 資料載入指令碼

在此範例中,載入了名為 Persons 的內嵌表格,其中含有四列。然後 Merge 會變更表格如下:

  • 新增列 Mary, 4
  • 刪除列 Steven, 3
  • 將數字 5 指派至 Jake

執行 Merge 後,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);