Table Inner Join 步骤
用于对两个数据表执行内联接操作,根据指定的联接键将它们合并为一个数据表。
有关内联接方法的更多详细信息,请参阅:Wikipedia SQL Inner Join
表源
从下拉菜单中选择源数据表。
源列
在此指定要包含的列。选择检查源和Populate Source Mapping Table按钮后,这些列即可用于联接操作。
选择源数据子集
任何有效的 Python 表达式都可用于筛选数据子集。更多详细信息和示例请参阅表达式。

运行时指定名称的列
Section titled “运行时指定名称的列”选中 同时带入运行时指定名称的列,可将步骤中未列出的每个源列按步骤运行时表中的状态原样传递。当前面的步骤(例如透视)创建了名称取决于数据的列,导致构建步骤时无法列出这些列时,请使用此选项。不选则只写入您列出的列。
目标表

要设置目标表,可以通过目标表下拉列表选择现有表作为目标表,也可以单击绿色的 “+” 号新建一个表作为目标。
创建表
新建表时,您可以选择将其创建为视图或表。
视图:
视图的优点是步骤的执行时间明显短于使用表的情况。缺点是视图在表的详细信息模式下不便于探索数据。
表:
使用表作为目标时,步骤的执行时间会更长,但在详细信息模式下探索数据比使用视图快得多。

指定联接条件。推测会按下列顺序,使用两个表的列能满足的第一种方式填充 Join Map:
- 此项目中联接相同两个表的另一个联接步骤所用的键
- 联接这两个表的已批准指标所用的键
- 其中一个表上设置的键列,按名称匹配到另一个表中的列
- Table 1和Table 2中名称相同的列
- 名称仅在大小写或下划线上有差异的列,或将
id列匹配到以其表命名的列,例如表 Customers 对应的customer_id
映射下方会有一行文字说明所用的方式,直到您更改映射为止。推测读取的是表的列而非行,因此保存前请检查这些键。检查源会以同样的方式填充空的 Join Map。
如需手动添加更多列,请在该区域任意位置右键单击,选择插入行或追加行,分别在当前所选行之前或末尾添加一行。然后输入要从Table 1匹配到Table 2的列名。要从 Join Map 中移除某个字段,只需右键单击并选择删除。
检查键位于推测旁边,用于统计Join Map中出现在表的多行上的键值数量。当您联接到的表中某个键值重复时,每个匹配的行都会在结果中出现一次,因此结果的行数可能多于起始表的行数。
被检查的表取决于步骤:
- 内联接和Table Lookup:Table 2。
- 外联接:左联接检查 Table 2,右联接检查Table 1,完全联接则两个表都检查。
结果显示在Join Map下方,给出重复键值的数量及共享这些键值的行数,并列出重复次数最多的前五个。统计范围如下:
- 表的当前状态,即应用了此步骤对该表的筛选器之后;
- 当行级安全限制了您对表的查看范围时,仅统计您能看到的行,结果中会予以说明;
- 不统计键为空白的行,因为空白键永远不会与其他行匹配。例外情况是设置为让空白键相互匹配的内联接或外联接(从 Alteryx 转换而来的联接可能如此):此时空白键会被计为一个键值,并可能显示为 (空白)。
Table Lookup从不重复行。对于重复的键,它只保留 Table 2 的一行,并取每列的最小值(最小的数字、最早的日期、排序最靠前的文本),因此该行可能混合了Table 2 中不同行的值。出现这种情况时,检查键会提示您;若要自行选择使用哪些值,请使Table 2 中的每个键只出现一次。
该检查读取您仓库中的表,因此只在您选择时运行,并在 30 秒后停止。更改任一表、其筛选器、Join Map,或在外联接中更改联接类型,都会清除结果。
数据映射器配置

数据映射器用于将源数据中的列映射到目标数据表。
检查并填充映射器
使用 检查源 菜单按钮可以通过更多方式将源中的列映射到目标:
- 填充两个映射表:将源数据表中的所有值传播到目标数据表。这是默认行为。
- 仅填充源映射表:仅映射源数据表中的所有值。当源列结构发生变化而需要修改现有工作流时,此选项很有用。
- 仅填充目标映射表:仅将所有值传播到目标数据表。
如果上述源列和目标列选项仍不够用,还可以通过以下几种方式向目标数据表添加其他列:
- 全部传播 会将所有源列插入目标数据表,无论这些列是否已存在。
- 传播所选项 仅插入所选的源列。
- 在目标侧右键单击并选择 插入行,可在当前所选行的正上方插入一行。
- 在目标侧右键单击并选择 追加行,可在目标数据表的底部(最右侧)插入一行。
删除列
要从目标数据表中删除列,请选择所需的列,然后右键单击并选择 删除。
不再列出的源列
目标行可能指定了某个 源列,而源数据表已不再列出该列,例如在重新检查源之后。步骤绝不会自动移除这样的行,而是将列名显示为红色,并在前面加上 ⚠ 警告标志;将鼠标悬停在其上,会提示该列不在源列中。在包含多个表的步骤(如联合)中,每个表都会分别对照其自身的源列进行检查。
带有 常量、表达式 或 计数(含空值) 汇总的行不会被标记,因为步骤不会读取其源列。当源数据表没有列出任何列时(例如首次检查源之前),也不会标记任何内容。
保存仍含有已标记行的步骤时,会出现 发现过时列 对话框,按其所在的选项卡或表列出这些行,并提供三个选项:
- 全部移除并保存 — 移除已标记的行,然后保存。
- 仍然保存 — 按现状保存步骤。
- 取消 — 返回步骤,不保存。
要保留某一行并清除其警告,请将该列重新添加到源数据表,或选择源数据表中列出的某一列。
列数据类型
每个目标列都带有一个 类型。从源传播而来的列沿用源列的类型;手动添加的行起初为 文本,需要设置 类型 来指明其实际类型 — 打算求和或排序的列需要使用数值或日期类型,因为文本会按文本方式排序和求和。
保存时没有任何类型的列,步骤仍可运行。类型会在步骤启动时根据该列所读取的源列确定。如果无处可读,则视为文本:提取 SQL 步骤的列来自您编写的查询,而不是映射的源;如果多个源中存在同名列但类型不一致,则使用文本,而不是随意选择其中一种 — 猜错会产生仓库可能拒绝的转换,而任何类型都可以转换为文本。
自行设置 类型 仍然是指明列应为何种类型的方式。不设置则意味着接受源列恰好具有的类型。
更改列顺序
要重新排列目标数据表中的列,请选择所需的列。可以使用以下任一方式:
- 批量移动箭头:从右上角的箭头中选择所需的移动选项
- 上下文菜单:右键单击并选择 移到顶部、上移、下移 或 移到底部。
仅返回非重复记录
要仅返回非重复的选项,请选择 非重复 菜单选项。这会为源中的每一列切换显示一组复选框。只需勾选相应列旁边的复选框,即可仅返回非重复的结果。
视情况而定,您可能需要考虑改用汇总。
非重复处理会保留找到的第一条唯一记录,并丢弃其余记录。如果运行之间的一致性很重要,可能需要对数据进行排序。
聚合与分组
要聚合结果,请选择 汇总 菜单选项。这会为目标数据表中的每一列切换显示一组选择框。请为每一列选择合适的汇总方法。
当 检查源 填充列时,如果数值列的名称读起来像标识符(例如 id、customer_id、Order No 或 CustomerKey),或者其所在表将其设为键,或者联接将其用作键,则该列起初为 分组依据,而不是 求和。
- 分组依据
- 求和
- 最小值
- 最大值
- 第一个
- 最后一个
- 计数
- 计数(含空值)
- 平均值
- 标准差
- 样本标准差
- 总体标准差
- 方差
- 样本方差
- 总体方差
- 高级非分组
有关表达式、清理和常量等高级数据映射器用法,请参阅高级数据映射器用法
Join Map 或 目标输出列 中的某一行,可能引用了步骤的 源列 选项卡中已不再列出的列,例如在重新检查某个源的列之后。步骤绝不会自动移除这样的行。相反,该列名会以红色显示在 ⚠ 警告标志之后,将鼠标悬停其上即可看到是哪个源的列表缺少该列。
带有 常量、表达式 或 计数(含空值) 汇总的目标输出列行永远不会被标记,因为步骤不会读取该行的源列。列表为空的源(例如从未检查过的源)不会进行任何检查。
保存仍带有被标记行的步骤时,会弹出 发现过时列 对话框,按表列出这些行,并提供三个选项:
- 全部移除并保存 — 移除被标记的行,然后保存。
- 仍然保存 — 按当前状态保存步骤。
- 取消 — 返回步骤而不保存。
若要保留某一行并清除其警告,请在 源列 选项卡上把该列重新添加到对应源的列表中,或者选择列表中已有的列。
保存时,还会按当前状态检查每个源表。如果某个源的列表中有某一列而其表中没有,则会弹出 缺少源列 对话框,指明该表和该列,并提供 仍然保存 或 取消。如果同时还有行被标记,两者会一并显示在 发现过时列 对话框中。参见源表中缺少的列。

为了获得最大的灵活性,源数据和目标数据都可以使用数据筛选器。对于较大的数据集,在源端筛选掉部分行尤其有益,这样后续操作只需处理较小的数据集。
选择数据子集
此筛选器类型用于根据指定条件筛选传入的源数据。
对结果数据应用二次筛选器
此筛选器类型用于根据指定条件对转换后的结果数据应用筛选器。 对转换后的结果应用筛选器,可以基于复杂计算、汇总或窗口函数的结果进行排除。
最终数据表切片(限制)
行切片功能可根据范围和起始点限制结果集中的行数。
筛选器语法
筛选器语法使用 Python SQLAlchemy,与其他表达式的语法相同。
有关示例和表达式函数,请参阅表达式部分。
联接汽车制造商与车型
Section titled “联接汽车制造商与车型”在此示例中,请看以下源数据表。首先是汽车制造商列表。
| Mfg_ID | 制造商 |
|---|---|
| 1 | Aston Martin |
| 2 | Porsche |
| 3 | Lamborghini |
| 4 | Ferrari |
| 5 | Koenigsegg |
接下来是带有制造商 ID 的汽车车型列表。请注意,有几个车型没有制造商。
| 车型名称 | Mfg_ID |
|---|---|
| Aventador | 3 |
| Countach | 3 |
| DBS | 1 |
| Enzo | 4 |
| One-77 | 1 |
| Optimus Prime | |
| Batmobile | |
| Agera | 5 |
| Lightning McQueen |
要获取按制造商划分的车型列表,适合按 Mfg_ID 联接。
首先,指定 Table 1 Data Selection 的参数。选择源数据表,并列出所有列。
接下来,指定 Table 2 Data Selection 的参数。同样选择源数据表,并列出所有列。
最后,在 Table Output 选项卡中设置联接条件。使用 推测 按钮,Analyze 会正确识别出 Mfg_ID 列作为 Join Key。最后,
目标输出列 通过 传播 按钮自动指定。这实际上包含所有表中的所有列,其中所有联接列只包含一次。请注意,列按字母顺序排序,首先按 Manufacturer,其次按 ModelName。
正如预期,最终输出只包含在两个表中都有匹配的值。因此,Porsche 不会出现,因为它没有车型。同样,
Batmobile 没有制造商(它是定制车),所以不包含在内。