当前位置:网站首页>Presto 中 lookUp Join的实现
Presto 中 lookUp Join的实现
2022-07-30 17:51:00 【王飞活】
一. 前言
Loopup Join顾名思义就是通过查找方式实现的Join,也即右边常驻内存,左表不断去内存里边loopup 看join条件是否相等来实现join操作。在presto中,常驻内存的表称为HashBuilder表,有HashBuilderOperator算子负责构造,不断去探测的表称为probe表,在LookupJoinOperator中实现probe表对HashBuilder表的探测和数据关联。
二. HashBuilder表的构造
构造表的时候,通过HashBuilderOperator将需要常驻内存的表读到内存中:
HashBuilderOperator::addInput
updateIndex
index.addPage
channels[i].add(block); // 所有数据都在channels中
读完表后:
HashBuilderOperator::finish
finishInput
buildLookupSource
index.createLookupSourceSupplier
return lookupSourceFactory.createLookupSourceSupplier(...valueAddresses, channels...) //将HashBuilder表的数据全部都放在LookupSource,LookupSource为LookupJoinOperator提供右表的数据的读取
state = State.LOOKUP_SOURCE_BUILT //HashBuilder表已经完成构造,LookupJoinOperator将开始工作三. LookupJoinOperator的探测
LookupJoinOperator的构造函数中的LookupSourceFactory可以得到HashBuilder表的所有数据
probe表的数据通过LookupJoinOperator::addInput 不断进来, 并加工成一个probe表
当下游通过getOutput取一批数据的时候:
LookupJoinOperator::getOutput
processProbe
processProbe(lookupSourceLease.getLookupSource()) //这里用到了HashBuilder表的数据了
joinCurrentPosition
pageBuilder.appendRow(probe, lookupSource, joinPosition) //2表相同数据的碰撞
outputPage = pageBuilder.build(probe)
Block[] blocks = new Block[probeOutputChannels.length + buildOutputChannelCount]; //实现了2表join边栏推荐
- What is an ultrasonic flaw detector used for?
- LayaBox---TypeScript---变量声明
- 【HMS core】【FAQ】Account Kit、MDM能力、push Kit典型问题合集6
- Test the.net text to Speech module System. Researched
- C陷阱与缺陷 第7章 可移植性缺陷 7.3 整数的大小
- 数据库系统原理与应用教程(064)—— MySQL 练习题:操作题 51-61(八):查询条件的构造、通配符
- 华为无线设备配置Mesh业务
- 第十六期八股文巴拉巴拉说(MQ篇)
- 2022年杭电多校第2场 1001 Static Query on Tree(树链剖分+哈希表差分
- 17.机器学习系统的设计
猜你喜欢

linux 安装mysql8.0 超详细教程(实战多次)

【HMS core】【ML Kit】机器学习服务常见问题FAQ(二)

图解LeetCode——11. 盛最多水的容器(难度:中等)

Insert data into MySQL in C language

千亿级、大规模:腾讯超大 Apache Pulsar 集群性能调优实践

升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等

2022年杭电多校第2场 1001 Static Query on Tree(树链剖分+哈希表差分

顺通海关查验预约综合管理系统

MySQL【单行函数】

leetcode-1319:连通网络的操作次数
随机推荐
基础架构之Mongo
un7.30:Linux——如何在docker容器中显示MySQL的中文字符?
MySQL【单行函数】
Logback的使用
Dodging ice cream assassins?Crawling ice cream prices through crawlers
强啊,点赞业务缓存设计优化探索之路。
想要写出好的测试用例,先要学会测试设计
Confluence OGNL注入漏洞复现(CVE-2022-26134)
图解LeetCode——11. 盛最多水的容器(难度:中等)
windwons 下GPU环境和pytorch安装
【HarmonyOS】【FAQ】鸿蒙问题合集3
PLSQL Developer安装和配置
公司部门来了个00后测试卷王之王,老油条表示真干不过,已经...
C陷阱与缺陷 第7章 可移植性缺陷 7.1 应对C语言标准变更
EMC VPLEX VS2 SPS电池更换详细探讨
What is industrial radiography equipment?
What ARC does at compile time and runtime
网络基础(二)-Web服务器-简介——WampServer集成服务器软件之Apache+MySQL软件安装流程 & netstat -an之检测计算机的端口是否占用
时序数据库在船舶风险管理领域的应用
顺通海关查验预约综合管理系统