多表联接
多表联接 步骤使用可视化的 联接图设计器 在一次操作中联接多个表(最多 32 个),取代了串联多个两表联接步骤的做法。您添加表,在它们的列之间绘制联接,为每个联接选择联接类型和条件,并映射输出列。编辑器有三个选项卡:Tables & Joins、输出列 和 Post-Join Filter。
完整演练请参阅多表联接步骤指南。
- 添加表:将源表作为列卡片放置在画布上。每个表都有一个 别名(以
alias.column的形式使用),必须以字母或下划线开头,且不能是 SQL 关键字。 - 目标表:写入联接结果的表;如果不存在则会创建。
- 动态:以引用而非选择的方式指定源或目标:表名、项目路径(
/03 Results/FACT_GL),或在运行时解析的、带有{variable}标记的任一形式。动态源的列在设计时无法读取,因此需要在侧边面板中手动输入。 - 绘制联接:从一个表上的列点拖动到另一个表的列,即可创建联接;可选的 标签 用于命名该边。
- 入站筛选器:对每个表在联接 之前 应用的筛选器。
- 从服务器重新获取:根据最新目录刷新表卡片的列。
- 整理布局 / 适应视图:自动排列图,或缩放以适应;也可以手动平移和缩放。
- 撤消 / 重做 / 历史记录:逐步浏览、查看和还原编辑。
- 筛选列…:缩小表卡片上显示的列。
- 导出:将联接图下载为 SVG。
| 类型 | 保留 |
|---|---|
INNER |
在被联接的表之间匹配的行。 |
LEFT |
左表的所有行,以及右表中匹配的行。 |
FULL |
两个表的所有行。 |
CROSS |
行的每种组合(不允许有条件)。 |
每个非交叉联接都有一个或多个条件,以 AND / OR 组合,可使用运算符 =、<>、<、<=、>、>=、BETWEEN、IS NULL、IS NOT NULL、IN、NOT IN、LIKE、NOT LIKE。
条件可以指定名称中含有空格或标点的列,例如 Build Plant 或 Cust (Id);该列必须存在于该输入中。包含双引号、反引号、反斜杠或控制字符的名称会被拒绝。
对于 BETWEEN,写成输入的别名、一个点和一个列(cust.Max Id)的边界会被读取为该输入的列。任何其他边界都是字面文本,包括没有点的单独别名。因此,以别名和点开头的文本边界(例如输入的别名为 cust 时的 cust.2024)会被读取为列,并报告为缺失。
在 输出列 选项卡上映射结果列;可根据需要重命名、设置数据类型和聚合。同名列会自动加上其源别名前缀,以避免冲突。
每一行的值恰好来自以下三个字段之一,设置多个或一个都不设置都会被拒绝:
| 类型 | 字段 |
|---|---|
| 源列 | 源别名(所属画布别名)加上 源(alias.column)。两者都必填。 |
| 常量 | 常量:每一行都使用相同的固定值。 |
| 表达式 | 表达式:可以将任何画布别名引用为 alias.column 的 SQLAlchemy 表达式。 |
- 从画布选取…:从画布上的每个源中勾选列。
- 添加所有源列:追加每个源的每一列。
- 添加表达式列:追加一个表达式行并打开表达式编辑器。
Post-Join Filter 选项卡会在写入之前对联接结果应用可选的筛选器(相当于 SQL 的 HAVING),在同一表达式编辑器中编辑。它以 result.column_name 引用输出列;源别名在此处不在范围内。
运行时指定名称的列
Section titled “运行时指定名称的列”选中 同时带入运行时指定名称的列,可将步骤中未列出的每个源列按步骤运行时表中的状态原样传递。当前面的步骤(例如透视)创建了名称取决于数据的列,导致构建步骤时无法列出这些列时,请使用此选项。不选则只写入您列出的列。
- 联接图是一棵树:每个表恰好通过一条边联接到结果中(无环),并且表不能联接到自身。
- 配置会在您保存步骤时和步骤运行时进行验证;错误会用 ⚠ 标记标出有问题的表或联接,保存失败会切换到包含第一个问题的选项卡,跳转到问题 可按需导航到该处。输出列表达式和 Post-Join Filter 会在保存时检查;带有运行时指定名称的列的联接会在保存时跳过表达式检查,并在步骤运行时检查。