使用示例在 Informatica 中进行排名转换

⚡ 智能摘要

Informatica 中的排名转换是一个活动的、连接的对象,它只保留每个组的前 N ​​行或后 N 行,并通过其自动 RANKINDEX 输出端口为每个幸存的行分配一个位置。

  • ???? 顶部或底部 N: Top/Bottom 属性和 Number of Ranks 属性共同决定哪些行能够通过筛选。
  • 🗂️ 按组别排名: 按分组端口会为每个组重新开始排名,因此每个部门都可以返回自己的前三名。
  • 🔢 排名端口: 只有一个端口带有 R 标志,排名就是根据该列的值计算的。
  • 📍 排名指数: 设计器会自动添加此仅输出端口,以保持每行在其组内的位置。
  • 🧪 示例: 八图ping 设计步骤将每个部门薪酬最高的三名员工加载到 EMP_TARGET 中。
  • 💾 已缓存并处于活动状态: 分组值和行数据保存在索引和数据缓存中,行计数会发生变化。

Informatica 中的等级转换

什么是等级转换?

排名转换是一种主动且关联的转换,它基于分组和排名对数据进行筛选。例如,如果您想获取薪资最高的十名员工记录,就可以使用排名转换来实现这种筛选。

排名转换还提供了基于分组进行排名的功能。例如,如果您想按部门获取薪资最高的十名员工,则该分组为ping 通过这种转换可以实现。

等级转换是一种主动转换,因为它会影响输出行的数量。

排名转换有一个输出端口,用于为行分配排名。该端口名为 RANKINDEX,设计器会在将转换添加到数据库后立即自动创建它。 地图ping.

由于排名必须比较组内的每一行才能决定哪些行获胜,因此集成服务会缓存传入的数据。组值会进入索引缓存,其余的行数据会进入数据缓存,就像缓存数据一样。 连接器转型 拥有其主管道。

排名转换中的端口

在给出示例之前,了解“端口”选项卡上的每个端口标志的实际作用很有帮助,因为其中两个标志真正执行了此转换。

端口类型 它做什么
输入(I) 从上游转换接收一列。链接到 Rank 转换的每一列都是一个输入端口。
输出(O) 将列传递给下一个转换或目标。
变量(V) 在转换内部进行局部计算,就像在表达式转换中一样。
等级 (R) 标记用于计算排名的列。转换过程中只能有一个端口承载此标志。
通过...分组 对每个不同的值重新开始排名,因此前三名筛选器将返回每组三行,而不是总共三行。
排名指数 由设计器创建的仅输出端口。它存储每一行​​在其所属组中的排名位置,可以保持未连接状态。

排名只能在单个端口上进行,因此像“最高薪资,然后是最长服务年限”这样的要求需要上游准备打破平局的值,而不是第二个排名端口。

如何在 Informatica 中使用 Rank 转换

我们的需求是加载每个部门薪资最高的 3 名员工;我们将使用排名转换来实现这一点。请在 Map 中按照以下八个步骤操作。ping 设计师。

步骤1) 创建地图ping 源 EMP 和目标 EMP_TARGET。这两个定义现在都显示在画布上,如下图所示。

地图ping 设计器显示了 EMP 源定义和 EMP_TARGET 目标定义

步骤2) 然后在地图上ping

  1. 选择变换菜单
  2. 选择创建选项

接下来显示的是“转换”菜单,其中包含“创建”选项。

地图中打开了“变换”菜单。ping 设计师已选中“创建”选项

步骤3) 在创建转换窗口中

  1. 选择等级转换
  2. 输入转换名称“rnk_salary”
  3. 选择“创建”按钮

创建转换窗口,选择“排名”,并输入名称 rnk_salary

步骤4) Rank转换将在映射中创建。ping点击窗口中的“完成”按钮。此时,画布上会出现一个空的 rnk_salary 对象。

排名转换 rnk_salary 已创建并放置在地图上ping 帆布

步骤5) 连接所有端口 来源限定符 进行排名转换,以便每个员工列都可以用于排名。

所有源限定符端口都链接到 rnk_salary 排名转换

步骤6) Double 点击“排名转换”,即可打开“编辑转换”窗口。在此窗口中,

  1. 选择属性菜单
  2. 从顶部/底部属性中选择“顶部”选项
  3. 在排名数中输入 3

如屏幕截图所示,“属性”选项卡现在显示“排名靠前”,并有三个排名。

在“排名”转换的“属性”选项卡中,选择“最高排名”,并将排名数输入为 3。

步骤7) 再次进入“编辑变换”窗口

  1. 选择端口选项卡
  2. 选择部门编号列的分组依据选项
  3. 在薪资栏中选择职级
  4. 选择确定按钮

“端口”选项卡现在在部门编号上带有组标志,在薪资上带有 R 标志。

在“排名”转换的“端口”选项卡中,分组依据设置为部门编号,排名依据设置为薪资列。

步骤8) 将 Rank 转换的端口连接到目标表。映射ping 现在从 EMP 经由 rnk_salary 运行到 EMP_TARGET。

将 rnk_salary 排名转换后的排名端口链接到 EMP_TARGET 表

现在,保存地图ping 创建完成后执行它 会议 和 工作流程源限定符将获取所有记录,但排名转换将仅传递每个部门有三个最高薪资的记录。

秩变换属性

步骤 6 中使用的“属性”选项卡包含的设置不止示例中更改的两项。以下设置控制保留的行数、字符串比较方式以及缓存文件的写入位置。

特性 它控制什么
顶部/底部 排名列保留的是最高值还是最低值?示例中使用的是“最高”。
排名数量 每个组返回多少行?示例中使用 3,因此每个部门返回三名员工。
区分大小写的字符串比较 字符串比较在排名时是否区分字母大小写?这仅在排名端口包含文本时才重要。
缓存目录 索引和数据缓存文件所在的目录。默认值为 $PMCacheDir 进程变量。
排名数据缓存大小 用于存储行数据的数据缓存大小。默认值为“自动”,允许集成服务自动调整其大小。
排名索引缓存大小 用于存储组值的索引缓存大小。默认值为自动。
转型范围 将排名应用于每笔交易或所有传入数据。
Tracing 级别 写入会话日志的详细程度:简略、正常、详细初始化或详细数据。

对于大型数据源,缓存大小是一个值得重新审视的设置。当缓存过小时,集成服务会将页面写入磁盘,这是在测试过程中首先要检查的项目之一。 性能调优 地图ping.

排名转换与聚合转换

这两个转换都处于激活状态,都会缓存输入数据,并且都提供分组依据端口,因此很容易选错。区别在于它们的输出结果。

比较点 秩变换 聚合器转换
目的 返回每个组的顶部或底部 N 个完整行。 返回计算值,例如 SUM、 AVG每组的最大值或最小值
返回的行 每个组最多可显示指定数量的排名,且所有列均保持不变。 通常每个组一行汇总信息
新增端口 RANKINDEX,保存每一行的位置 没有
排名或聚合列 一个端口被标记为排名端口 任意数量的端口承载聚合表达式

简而言之, 聚合器转换 回答“本部门最高薪资是多少”的问题,而排名转换回答“哪些员工获得最高薪资”。当只需要根据简单条件丢弃一部分行,且不涉及排序时, 滤波器变换 是更便宜的选择,因为它完全不需要缓存。

常见问题

不,Rank 仅处于连接状态,因此它必须位于两个对象之间的数据流中。RANKINDEX 端口可以保持未连接状态,但转换本身不能像调用未连接的 Lookup 那样调用。

排名相同的行在排名索引中具有相同的值,转换过程会跳过下一个值。因此,两名并列第二的员工都显示为 2,下一行显示为 4 而不是 3。

整个数据源被视为一个整体,因此转换结果仅返回职位总数。如果设置三个职位而不指定分组端口,则返回的是公司内薪酬最高的三名员工,而不是每个部门的薪酬最高的三名员工。

是的。数字、字符串和日期/时间端口都可以标记为排序端口。对于文本,区分大小写的字符串比较属性决定字母大小写是否影响排序,因此请在会话运行前检查该属性。

无法保证。转换操作会选择保留哪些行,但并不保证它们到达目标的顺序。如果加载顺序至关重要,请在 RANKINDEX 端口上添加排序转换。

A SQL 窗口函数会标记每一行,并将过滤操作留给外部查询。Informatica 转换只需一次操作即可完成标记和过滤,并且适用于平面文件和其他没有数据库引擎的非关系型数据源。

机器学习模型会根据客户流失、欺诈或转化的可能性对记录进行评分,并将该评分作为排名列。人工智能顾问还会分析群体规模,以便根据真实数据而非猜测来选择缓存设置和排名数量。

Copilot 会起草等效的窗口函数查询或 Python 分组速度很快,这对于验证结果很有用。但它无法读取您的地图。ping因此,请将每一条建议都视为草稿,并将行数与会话日志进行比较。

总结一下这篇文章: