Informatica 中的聚合器转换与示例

⚡ 智能摘要

Informatica 中的聚合转换是一个活动对象,它对一组行执行求和、平均值和计数等计算,并将这些行保存在聚合缓存中,直到每个组完成。

  • 🧮 分组计算: 按端口分组定义分组,集成服务为每个唯一组合返回一行。
  • 💾 两个缓存点: 分组值保存在索引缓存中,而行数据保存在数据缓存中。
  • 🧪 示例: 按 DEPTNO 分组的表达式 sum(SAL) 将部门总计加载到 SUM_SAL_DEPTWISE 中。
  • 🔀 已排序的输入: 按端口分组预排序可以让集成服务提前释放每个组,并缓存更少的数据。
  • 📈 增量运行: 增量聚合会重用历史缓存,因此只会计算新的源行。
  • 🚫 嵌套次数限制: 单个转换可以包含单层函数或嵌套函数,但不能同时包含两者。

Informatica 中的聚合器转换

什么是聚合器转换?

聚合器转换是一种主动转换,它执行聚合计算,例如求和、平均值和计数。

例如,如果您想按部门计算所有员工的工资总和,可以使用聚合器转换。

聚合操作是在一组行上执行的,因此需要一个临时占位符来存储所有这些记录并执行计算。

为此,需要使用聚合器缓存。聚合器缓存是分配给聚合器转换以执行此类操作的临时主内存,它分为两部分:索引缓存存储组值,而数据缓存存储要聚合的行数据。

该转换处于活动状态,因为它会改变管道中的行数。数千条员工记录可以输入管道,但每个部门只有一行记录输出。

如何在 Informatica 中使用聚合转换

在此示例中,我们将按部门计算工资总额。为此,我们需要一个新列来存储此总额。因此,首先,我们将准备一个新列。

步骤1) 使用以下脚本创建一个新的数据库目标表,例如“sum_sal_deptwise”。您将在以下位置看到新创建的数据库目标表: Target下一步将文件保存到 s 文件夹中。

下载上述 Create_table_sal_deptwise.txt 文件

步骤2) 创建一个新的 地图ping “m_sum_sal_deptwise”。

为了创建新地图ping我们需要 Map 中的源表 (EMP) 和目标表 (sum_sal_deptwise)。ping 设计师,所以我们需要

  1. 将目标表“sum_sal_deptwise”导入到映射中ping.
  2. 导入源表“emp”。

这两个定义现在都显示在画布上,如下所示。

地图ping 设计器包含 EMP 源、SQ_EMP 和导入的 SUM_SAL_DEPTWISE 目标

步骤3) 在地图上ping,

  1. 来自 源限定符删除 empno、ename、job、mgr、hiredate 和 comm 列,只保留 deptno 和 sal 列。
  2. 使用工具箱菜单创建新的聚合器转换,如图所示。单击聚合器图标后,将创建一个新的聚合器转换。

新的 AGGTRANS 对象出现在修剪后的源限定符旁边。

工具栏上的聚合器图标会在修剪后的 SQ_EMP 旁边创建 AGGTRANS。

步骤4) 将源限定符 (SQ_EMP) 中的 SAL 和 DEPTNO 列拖放到聚合转换中。现在,这两个端口已连接到 AGGTRANS。

将 SAL 和 DEPTNO 端口从 SQ_EMP 拖入 AGGTRANS 聚合器转换

步骤5) Double单击聚合器转换以打开其属性,然后

  1. 在转换中添加新端口
  2. 将端口重命名为 SUM_SAL
  3. 将此新端口的数据类型更改为双精度
  4. 选中输出端口复选框,将此端口设为输出端口。
  5. 点击表达式选项

“端口”选项卡现在列出了 SAL、DEPTNO 和新的 SUM_SAL 输出端口。

AGGTRANS 的“端口”选项卡,其中新的 SUM_SAL 输出端口设置为双精度数据类型

步骤6) 在表达式编辑器窗口中

  1. 添加表达式 sum(SAL);这个表达式需要你自己编写。
  2. 选择“确定”按钮,这将重新打开“编辑变换”窗口。

表达式编辑器显示分配给 SUM_SAL 的聚合表达式。

用于 SUM_SAL 端口的表达式编辑器,该端口保存聚合表达式 sum(SAL)

步骤7) 在“编辑转换”窗口中,选中“分组依据”选项(选中“部门编号”列旁边的复选框),然后单击“确定”。选中“分组依据”复选框后,我们将指示 Informatica 按部门编号对薪资进行分组。

在“端口”选项卡中,选中“分组依据”复选框,并选择 DEPTNO 端口。

步骤8) 将聚合转换中的 deptno 和 sum_sal 列链接到目标表。ping 从源到目标的传输就完成了。

DEPTNO 和 SUM_SAL 从 AGGTRANS 链接到 SUM_SAL_DEPTWISE 目标定义

现在保存地图ping 创建新文件后执行它 会议 这张地图ping目标表将包含按部门划分的薪资总和。这样,我们就可以使用聚合转换来计算汇总结果。

聚合器转换中的按端口分组

上述步骤将单个端口标记为“分组依据”,从而将公司整体总计转换为每个部门的总计。任何输入端口、输入/输出端口、输出端口或可变端口都可以用相同的方式进行标记。

结果集遵循以下三条规则:

  • 每组一行。 当值被分组时,集成服务会为分组端口的每个唯一组合生成一行。
  • 没有分组依据,只有一行。 如果没有标记端口,则将整个输入视为一个整体,并为所有输入行返回一行。
  • 最后一排获胜。 除了汇总结果之外,集成服务通常会传递组中接收到的最后一行,除非像 FIRST 这样的函数指定了不同的行。

如果标记了多个港口,则港口顺序决定分组。ping 顺序,而顺序会改变结果。ping 按部门编号 (DEPTNO) 和工作 (JOB) 划分与组划分不同ping 按 JOB 和 DEPTNO 排序,因为第二列的值不一定是唯一的。

聚合变换属性

“编辑转换”窗口的“属性”选项卡包含决定缓存位置和缓存使用量的设置。下表列出了这些设置。

设置 它控制什么
缓存目录 集成服务会在本地目录中创建索引和数据缓存文件。默认值为工作流管理器中设置的 $PMCacheDir 进程变量。
Tracing 级别 本次转换写入会话日志的详细程度。
已排序输入 声明传入数据已按端口分组排序。仅当映射表满足条件时才选择此项。ping 确实能提供排序后的数据。
聚合器数据缓存大小 数据缓存的大小。默认值为 2,000,000 字节,“自动”选项允许集成服务自动调整其大小。
聚合索引缓存大小 索引缓存的大小。默认值为 1,000,000 字节,“自动”选项允许集成服务自动调整其大小。
转型范围 将逻辑应用于每个事务,或应用于所有传入数据。“全部输入”会忽略传入事务的边界。

启用增量聚合后,集成服务会在每次运行时写入缓存文件的备份,因此缓存目录必须保存两组文件而不是一组文件。

聚合表达式规则和性能技巧

聚合表达式可以将聚合函数与条件子句和非聚合函数组合在一起,从而可以在同一个端口内进行条件求和与计数。有两个规则限制了可以编写的内容。

  • 一层嵌套结构。 一个聚合函数只能嵌套在另一个聚合函数中,并且首先计算内部表达式。
  • 没有混合。 转换可以包含单层函数或嵌套函数,但不能同时包含两者。如果同时包含两者,设计器会标记映射。ping 无效,因此将逻辑拆分到两个聚合器转换中。

在调音方面,三个设置就足以完成大部分工作:

  • 输入已排序。 当数据行按端口分组排序后到达时,每个组在其最后一行到达后即可释放,因此缓存的数据量更少,会话运行速度更快。排序后的输入不能与增量聚合结合使用。
  • 增量聚合。 新的源行会通过映射传递。ping 并且结合历史缓存而不是重新计算历史记录,这适合每晚加载到运行总数上。
  • 尽早筛选。 永远不会对总数产生贡献的行应该在聚合器之前删除,可以在源限定符查询中或在聚合器中执行此操作。 滤波器变换因为每一行数据到达聚合器都会消耗缓存内存。这是标准检查之一。 性能调优.

常见问题

该家族涵盖 AVGCOUNT、FIRST、LAST、MAX、MEDIAN、MIN、PERCENTILE、STDDEV、SUM 和 VARIANCE。每个函数都返回所选端口中非空值的汇总值。

整个输入被视为一个整体,因此所有输入行都返回一行。该行包含聚合结果以及转换接收到的最后一行数据。

索引缓存保存分组值,即标记为“分组依据”的端口的值。数据缓存保存计算中使用的行数据。两者的溢出都会写入缓存文件。

它只将新的源数据通过地图传递。ping 并将其与先前运行的历史缓存相结合,因此总数会更新而不是重新构建。它不能与排序输入选项同时使用。

默认情况下,集成服务会将空值视为 NULL 并跳过,因此求和运算会忽略空薪资值。也可以配置该服务,使其在聚合函数中将空值视为零。

将文件写入由“缓存目录”设置指定的目录,该目录默认为工作流管理器中配置的 $PMCacheDir 进程变量。请确保该目录存在且有足够的可用磁盘空间。

AI助手分析源数据和工作负载历史记录,以建议总数应归入哪个组。ping 关键信息至关重要,它决定了数据库中哪些计算成本更低。基于机器学习的顾问会对选项进行排序,最后由工程师进行审核。

Copilot 可以快速生成表达式及其相关的 SQL 代码,从而节省重复端口操作的时间。由于它无法查看缓存大小或端口顺序,因此请在保存前在表达式编辑器中验证每个建议。

总结一下这篇文章: