Presto 聚合中groupBy分组的实现

news2025/7/15 13:14:14

一.前言

         本文只要探索在Presto中groupby是怎么实现的。在Preso中,groupby的分组主要通过对数据Hash的数值比较进行分组,其中有2种情况,一直是仅有一个groupby字段而且字段是Bigint类型的,此场景下会使用BigintGroupByHash来实现分组,其他的情况则使用MultiChannelGroupByHash实现多列分组。

二. BigintGroupByHash分组的实现  

     在理解BigintGroupByHash实现分组过程前,需要先了解BigintGroupByHash中几个全部变量的意义:

    groupId : 一个累增的数,在groupby字段中,每遇到一个hash后找不到的值时候,此字段+1,起id作用

    hashPosition : goupby字段的value的hash值,用来充当在数组中的位置作用

    values : 一个key-value对,key值为groupby字段的value值的HashPisition,value为groupby字段的value

    groupIds : 一个key-value对,key值为HashPosition,value值为groupId         

    valuesByGroupId   :一个数组,在groupId的下标处放置 value

    GroupCount:groupby字段groupby后的数量

    了解上边字段的意义后,如下通过Hash实现分组的流程则比较容易于理解:

    

三. MultiChannelGroupByHash分组的实现            

       MultiChannelGroupByHash多列分组的流程和BigintGroupByHash差不多,如下为其和单列分组不同的地方:

        MultiChannelGroupByHash的hashPosition的数据是经过二级Hash后的数据,第一次Hash是将多列groupby列的数据每列都进行Hash按照一定的公式求和得到,然后再对一级Hash后的结果进行二级Hash计算后得到。

        MultiChannelGroupByHash的address计算和BigintGroupByHash不一样,多列分组的address一个pageIndex << 32 | pageOffset计算得到的。

       多列分组因为涉及到多列数据,因此不使用values存储groupId与values的关系,而是采用了Page(currentPageBuilder)的方式存储。还原数据的时候会从Page中根据address拿到postion然后读出数据进行还原和聚合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring boot使用ProGuard实现代码混淆

目录参考一、 ProGuard简介二、混淆配置要点三、快速开始方案一 配置文件新增proguard.cfg配置插件打包方案二 pom中定义配置参考 Spring boot使用ProGuard实现代码混淆 SpringBoot 玩一玩代码混淆&#xff0c;防止反编译代码泄露 代码混淆常见于安卓的apk安装文件, 服务端的…

11月千言最新评测推荐,覆盖中文对话、视频语义理解、可信AI等前沿方向

千言数据集是百度联合中国计算机学会、中国中文信息学会共同发起的数据共建计划&#xff0c;千言针对每个自然语言处理问题&#xff0c;均收集和整理多个开源数据集&#xff0c;进行统一的处理并提供统一的测评方式&#xff0c;帮助加速模型的研发。截至目前&#xff0c;千言评…

[附源码]java毕业设计上海景宏不锈钢厨房设备报修系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

云原生系列 【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

数据分析 | Pandas 200道练习题 进阶篇(3)

文章目录DA21 大佬用户成就值比例DA22 牛客网用户最高的正确率DA23 统计牛客网用户的名字长度DA24 去掉信息不全的用户DA25 修补缺失的用户数据DA26 解决牛客网用户重复的数据总结&#xff1a;❤️ 作者简介&#xff1a;大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生…

生信步骤|MAFFT结合HMMER进行多序列比对和基于隐马模型的基因搜索

蛋白质都是由相似的小型结构域组成的。如果我们有若干个已知的蛋白序列&#xff0c;那我们就可以根据这些蛋白序列比较其含有的保守域&#xff0c;寻找在蛋白数据库中上是否也有一样保守域的蛋白。而后根据统计学模型&#xff0c;将显著性较高的蛋白序列预测为同一类基因家族蛋…

Oracle SQL执行计划操作(5)——分区相关操作

5. 分区相关操作 该类操作与SQL语句执行计划中分区表操作相关。根据不同的具体SQL语句及其他相关因素&#xff0c;如下各操作可能会出现于相关SQL语句的执行计划。 1&#xff09;PARTITION RANGE ALL 对范围分区&#xff08;RANGE PARTITION&#xff09;表的所有分区进行子…

内存泄漏检测C版小工具

一 内存泄漏简介 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄漏分类&#xff1a; 1.堆内存泄漏&#xff1…

基于LMI的非线性混沌系统滑模控制

目录 前言 1.非线性系统 2.控制器设计 3.仿真分析 3.1仿真混沌系统 3.2 LMI求解反馈阵F 3.3仿真模型 ​​​​3.4仿真结果 3.5注意事项 前言 前面我们介绍了很多种滑模面设计&#xff0c;以及介绍了几篇结合LMI的滑模控制&#xff0c;其核心思想可以看作是用LMI去控制…

【python与数据分析】Numpy数值计算基础——补充

目录 二、矩阵生成与常用操作 1.生成矩阵 2.矩阵转置 3.查看矩阵特征 4.矩阵乘法 5.计算相关系数矩阵 6.计算方差、协方差、标准差 7.行列扩展 8.常用变量 9.矩阵在不同维度上的计算 10.应用 &#xff08;1&#xff09;使用蒙特卡罗方法估计圆周率的值 &#xff0…

【Transformers】第 10 章 :从零开始训练 Transformer

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

JS实现复制富文本到剪贴板/粘贴板的最佳实践

背景 最近有想实现一个功能&#xff0c;通过点击一个button按钮&#xff0c;来复制网页内容(含html)来实现复制后粘贴到邮件或者word具有富文本的效果。在网站翻了一些资料&#xff0c;要么就是方法已经被弃用&#xff0c;要么就是兼容性特别差&#xff0c;要么就是不能复制成…

HTML做一个简单漂亮的旅游网页(纯html代码)重庆旅游 7页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面…

HTML+CSS简单漫画网页设计成品--(红猪(9页)带注释)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 网页设计作业 | 动漫网页设计 | 动漫网页设计成品 | 动漫网页设计成品模板 | 简单漫画网页设计成品 | HTML期末大学生网页设计作业&#xff0c;Web大学…

Linux自建RustDesk中继服务器

向日葵、ToDesk&#xff0c;想控制手机。【收费】、【收费】、【收费】、【收费】 作为编程人员&#xff0c;这钱我有点不想花。手里有常开机电脑&#xff0c;于是我萌生想法&#xff0c;使用frp做代理&#xff0c;用adb命令将手机的屏幕截图后展示在网页上&#xff0c;按秒刷…

布谷鸟搜索算法的改进及其在优化问题中的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

GIS重投影的方法

ArcGIS修改地理坐标系/投影坐标系 把坐标系修改为和已知数据坐标系相同&#xff0c;使之能正常显示数据 加载数据&#xff0c;若加载数据的过程中&#xff0c;出现以下提示&#xff0c;则说明坐标系不一致&#xff0c;建议转换。 首先给数据框设置一个坐标系&#xff0c;该坐…

STC51单片机31——红外遥控收发代码

发射部分代码&#xff1a; #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit P20P2^0; //发射引脚 sbit P10P1^0; sbit P11P1^1; uchar k; void delay() { uchar j,i; for(i0;i<255l;i) for(j0;j<255;j) ; } void…

明道云在艾默生数字化实践的新进展

本文来自艾默生电气IT经理丁元才&#xff0c;在明道云2022年秋季伙伴大会活动演讲&#xff0c;经校对编辑后整理为演讲精华。 大家早上好&#xff0c;今天我讲的主题叫《明道云在艾默生数字化实践的新进展》。这个“新进展”刚好契合明道云今天的大会主题——新力量、新希望。…

完美收官 | IOTE第十八届国际物联网展精彩落幕,美格智能参展回顾

11月15日-17日&#xff0c;由深圳市物联网产业协会主办&#xff0c;深圳市物联传媒有限公司、深圳市易信物联网络有限公司承办的第十八届IOTE国际物联网博览会以“数智芯生&#xff0c;云端共创”为主题&#xff0c;在深圳国际会展中心&#xff08;宝安&#xff09;17号馆盛大召…