具有排序输入和没有排序输入的聚合器之间的区别
Difference between aggregator with sorted input and without sorted input
我的问题主要是理论上的。当我们在 Informatica 工作流中使用聚合器并且不 select 排序输入 属性 时,我假设聚合器转换根据端口组对数据进行排序,然后进行聚合。
为了提高此操作的性能,通常建议打开已排序的输入 属性,并将排序器转换的输出(使用键 = 按端口分组)传递给聚合器。
我的问题是:从地图的角度来看,两种情况下的操作数量相似:对数据进行排序,然后对其进行聚合。那么为什么排序器+聚合器(排序输入)比单个聚合器(未排序输入)运行得快得多?
聚合器转换在聚合前对数据进行排序是不正确。它读取每一行并存储每个组的数据,直到读取整个源,因为它无法确定每个组的结束位置。只有读取所有行后,它才能执行聚合。因此,它使用更多的数据缓存。
当您使用排序输入选项时,集成服务假定数据按组排序,并在读取组的所有行后立即执行聚合计算。
使用多个分区配置会话时,使用排序输入的性能改进更为显着。
此外,当聚合器中有嵌套聚合函数或会话使用增量聚合时,不能使用排序输入。也许,这就是聚合器不自动对数据进行排序的原因。
我的问题主要是理论上的。当我们在 Informatica 工作流中使用聚合器并且不 select 排序输入 属性 时,我假设聚合器转换根据端口组对数据进行排序,然后进行聚合。 为了提高此操作的性能,通常建议打开已排序的输入 属性,并将排序器转换的输出(使用键 = 按端口分组)传递给聚合器。 我的问题是:从地图的角度来看,两种情况下的操作数量相似:对数据进行排序,然后对其进行聚合。那么为什么排序器+聚合器(排序输入)比单个聚合器(未排序输入)运行得快得多?
聚合器转换在聚合前对数据进行排序是不正确。它读取每一行并存储每个组的数据,直到读取整个源,因为它无法确定每个组的结束位置。只有读取所有行后,它才能执行聚合。因此,它使用更多的数据缓存。
当您使用排序输入选项时,集成服务假定数据按组排序,并在读取组的所有行后立即执行聚合计算。
使用多个分区配置会话时,使用排序输入的性能改进更为显着。
此外,当聚合器中有嵌套聚合函数或会话使用增量聚合时,不能使用排序输入。也许,这就是聚合器不自动对数据进行排序的原因。