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,则不保留任何记录。

目标表格

要修改的表由字段集决定。如果已经存在具有相同字段集(第一个字段除外;操作)的表,则该表将是要修改的相关表。或者,可以使用 Concatenate 前缀来指定表。如果未确定目标表,则 Merge Load 构造的结果将存储在新表中。

如果使用了连接前缀,则生成的表具有一组字段,这些字段对应于现有表和待合并输入的并集。因此,目标表可能会获得比用作合并输入的更改日志更多的字段。

局部重新加载有和完全重新加载相同的作用。一项区别是,部分重新加载很少创建新表。除非使用了 Only 子句,否则始终存在字段集与上一次脚本执行中字段集相同的目标表。

序号

如果加载的更改日志是累积日志,即它包含已加载的更改,则可以在 Where 子句中使用该参数 SequenceNoVar 来限制输入数据量。Merge Load 然后可仅用于加载记录,其中字段 SequenceNoField 大于 SequenceNoVar。在完成之后,Merge Load 把新的值分配至 SequenceNoVar,其中最大值在 SequenceNoField 字段中可见。

运算

Merge Load 字段可以少于目标表。不同的操作对缺失字段的处理方式不同:

InsertMerge LOAD 中缺少但存在于目标表中的字段在目标表中获取空值。

Delete:缺少字段不会影响结果。相关记录仍将被删除。

UpdateMerge 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,而是将值留在目标表中。

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!