你可以通过下面的例子来帮助我理解这一点吗?

Group by cust_id,item_id。
在排序输入和未排序输入两种情况下,将处理哪些记录到缓存(索引/数据)?如果缓存耗尽了会发生什么情况?它使用哪种算法在内部执行聚合计算?
发布于 2020-04-20 15:38:51
我不知道内部算法,但在未排序模式下,聚合器将所有行存储在缓存中并等待最后一行是正常的,因为根据聚合器规则,它可能是必须返回的第一行!聚合器永远不会抱怨传入行的顺序。当使用缓存时,它将首先在内存中存储行,然后当分配的内存已满时,它会将缓存推送到磁盘。如果它用完了磁盘空间,会话将失败(可能还会因为磁盘已满而导致其他会话失败)。您必须手动清理这些文件。
在排序模式中,没有这样的问题:行以组的形式进入,准备进行聚合,一旦接收到组中的所有行,聚合的行将立即发出,这是在键的一个值发生更改时检测到的。如果行未按预期顺序排列,聚合器将发出警告并停止。然而,它将问题向上推到了排序部分,这可能是一个Sorter,它本身可以使用大量缓存,也可以是在查询中包含ORDER BY子句的数据库,它可以占用数据库端的资源。
还要注意,SQL ORDER BY可能使用与Informatica不同的区域设置。
https://stackoverflow.com/questions/61305590
复制相似问题