GreenPlum Hash聚合简析

简介: GreenPlum Hash聚合简析

GreenPlum Hash聚合简析


Hash聚合相关结构体


首先需要了解Hash表是什么结构?该Hash表在哪个结构里进行管理?如何和聚合算子的结构联系起来?

从下图可以看到:

1)Hash表位于:AggState聚合算子状态描述结构的perhash中,即hashtable

2)hash表的hash函数由perhash->hashfunctions进行描述,其实是个二维数组指针,包含每个hash列的hash函数描述。

3)Hash函数的OID来自Agg结构体的grpOperators数组。Hash探测中的比较函数的OIDeqfuncoids,通过:


BuildTupleHashTable->BuildTupleHashTableExt->ExecBuildGroupingEqual

   将eqfuncoids转换 成计算步骤tab_eq_func

4)Hash表的hash桶是TupleHashEntryData* dataKey值通过hash函数hash后与sizemask进行与操作,结果为数组下标。也就是定位到哪个hash桶。

5)Hash桶结构体中包含:MinimalTuple firstTuple,也就是每个分组的第一个值。而additionalAggStatePerGroupData结构的指针,保存每个分组的聚合计算中间值。

6)每次聚合计算时,从下层节点拿到一个tuple,然后通过hash映射到对应的hash桶。拿到对应的AggStatePerGroupData,将其赋给AggState中的hash_pergroup。将hash_pergroup带入聚合计算函数,将计算结果保存到hash_pergroup中。这样就完成了分组聚合。

640.png


实例解析


比如,一组数组:1 1  2  2  3  3进行count

1)拿到第一个1,经hash函数映射后得到data[1],该桶下的additional为开始为空,此时申请一个AggStatePerGroupData空间,并放到additional下。

2)将该AggStatePerGroupData地址给了AggStatehash_pergoup

3)hash_pergoup带入聚合计算函数中,transValueDatum转换成数值后加1

4)接着拿到第二个1,同理,得到data[1],此时他的additional已经有AggStatePerGroupData,将其付给hash_pergoup带入聚合计算函数中进行计算。计算后transValue2。也就是1的个数是2

5)同理,计算23这个两个分组。分别得到3个分组:1的个数是22的个数是23的个数是2。

目录
相关文章
|
9月前
|
存储 关系型数据库 MySQL
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
索引大战:探秘InnoDB数据库中B树和Hash索引的优劣
88 0
|
SQL 数据库管理 索引
SQL基础——聚合与排序(下)
SQL基础——聚合与排序(下)
180 0
|
SQL
SQL基础——聚合与排序(上)
SQL基础——聚合与排序(上)
84 0
|
关系型数据库
GreenPlum和openGauss进行简单聚合时对扫描列的区别
GreenPlum和openGauss进行简单聚合时对扫描列的区别
158 0
|
缓存 自然语言处理 数据挖掘
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
138 0
|
数据建模
白话Elasticsearch59-数据建模实战_ Nested Aggregation/ Reverse nested Aggregation对嵌套的博客评论数据进行聚合分析
白话Elasticsearch59-数据建模实战_ Nested Aggregation/ Reverse nested Aggregation对嵌套的博客评论数据进行聚合分析
113 0
|
自然语言处理 算法 数据挖掘
白话Elasticsearch51-深入聚合数据分析之text field聚合以及fielddata原理
白话Elasticsearch51-深入聚合数据分析之text field聚合以及fielddata原理
137 0
|
存储 关系型数据库 索引
Hash索引和B+树索引有什么区别或者说优劣势
Hash索引和B+树索引有什么区别或者说优劣势
480 0
|
SQL 存储 运维
PolarDB-X性能优化之多表连接时table group及广播表的使用
通过实验演示多表连接时,PolarDB-X使用table group和广播表优化sql执行
329 0

热门文章

最新文章