Early Access: The content on this website is provided for informational purposes only in connection with pre-General Availability Qlik Products.
All content is subject to change and is provided without warranty.
跳到主要內容 跳至補充內容

合併

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 標記最新記錄,將不會保留任何內容。

目標表格

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

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

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

序號

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

操作

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

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

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

更新:列於 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,但會在目標表格中留下值。

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!