多表联接步骤
多表联接步骤可在一次操作中联接多个表。无需串联一系列双表联接(那样既看不到全局,又要重复同样的输出映射),只需在可视化的联接图设计器中摆放所有表,在它们的列之间绘制联接,即可生成一个结果表。
它针对分析联接的常见形态而设计:一个事实表联接多个维度表或查找表。最多可同时联接 32 个表。
添加多表联接
Section titled “添加多表联接”像添加其他步骤一样添加它,并选择多表联接(位于步骤菜单的表分组下,也可以从高级工作流画布的调色板中拖入)。该步骤的编辑器包含三个选项卡:
- 表和联接:可视化设计器,用于添加表和绘制联接。
- 输出列:结果表将包含的列。
- 联接后筛选器:应用于联接结果的可选筛选器。
操作过程中,状态指示器会显示可以保存或未保存的更改。
选择添加表,将一个源表放到画布上。每个表以卡片形式显示,并列出其列,同时获得一个别名,即在其他位置引用其列时使用的简短名称(写作 alias.column)。别名必须以字母或下划线开头,且不能是 SQL 关键字。可按需添加任意数量的表(最多 32 个),并选择结果写入的目标表。
如果表的列在目录中发生了变化,请使用从服务器重新获取,将卡片上的列替换为最新值。
动态表和变量
Section titled “动态表和变量”源表和目标表都可以通过引用指定,而不必从列表中选取。在表选取器上勾选动态,然后输入以下任一内容:
- 表名称:
FACT_GL - 项目路径:
/03 Results/FACT_GL
两者都可以包含 {variable} 标记,这些标记会在工作流运行时被替换。例如 /03 Results/FACT_GL_{year} 会由项目变量或工作流变量驱动,在每个期间写入不同的表。如果目标表不存在,则会创建。
保存时会检查括号是否匹配,因此像 FACT_{year 这样的拼写错误会在步骤上报告,而不会在运行中途失败。
从一个表的列圆点拖动到另一个表的列,即可创建联接(边)。选中某条边后,右侧会打开其编辑器,可在其中设置:
-
联接类型:
类型 保留内容 INNER 仅匹配的行 LEFT 左表的所有行 FULL 两侧的所有行 CROSS 左表的每一行与右表的每一行组合(无条件) -
联接条件:两个表的列之间的一个或多个比较。使用 + 添加条件添加更多条件,用 AND / OR 组合,并可使用全部运算符(
=、<>、<、<=、>、>=、BETWEEN、IS NULL、IS NOT NULL、IN、NOT IN、LIKE、NOT LIKE)。 -
标签(可选):为联接命名(例如
customer-to-orders),使关系图更易阅读。
设计器会将联接图保持为树形结构:每个表通过且仅通过一个联接接入结果,因此不会出现环路或有歧义的路径,表也不能与自身联接。要删除联接,请选中该边并选择删除边。
在表联接之前筛选
Section titled “在表联接之前筛选”每个源表都有一个在联接之前应用的入站筛选器,可用它将表缩减为需要的行(以 alias.column 引用其列)。它不同于在所有联接之后运行的联接后筛选器。
设计器工具栏
Section titled “设计器工具栏”- 整理布局按联接顺序从左到右自动排列表和联接。
- 适应视图缩放并居中,使整个图形可见;也可以手动平移和缩放。
- 筛选列… 在表的列很多时,缩小卡片上显示的列范围。
- 撤消 / 重做可在编辑历史中后退和前进(Ctrl+Z / Ctrl+Y),历史记录会打开一个面板,列出自打开对话框以来的所有更改,并提供还原。
- 导出将联接关系图下载为 SVG 图像,便于用于文档编写或评审。
在输出列选项卡上,选择结果表将包含的列。可以从任何已联接的表中选取:使用从画布选取… 可从所有源的列中直观选择,或使用添加所有源列一次性带入全部列。对于每一列,都可以重命名、设置其数据类型并应用聚合。当两个源列同名时,PlaidCloud 会为它们加上各自的源别名前缀,以避免冲突。
每个输出列的值恰好来自以下三处之一:
- 源列:将源别名设置为拥有该列的画布别名,并将源设置为
alias.column引用。两者都是必填项;源列始终要指明其所属的表。 - 常量:每一行都使用同一个固定值。
- 表达式:选择添加表达式列可追加一行并打开表达式编辑器。表达式可以用
alias.column引用画布上的任何源别名,因此可以借此构建跨多个已联接表的值(跨两个表的CASE、字符串拼接、计算金额)。表达式行的源别名和源应留空。
填写其中多个是错误的,一个都不填也是错误的。
表达式单元格会打开标准的 PlaidCloud 表达式编辑器,其列浏览器中包含画布上的每个表,并提供函数列表和自动完成。
输出列会随画布变化:如果在表和联接选项卡上重命名某个源,其输出列会移到新别名下;如果移除某个源,其输出列也会被删除,因此不会保留指向已不在联接中的表的列。
联接后筛选器
Section titled “联接后筛选器”联接后筛选器选项卡会在联接结果写入目标表之前,对其应用一个可选的筛选器,相当于 SQL 的 HAVING 子句。单击该框可打开表达式编辑器;输出列会列在其列浏览器中,使用 result.column_name 引用它们,此处不能使用源别名。框下方的可用引用会列出所有可以使用的引用。留空则不进行联接后筛选。
PlaidCloud 会在构建联接时以及步骤运行时对联接进行验证。如果存在问题,例如不受支持的配置、环路、重复的别名、未设置源 / 常量 / 表达式中任何一项(或设置了多项)的输出列,或引用了已不存在的列,则该选项卡会出现带计数的 ⚠ 标记,设计器会标出有问题的表或联接,保存也会被拒绝并给出原因。如果存在未解决的问题而保存,会切换到包含第一个问题的选项卡;跳转到问题可按需执行同样的操作。
保存时,PlaidCloud 还会按步骤实际运行的方式,依据联接自身的输入按别名(alias.column)检查每个输出列的表达式,并检查联接后筛选器。损坏的表达式会在其输出列上报告,损坏的联接后筛选器会在筛选器上报告。如果联接设置了同时带入运行时指定名称的列且未进行汇总,则保存时会跳过表达式检查,因为列是在运行时添加的;这些表达式会在步骤运行时检查。各源筛选器同样在步骤运行时检查。
多表联接的运行方式与其他步骤相同。它在一次操作中执行所有联接,并将映射后的列写入目标表。