Table Upsert 步骤
在一次操作中同时完成插入和更新,以您指定为匹配键的一列或多列为依据。对于源中的每一行:如果目标中存在匹配的行(键值相同),则更新该行;否则插入新行。
当增量数据流同时包含新记录和对现有记录的修订时,请使用此步骤,例如销售更新、员工记录变更,或任何“始终反映最新状态”的场景。请谨慎指定匹配列:键值相同但其他列不同的行会被覆盖,因此键选择不当可能会悄无声息地破坏数据。
更新插入参数
Section titled “更新插入参数”
要确定源表和目标表,首先使用 源表 下拉菜单选择要从中提取数据的数据表。然后使用 目标表 下拉菜单选择一个现有的表作为目标表。
源表数据选择
Section titled “源表数据选择”
数据映射器用于将源数据中的列映射到目标数据表。
检查并填充映射器
Section titled “检查并填充映射器”使用 检查源 菜单按钮可以通过更多方式将列从源映射到目标:
- 填充两个映射表:将源数据表中的所有值传播到目标数据表。这是默认设置。
- 仅填充源映射表:仅映射源数据表中的所有值。当源列结构发生变化而需要修改现有工作流时,这很有用。
- 仅填充目标映射表:仅将所有值传播到目标数据表。
如果源列和目标列选项不够用,还可以通过几种方式向目标数据表中添加其他列:
- 全部传播 会把所有源列插入目标数据表,无论它们是否已存在。
- 传播所选项 仅插入所选的源列。
- 在目标一侧右键单击并选择 插入行,可在当前所选行的正上方插入一行。
- 在目标一侧右键单击并选择 追加行,可在目标数据表的底部(最右侧)插入一行。
要从目标数据表中删除列,请选择所需的列,然后右键单击并选择 删除。
要重新排列目标数据表中的列,请选择所需的列。您可以使用以下任一方式:
- 批量移动箭头:从右上角的箭头中选择所需的移动选项
- 上下文菜单:右键单击并选择 移到顶部、上移、下移 或 移到底部。
将结果缩减为仅非重复记录
Section titled “将结果缩减为仅非重复记录”要仅返回非重复选项,请选择 非重复 菜单选项。这会为源中的每一列切换出一组复选框。只需勾选相应列旁边的任意复选框,即可仅返回非重复结果。
根据具体情况,您可能需要考虑改用汇总。
非重复处理会保留找到的第一条唯一记录,并丢弃其余记录。如果需要在多次运行之间保持一致,您可能需要对数据应用排序。
目标列网格中有一个 更新键 列,紧跟在目标列的名称之后。在共同标识一行的那些列上勾选它:源行的键值与目标中已有某行匹配时,会更新该行,其他任何源行则会被插入。
每一列最初都被勾选,因此请取消勾选不属于键的列。没有更新键设置的列(刚由填充添加的列,或通过 API 保存而未带该设置的列)视为键。至少必须保持勾选一列。
源数据筛选器
Section titled “源数据筛选器”
为了获得最大的灵活性,源数据和目标数据都可以使用数据筛选器。对于较大的数据集,在源端筛选掉部分行尤其有益,这样后续操作只需处理较小的数据集。
选择数据子集
此筛选器类型用于根据指定条件筛选传入的源数据。
对结果数据应用二次筛选器
此筛选器类型用于根据指定条件对转换后的结果数据应用筛选器。 对转换后的结果应用筛选器,可以基于复杂计算、汇总或窗口函数的结果进行排除。
最终数据表切片(限制)
行切片功能可根据范围和起始点限制结果集中的行数。
筛选器语法
筛选器语法使用 Python SQLAlchemy,与其他表达式的语法相同。
有关示例和表达式函数,请参阅表达式部分。
保存时会检查什么
Section titled “保存时会检查什么”- 至少一个更新键。 否则保存会被拒绝,并提示 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. 尚不存在的目标表,或用变量命名的目标表,会在步骤运行时检查。
- 空映射会自动为您填充。 在已选择源表但没有源列或目标列的情况下保存,会根据源填充空的一侧,效果与 填充两个映射表 相同。