跳转到内容

多表联接步骤

多表联接步骤可在一次操作中联接多个表。无需串联一系列双表联接(那样既看不到全局,又要重复同样的输出映射),只需在可视化的联接图设计器中摆放所有表,在它们的列之间绘制联接,即可生成一个结果表。

它针对分析联接的常见形态而设计:一个事实表联接多个维度表或查找表。最多可同时联接 32 个表。

像添加其他步骤一样添加它,并选择多表联接(位于步骤菜单的表分组下,也可以从高级工作流画布的调色板中拖入)。该步骤的编辑器包含三个选项卡:

  1. 表和联接:可视化设计器,用于添加表和绘制联接。
  2. 输出列:结果表将包含的列。
  3. 联接后筛选器:应用于联接结果的可选筛选器。

操作过程中,状态指示器会显示可以保存或未保存的更改。

选择添加表,将一个源表放到画布上。每个表以卡片形式显示,并列出其列,同时获得一个别名,即在其他位置引用其列时使用的简短名称(写作 alias.column)。别名必须以字母或下划线开头,且不能是 SQL 关键字。可按需添加任意数量的表(最多 32 个),并选择结果写入的目标表。

如果表的列在目录中发生了变化,请使用从服务器重新获取,将卡片上的列替换为最新值。

源表和目标表都可以通过引用指定,而不必从列表中选取。在表选取器上勾选动态,然后输入以下任一内容:

  • 表名称: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),使关系图更易阅读。

设计器会将联接图保持为树形结构:每个表通过且仅通过一个联接接入结果,因此不会出现环路或有歧义的路径,表也不能与自身联接。要删除联接,请选中该边并选择删除边。

每个源表都有一个在联接之前应用的入站筛选器,可用它将表缩减为需要的行(以 alias.column 引用其列)。它不同于在所有联接之后运行的联接后筛选器。

  • 整理布局按联接顺序从左到右自动排列表和联接。
  • 适应视图缩放并居中,使整个图形可见;也可以手动平移和缩放。
  • 筛选列… 在表的列很多时,缩小卡片上显示的列范围。
  • 撤消 / 重做可在编辑历史中后退和前进(Ctrl+Z / Ctrl+Y),历史记录会打开一个面板,列出自打开对话框以来的所有更改,并提供还原。
  • 导出将联接关系图下载为 SVG 图像,便于用于文档编写或评审。

在输出列选项卡上,选择结果表将包含的列。可以从任何已联接的表中选取:使用从画布选取… 可从所有源的列中直观选择,或使用添加所有源列一次性带入全部列。对于每一列,都可以重命名、设置其数据类型并应用聚合。当两个源列同名时,PlaidCloud 会为它们加上各自的源别名前缀,以避免冲突。

每个输出列的值恰好来自以下三处之一:

  • 源列:将源别名设置为拥有该列的画布别名,并将源设置为 alias.column 引用。两者都是必填项;源列始终要指明其所属的表。
  • 常量:每一行都使用同一个固定值。
  • 表达式:选择添加表达式列可追加一行并打开表达式编辑器。表达式可以用 alias.column 引用画布上的任何源别名,因此可以借此构建跨多个已联接表的值(跨两个表的 CASE、字符串拼接、计算金额)。表达式行的源别名和源应留空。

填写其中多个是错误的,一个都不填也是错误的。

表达式单元格会打开标准的 PlaidCloud 表达式编辑器,其列浏览器中包含画布上的每个表,并提供函数列表和自动完成。

输出列会随画布变化:如果在表和联接选项卡上重命名某个源,其输出列会移到新别名下;如果移除某个源,其输出列也会被删除,因此不会保留指向已不在联接中的表的列。

联接后筛选器选项卡会在联接结果写入目标表之前,对其应用一个可选的筛选器,相当于 SQL 的 HAVING 子句。单击该框可打开表达式编辑器;输出列会列在其列浏览器中,使用 result.column_name 引用它们,此处不能使用源别名。框下方的可用引用会列出所有可以使用的引用。留空则不进行联接后筛选。

PlaidCloud 会在构建联接时以及步骤运行时对联接进行验证。如果存在问题,例如不受支持的配置、环路、重复的别名、未设置源 / 常量 / 表达式中任何一项(或设置了多项)的输出列,或引用了已不存在的列,则该选项卡会出现带计数的 ⚠ 标记,设计器会标出有问题的表或联接,保存也会被拒绝并给出原因。如果存在未解决的问题而保存,会切换到包含第一个问题的选项卡;跳转到问题可按需执行同样的操作。

保存时,PlaidCloud 还会按步骤实际运行的方式,依据联接自身的输入按别名(alias.column)检查每个输出列的表达式,并检查联接后筛选器。损坏的表达式会在其输出列上报告,损坏的联接后筛选器会在筛选器上报告。如果联接设置了同时带入运行时指定名称的列且未进行汇总,则保存时会跳过表达式检查,因为列是在运行时添加的;这些表达式会在步骤运行时检查。各源筛选器同样在步骤运行时检查。

多表联接的运行方式与其他步骤相同。它在一次操作中执行所有联接,并将映射后的列写入目标表。