Merge
可将前缀 Merge 添加至脚本中的任何 LOAD 或 SELECT 语句,以指定加载的表格应当合并到另一表中。它还指定此语句应在部分重新加载中运行。
典型的用例是当您加载一个更改日志并希望使用它来将 inserts、updates 和 deletes 应用到现有的表时。
语法:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
在正常(非部分)重新加载期间, Merge LOAD 构造将作为正常的 Load 语句作用,但具有删除旧的过时记录和标记为删除的记录的附加功能。LOAD 语句的第一个字段必须包含有关运算的信息:Insert、Update 或 Delete。
对于每个加载的记录,记录标识符将与以前加载的记录进行比较,并且只保留最新的记录(根据序列号)。如果最新记录标有 Delete,,则不保留任何记录。
如果使用了 Concatenate 前缀,或者存在具有相同字段集的表,则此项将附加到要修改的相关表中。否则,Merge LOAD 构造的结果将存储在新表中。
如果使用 Concatenate 前缀,则生成的表可能比用作 Merge 输入的更改日志包含更多字段。
部分重载的作用和全重载相同。唯一的区别是 Merge LOAD 构造永远不会创建新表。要修改的上一个脚本执行中总是存在一个相关的表。
如果加载的更改日志是累积日志,即它包含已加载的更改,则可以在 Where 子句中使用参数 SequenceNoVar 来限制输入数据量。Merge LOAD 然后只能加载字段 SequenceNoField 大于 SequenceNoVar 的记录。完成之后,Merge LOAD 将把新值分配至 SequenceNoVar,其具有 SequenceNoField 字段中出现的最大值。
参数:
参数 | 说明 |
---|---|
only | 一个可选的限定符,表示语句只能在部分重载时执行。在正常(非部分)重新加载期间,应忽略此项。 |
SequenceNoField | 包含定义运算顺序的时间戳或序列号的字段的名称。 |
SequenceNoVar |
为要合并的表的 SequenceNoField 分配最大值的变量的名称。 |
ListOfKeys | 指定主键的字段名的逗号分隔列表。 |
operation | LOAD 语句的第一个字段必须包含运算:Insert、Update,或者 Delete。也可接受 ‘i’、‘u’ 以及 ‘d’。 |