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月前
|
存储 SQL 分布式计算
分布式图计算如何实现?带你一窥图计算执行计划
分布式图计算如何实现?带你一窥图计算执行计划
分布式图计算如何实现?带你一窥图计算执行计划
|
10月前
|
关系型数据库
GreenPlum和openGauss进行简单聚合时对扫描列的区别
GreenPlum和openGauss进行简单聚合时对扫描列的区别
85 0
|
12月前
|
缓存 自然语言处理 数据挖掘
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
78 0
|
SQL 存储 运维
PolarDB-X性能优化之多表连接时table group及广播表的使用
通过实验演示多表连接时,PolarDB-X使用table group和广播表优化sql执行
238 0
|
Java
Elasticsearch Bucket聚合(桶聚合) 第一篇(常用桶聚合一览)
本篇将开始介绍Elasticsearch Bucket聚合(桶聚合)。 Buket Aggregations(桶聚合)不像metrics Aggregations(度量聚合)那样计算字段上的度量,而是创建文档桶,每个文件桶有效地定义一个文档集。
2946 0
|
关系型数据库 PostgreSQL 移动开发
PostgreSQL 9.6 聚合运算180倍性能提升如何做到? 聚合代码优化OP复用浅析
PostgreSQL 9.6 内核优化之 聚合代码优化OP复用浅析 作者 digoal 日期 2016-10-08 标签 PostgreSQL , 9.6 , 内核优化 , 聚合代码优化 , OP复用 背景 聚合操作指将分组的数据聚合为一个结果输出。 聚合通常用在统
5291 0
|
SQL 分布式计算 并行计算
PostgreSQL 并行计算解说 之9 - parallel 自定义并行聚合
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan parallel index scan
556 0
|
SQL 分布式计算 并行计算
PostgreSQL 并行计算解说 之19 - parallel hash join
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan
941 0
|
算法 中间件 关系型数据库
数据库中间件分片算法之hash
Hash分区算法是一种比较典型而且常用的算法。要使用HASH分区算法需要在rule.xml中定义两个部分。