Skip to content

Commit

Permalink
Update blog
Browse files Browse the repository at this point in the history
  • Loading branch information
lewiszlw committed Sep 8, 2024
1 parent 7e96b5d commit 154fd93
Showing 1 changed file with 2 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ DataFusion 支持多种聚合方案,在不同情况下会选择最优方案。
2. 执行表达式求值和中间聚合计算,在内存中维护 group 值到中间聚合结果 `(a, b) -> (count(c), sum(c))` 的哈希表
3. 如果输入已按照 group keys 排序,则利用排序特性,提前输出部分已聚合完毕 group 的中间聚合结果到第二阶段(可以清空这部分内存)
4. 如果发现内存不足,则提前输出(early emit)内存中所有的已计算的中间聚合结果到第二阶段,清空内存中的哈希表
5. 如果发现是高基数聚合,则直接跳过聚合计算(不维护哈希表),将每行输入转换为中间聚合结果表达形式,输出到第二阶段
5. 如果发现是高基数聚合,则跳过聚合计算(不维护哈希表),将每行输入直接转换为中间聚合结果表达形式,输出到第二阶段

### 第二阶段(FinalPartitioned)

Expand All @@ -57,7 +57,7 @@ DataFusion 支持多种聚合方案,在不同情况下会选择最优方案。
### 内存中的哈希表
![](./datafusion-aggregation-hashtable.drawio.png)

以上在逻辑上形成一个哈希表,group 索引、group 值和 `Accumulator` 一一对应,但物理上并非直接使用哈希表存储 group 到聚合状态的映射,实际上哈希表维护的是 group 值到 group 索引的映射,哈希表负责分配 group 索引,而另外有一个 `Accumulator组` 的数据结构来维护每个 group 的聚合状态,每个 group 索引会对应其中一个 Accumulator。
以上在逻辑上形成一个哈希表,group 索引、group 值和 `Accumulator` 一一对应,但物理上并非直接使用哈希表存储 group 到聚合状态的映射,实际上哈希表维护的是 group 值到 group 索引的映射,哈希表负责分配 group 索引,而另外有一个 `Accumulator组` 的数据结构通过类似 Vec 的结构存储每个 group 的聚合状态,每个 group 索引会对应其中一个 Accumulator。

在接收一批数据时,先由哈希表来计算这批数据每行对应的 group 索引(可能是已存在的,也可能会分配一个新的),然后将这批数据和每行对应的 group 索引发送给 `Accumulator组` 来进行聚合状态更新。

Expand Down

0 comments on commit 154fd93

Please sign in to comment.