跳到主要内容

合并

可将前缀 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 LOAD 构造将永远不会新建表格。从要修改的上一个脚本执行中总是存在一个相关的表。

如果加载的更改日志是累积日志,即它包含已加载的更改,则可以在 Where 子句中使用该参数 SequenceNoVar 来限制输入数据量。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

LastChangeDate 变量将在执行 Merge 之后设置为 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);