您可以通过以下示例来帮助我理解这一点。
按cust_id,item_id分组。
在排序输入和未排序输入的两种情况下,哪些记录将处理到缓存(索引/数据)?如果高速缓存内存用完了会怎样?它在内部使用哪个逻辑进行聚合计算?
我不了解内部算法,但是在未排序模式下,Aggregator将所有行存储在缓存中并等待最后一行是正常的,因为它可能是根据Aggregator规则! Aggregator永远不会抱怨传入行的顺序。使用缓存时,它将首先将行存储在内存中,然后当分配的内存已满时,它将把缓存推送到磁盘。如果它用完了磁盘空间,则会话将失败(并且可能由于该磁盘已满而导致其他会话失败)。您将必须手动清理这些文件。
在排序模式下,不存在这样的问题:行进入可分组的组,并且一旦收到组中的所有行,聚集的行就会消失,当键值之一发生更改时会检测到该行。如果行的顺序不正确,聚合器将进行投诉并停止。但是,它将问题向上推到排序部分,可能是Sorter,它本身可能会使用大量缓存,或者是SQL查询中带有ORDER BY
子句的数据库,它可能占用数据库上的资源。侧面。
还请注意,SQL ORDER BY
可能会使用与Informatica不同的语言环境。