合并成

适用于:检查标记是的砖的SQL检查标记是的砖运行时

合并一组更新、插入和删除源表基于目标三角洲表。

这句话只对三角洲湖表支持。

语法

合并target_table_name(target_alias]使用source_table_reference(source_alias]merge_condition{匹配(matched_condition]然后matched_action|匹配(通过目标](not_matched_condition]然后not_matched_action|匹配通过(not_matched_by_source_condition]然后not_matched_by_source_action}(]matched_action{删除|更新*|更新{={expr|默认的}}(,]}not_matched_action{插入*|插入(column1(,])(expr|默认的](,])not_matched_by_source_action{删除|更新{={expr|默认的}}(,]}

参数

  • target_table_name

    一个表名识别表被修改。表必须引用一个三角洲表。

  • target_alias

    一个表别名目标表。别名必须不包括列清单。

  • source_table_reference

    一个表名识别源表合并到目标表。

  • source_alias

    一个表别名源表。别名必须不包括列清单。

  • merge_condition

    行从一个关系是如何与另一个关联的行相结合。返回类型的布尔表达式。

  • 匹配(matched_condition]

    匹配条款执行时源行匹配基于目标表行merge_condition和可选的match_condition

  • matched_action

    • 删除

      删除匹配的目标表行。

      允许多个匹配匹配时无条件删除。无条件删除不是模棱两可的,即使有多个匹配。

    • 更新

      更新匹配目标表行。

      更新目标三角洲表的所有列的相应列源数据集,使用更新*。这相当于更新col1=source.col1(,col2=source.col2…]对所有目标三角洲表的列。因此,这一行动假定源表具有相同的列的目标表,否则查询将抛出一个错误分析。

      请注意

      这种行为变化时自动启用模式迁移。看到自动模式演化为三角洲湖合并获取详细信息。

      适用于:检查标记是的砖的SQLSQL仓库2022.35版本或更高版本检查标记是的砖运行时11.2及以上

      您可以指定默认的作为expr显式地更新列的默认值。

    如果有多个匹配条款,然后他们评估的顺序指定。每一个匹配条款,除了最后一个,必须有一个matched_condition。否则,查询返回一个NON_LAST_MATCHED_CLAUSE_OMIT_CONDITION错误。

    如果没有一个匹配条件评估为true的源和目标两相匹配的行merge_condition,然后目标行是不变的。

  • 匹配(目标](not_matched_condition]

    匹配条款插入一行,当一个源行不匹配行基于任何目标merge_condition和可选的not_matched_condition

    适用于:检查标记是的砖的SQL检查标记是的砖运行时12.1及以上

    匹配通过目标可以用作一个别名匹配

    not_matched_condition必须是一个布尔表达式。

    • 插入*

      插入目标三角洲表的所有列的相应列源数据集。这相当于插入(col1(,col2…)(source.col1(,source.col2…)对所有目标三角洲表的列。这个动作需要源表具有相同的列的目标表。

      请注意

      这种行为变化时自动启用模式迁移。看到自动模式演化为三角洲湖合并获取详细信息。

    • 插入()()

      生成新行根据指定的列和相应的表达式。目标表中的所有列不需要指定。未指定的目标列,列默认插入,或如果没有存在。

      适用于:检查标记是的砖的SQLSQL仓库2022.35版本或更高版本检查标记是的砖运行时11.2及以上

      您可以指定默认的作为一个表达式来显式地插入列默认目标列。

    如果有多个匹配条款,然后他们评估的顺序指定。所有匹配条款,除了最后一个,必须有not_matched_condition年代。否则,查询返回一个NON_LAST_NOT_MATCHED_CLAUSE_OMIT_CONDITION错误。

  • 匹配通过(not_matched_by_source_condition]

    适用于:检查标记是的砖的SQL检查标记是的砖运行时12.1及以上

    匹配通过条款执行,当一个目标行不匹配任何根据的源表中的行merge_condition和可选的not_match_by_source_condition评估为true。

    not_matched_by_source_condition必须是一个布尔表达式,只有引用列的目标表。

  • not_matched_by_source_action

    • 删除

      删除目标表行。

    • 更新

      更新目标表行。expr可能只参考目标表的列,否则查询将抛出一个错误分析。

      适用于:检查标记是的砖的SQLSQL仓库2022.35版本或更高版本检查标记是的砖运行时11.2及以上

      您可以指定默认的作为expr显式地更新列的默认值。

    重要的

    添加一个匹配通过当条款更新或删除目标行merge_condition评估错误会导致大量的目标行被修改。为获得最佳性能,适用not_matched_by_source_condition年代限制的数量目标行更新或者删除。

    如果有多个匹配通过条款,然后他们评估的顺序指定。每一个匹配通过条款,除了最后一个,必须有一个not_matched_by_source_condition。否则,查询返回一个NON_LAST_NOT_MATCHED_BY_SOURCE_CLAUSE_OMIT_CONDITION错误。

    如果没有一个匹配通过条件评估为true的目标行不匹配任何根据的源表中的行merge_condition,然后目标行是不变的。

重要的

一个合并操作可以失败DELTA_MULTIPLE_SOURCE_ROW_MATCHING_TARGET_ROW_IN_MERGE错误如果源数据集的多行匹配并尝试更新相同的目标三角洲表行。根据SQL合并的语义,等更新操作是模棱两可的尚不清楚应该使用哪个源行更新匹配的目标行。源表可以进行预处理来消除多个匹配的可能性。看到变化数据捕获的例子——预处理改变数据集(即源数据集)只保留最新的改变对于每个关键申请前三角洲到目标表。

例子

您可以使用合并对于复杂的操作,比如删除数据,插入变化数据,应用SCD 2型操作,等等看插入表使用合并成三角洲湖几个例子。

匹配

——删除所有目标匹配源表中的行。>合并目标使用目标关键=关键匹配然后删除——有条件地更新目标行有一个匹配的源表中的使用价值来源。>合并目标使用目标关键=关键匹配目标updated_at<updated_at然后更新*——多个匹配的条款条件删除匹配目标行和更新两列对于所有其他匹配的行。>合并目标使用目标关键=关键匹配目标marked_for_deletion然后删除匹配然后更新目标updated_at=updated_at,目标价值=默认的

匹配(目标]

——插入所有行从源中没有目标表。>并入目标使用源代码的目标。关键=来源。关键当不匹配然后插入*-- Conditionally insert new rows in the target table using unmatched rows from the source table. > MERGE INTO target USING source ON target.key = source.key WHEN NOT MATCHED BY TARGET AND source.created_at > now() - INTERVAL “1” DAY THEN INSERT (created_at, value) VALUES (source.created_at, DEFAULT)

匹配通过

——删除所有目标行源表中没有匹配。>合并目标使用目标关键=关键匹配通过然后删除——多个源相对应条款条件删除行和无与伦比的目标更新两列对于所有其他匹配的行。>合并目标使用目标关键=关键匹配通过目标marked_for_deletion然后删除匹配通过然后更新目标价值=默认的