Informatica 中的联接器转换与示例

⚡ 智能摘要

Informatica 中的 Joiner 转换是一个活动的、连接的对象,它根据匹配条件连接两个异构源,并将主管道缓存在内存中,同时详细管道流经它。

  • 🧩 主次之分: 两个输入管道为转换提供数据,“端口”选项卡决定哪个管道作为主管道。
  • 💾 主目录已缓存: 主管道始终构建在索引和数据缓存中,因此较小的源也应该在那里。
  • 🔗 四种连接类型: Normal、Master Outer、Detail Outer 和 Full Outer 决定哪些不匹配的行在连接后保留下来。
  • 🧪 示例: EMP 和 DEPT 通过 deptno 进行普通连接,并将数据加载到 EMP_DEPTNAME 中。
  • ️ 只追求平等: 连接条件使用等于运算符比较端口,并且两个端口必须共享一种数据类型。
  • ⚡ 已排序的输入: 对两个管道的条件端口进行预排序,可以减少会话期间的磁盘输入和输出。

Informatica 中的 Joiner 转换

什么是 Joiner Transformation?

连接转换是一种主动式连接转换,它允许您在 Informatica 中创建连接。使用连接转换创建的连接类似于数据库中的连接。连接转换的优势在于,它可以为异构系统(不同的数据库)创建连接。

在连接转换中,我们将使用两个数据源进行连接。这两个数据源被称为

  • 主源
  • 详细来源

在连接器转换的属性中,您可以选择哪个数据源可以作为主数据源,哪个数据源可以作为明细数据源。

执行过程中,主数据源会被缓存到内存中以备连接之用。因此,建议选择记录数较少的数据源作为主数据源。主管道保存在两个缓存中:一个索引缓存用于存储连接条件中使用的值,另一个数据缓存用于存储其余的行数据。

连接器转换中的连接类型

“属性”选项卡上的“连接类型”属性决定了如何处理找不到匹配项的行。可以使用“连接器”转换创建以下连接。

  1. 主外连接 – 在主外连接中,连接会返回详细信息源中的所有记录,并且仅返回主源中匹配的行。
  2. 详细外连接 – 在明细外连接中,仅从明细源返回匹配的行,并返回主源中的所有行。
  3. 全外连接 – 在完全外连接中,将返回来自两个源的所有记录。
  4. 普通连接 – 在普通连接中,只会从两个数据源返回匹配的行。

主外连接和详细外连接等效于左外连接 SQL每种类型都保留一个数据源中的每一行数据,而只保留另一个数据源中匹配的行。下表列出了这四种类型及其对应的 SQL 语句。

联接类型 主目录保留的行 保留详细信息的行 SQL 等效项
普通连接 仅匹配 仅匹配 内部联接
主外连接 仅匹配 所有行 详细信息源的左外连接
详细外连接 所有行 仅匹配 主源的左外连接
全外连接 所有行 所有行 全外连接

连接类型是一个属性,而不是结构选择,因此以后可以更改它而无需重建映射。ping 或重新连接任何端口。

如何在 Informatica 中使用连接器转换

在本例中,我们将使用连接器转换连接 emp 表和 dept 表。请在 Map 中完成以下八个步骤。ping 设计师。

步骤1) 使用以下脚本在数据库中创建一个新的目标表 EMP_DEPTNAME,并将该表导入到 Informatica 目标中。

下载上述 emp_deptname.sql 文件

步骤2) 创建一个新的 地图ping 导入源表“EMP”和“DEPT”以及我们在上一步创建的目标表。这三个定义现在都显示在画布上,如下图所示。

地图ping 设计画布包含 EMP 和 DEPT 源以及 EMP_DEPTNAME 目标定义

步骤3) 从“转换”菜单中,选择“创建”选项。然后在如下所示的“创建转换”窗口中,

  1. 选择连接器转换
  2. 输入转换名称“jnr_emp_dept”
  3. 选择创建选项

创建“转换”窗口,选择“连接器”,并输入名称 jnr_emp_dept。

步骤4) 将所有列从 来源限定符 连接到 Joiner 转换。如屏幕截图所示,两条管道现在都已链接到 jnr_emp_dept。

将两个源限定符中的列拖入 jnr_emp_dept 连接转换中

步骤5) Double 单击“连接器”变换,然后在“编辑变换”窗口中单击“连接器”变换。

  1. 选择条件选项卡
  2. 点击添加新条件图标
  3. 在主列表和明细列表中选择 deptno

“条件”选项卡现在包含对 deptno 的单个连接条件。

在“连接转换”的“条件”选项卡中,主列和明细列中都选择了部门编号。

步骤6) 然后在同一个窗口中

  1. 选择属性选项卡
  2. 选择普通连接作为连接类型
  3. 选择“确定”按钮

接下来显示的是设置了连接类型的“属性”选项卡。

在“连接器”转换的“属性”选项卡中,将连接类型设置为“普通连接”。

为了优化性能,我们将主数据源分配给记录数较少的源表管道。要执行此操作:

步骤7) Double 单击“连接器”变换以打开“编辑变换”窗口,然后

  1. 选择端口选项卡
  2. 选择要设为主列的特定来源的任意列
  3. 选择“确定”

“端口”选项卡会将选定的管道标记为主管道,如下所示。

Joiner 转换的“端口”选项卡,其中主标志针对一个源管道进行了设置。

步骤8) 将连接器转换中的相关列链接到目标表。ping 现在通过连接从两个源运行到 EMP_DEPTNAME。

将 jnr_emp_dept 表的列链接到 EMP_DEPTNAME 目标表。

现在保存地图ping 创建完成后执行它 会议 和 工作流程 为此,将使用 Informatica Joiner 创建连接,并从两个表中获取相关详细信息。

连接器转换属性

“属性”选项卡包含的信息不仅限于连接类型。以下设置控制连接使用的内存量以及缓存文件的写入位置。

设置 它控制什么
联接类型 普通、主外层、详细外层或完整外层。决定保留哪些不匹配的行。
加入条件 将主从端口对列表与等于运算符进行比较。多个条件通过“与”运算符组合使用。
已排序输入 声明两个管道已按条件端口排序到达,这使得集成服务能够最大限度地减少磁盘输入和输出。
主排序 主源数据的排序顺序,与已排序的输入一起使用。
缓存目录 索引和数据缓存文件所在的目录。默认值为 $PMCacheDir 进程变量。
连接器数据缓存大小 用于存储主行数据的数据缓存大小。默认值为“自动”,允许集成服务自动调整其大小。
连接索引缓存大小 用于存储主条件值的索引缓存大小。默认值为“自动”。
转型范围 将连接应用于每个事务、所有传入数据或行级范围。

排序输入是首选设置。当两个管道都按条件端口排序到达时,集成服务无需在匹配开始前保存整个主源,这与在以下情况下应用的原理相同: 性能调优 其他缓存转换。

连接器转换规则和限制

有些限制只有在地图显示时才会出现。ping 已经过验证,因此在端口连接之前了解它们成本更低。

  • 唯平等。 连接条件使用等于运算符比较端口。大于、小于或不等于等比较运算符在条件中不被接受。
  • 数据类型匹配。 条件中的两个端口必须具有相同的数据类型。设计器会对此进行验证,因此必须先转换不匹配的列,通常是在表达式转换中完成。
  • 上游没有更新策略。 当任一输入管道包含更新策略转换时,不能使用连接器转换。
  • 无序列 Generator 就在它之前。 连接序列 Generator 不支持在连接器上游立即进行转换。
  • 缓存无法关闭。 主管道始终会被缓存,这就是为什么较小的源应该放在主端,以及为什么缓存大小在大连接时很重要。

连接三个数据源需要两个链接在一起的连接器转换,因为每个转换都只接受一个主管道和一个从管道。如果第二个数据源是一个逐行读取的小型参考表,则需要进行以下操作: 查找转换 通常来说,这种设计比较简单。

常见问题

二、每个连接器接受一个主管道和一个从管道,因此连接三个源意味着将其中两个连接起来:第一个源的输出成为第二个源的输入管道。一般来说,n 个源需要 n-1 个连接器。

当两个表位于同一个关系数据库中时,源限定符会将连接操作下推到数据库,从而完全避免缓存。仅当两个数据源是异构的或已在不同的管道中时,才应使用连接符。

索引缓存存储连接条件中指定的主端口值,数据缓存存储连接返回的剩余主行数据。两者都仅基于主管道构建,绝不基于明细管道。

不。任何一个端口中的空值都会导致条件判断失败,这与 SQL 中的处理方式完全相同,因此这些行将被视为不匹配。当需要连接时,应在上游将空值替换为默认值。

是的。将源定义添加到映射中。ping 重复两次,这样就形成了两条独立的管道,然后分别将一条管道的数据馈送到主管道,另一条馈送到明细管道。这是将经理列解析回员工姓名的常用方法。

是的,这种异构情况正是转换存在的主要原因。平面文件管道和关系管道会像连接两个数据库表一样,基于匹配的端口进行连接,因为连接操作发生在集成服务内部。

AI 助手会对两个数据源进行分析,以推荐候选连接键,估算行数以便选择较小的数据源作为主数据源,并标记出数据倾斜或空值过多的列,避免结果集过大。基于机器学习的顾问还会对缓存大小选项进行排序。

Copilot 可以快速生成等效的 SQL 语句并进行数据类型转换,从而缩短端口准备工作。它无法查看您的缓存大小或行数,因此请务必对照映射表验证每个建议。ping 在保存之前。

总结一下这篇文章: