跳转到内容

在一次操作中同时完成插入和更新,以您指定为匹配键的一列或多列为依据。对于源中的每一行:如果目标中存在匹配的行(键值相同),则更新该行;否则插入新行。

当增量数据流同时包含新记录和对现有记录的修订时,请使用此步骤,例如销售更新、员工记录变更,或任何“始终反映最新状态”的场景。请谨慎指定匹配列:键值相同但其他列不同的行会被覆盖,因此键选择不当可能会悄无声息地破坏数据。

目标(现有)id 1 · Aid 2 · B源(增量)id 2 · B′id 3 · C按 id 匹配结果id 1 · A保留id 2 · B′已更新id 3 · C已插入
Upsert 根据匹配键将源合并到目标:已有的键会被更新(id 2 → B′),新的键会被插入(id 3)。请谨慎选择键,共用该键的行会被覆盖。

源和目标

要确定源表和目标表,首先使用 源表 下拉菜单选择要从中提取数据的数据表。然后使用 目标表 下拉菜单选择一个现有的表作为目标表。

Table Upsert

数据映射器用于将源数据中的列映射到目标数据表。

使用 检查源 菜单按钮可以通过更多方式将列从源映射到目标:

  • 填充两个映射表:将源数据表中的所有值传播到目标数据表。这是默认设置。
  • 仅填充源映射表:仅映射源数据表中的所有值。当源列结构发生变化而需要修改现有工作流时,这很有用。
  • 仅填充目标映射表:仅将所有值传播到目标数据表。

如果源列和目标列选项不够用,还可以通过几种方式向目标数据表中添加其他列:

  • 全部传播 会把所有源列插入目标数据表,无论它们是否已存在。
  • 传播所选项 仅插入所选的源列。
  • 在目标一侧右键单击并选择 插入行,可在当前所选行的正上方插入一行。
  • 在目标一侧右键单击并选择 追加行,可在目标数据表的底部(最右侧)插入一行。

要从目标数据表中删除列,请选择所需的列,然后右键单击并选择 删除。

要重新排列目标数据表中的列,请选择所需的列。您可以使用以下任一方式:

  • 批量移动箭头:从右上角的箭头中选择所需的移动选项
  • 上下文菜单:右键单击并选择 移到顶部、上移、下移 或 移到底部。

要仅返回非重复选项,请选择 非重复 菜单选项。这会为源中的每一列切换出一组复选框。只需勾选相应列旁边的任意复选框,即可仅返回非重复结果。

根据具体情况,您可能需要考虑改用汇总。

非重复处理会保留找到的第一条唯一记录,并丢弃其余记录。如果需要在多次运行之间保持一致,您可能需要对数据应用排序。

目标列网格中有一个 更新键 列,紧跟在目标列的名称之后。在共同标识一行的那些列上勾选它:源行的键值与目标中已有某行匹配时,会更新该行,其他任何源行则会被插入。

每一列最初都被勾选,因此请取消勾选不属于键的列。没有更新键设置的列(刚由填充添加的列,或通过 API 保存而未带该设置的列)视为键。至少必须保持勾选一列。

Table Data Filters

为了获得最大的灵活性,源数据和目标数据都可以使用数据筛选器。对于较大的数据集,在源端筛选掉部分行尤其有益,这样后续操作只需处理较小的数据集。

选择数据子集

此筛选器类型用于根据指定条件筛选传入的源数据。

对结果数据应用二次筛选器

此筛选器类型用于根据指定条件对转换后的结果数据应用筛选器。 对转换后的结果应用筛选器,可以基于复杂计算、汇总或窗口函数的结果进行排除。

最终数据表切片(限制)

行切片功能可根据范围和起始点限制结果集中的行数。

筛选器语法

筛选器语法使用 Python SQLAlchemy,与其他表达式的语法相同。

有关示例和表达式函数,请参阅表达式部分。

  • 至少一个更新键。 否则保存会被拒绝,并提示 At least one target column must be marked as Update Key.
  • 映射与现有目标表一致。 当目标表已存在时,步骤必须映射它的每一列,不得映射表中没有的列,并为每一列使用该表的类型,这样 upsert 就不会丢弃表中的某列及其数据,也不会更改某列的类型。数值和货币视为相同类型。拒绝信息会指出每个差异,例如 The target columns must match the existing target table ‘customers’. The table has columns the step doesn’t map: region. 尚不存在的目标表,或用变量命名的目标表,会在步骤运行时检查。
  • 空映射会自动为您填充。 在已选择源表但没有源列或目标列的情况下保存,会根据源填充空的一侧,效果与 填充两个映射表 相同。