当前位置:网站首页>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边栏推荐
- 多年以后「PageHelper」又深深的给我上了一课
- 论文阅读之《DeepIlluminance: Contextual IlluminanceEstimation via Deep Neural Networks》
- ByteArrayInputStream 类源码分析
- ESP8266-Arduino编程实例-DS18B20温度传感器驱动
- Valid bracketed strings [greedy exercise]
- C陷阱与缺陷 第6章 预处理器
- 数据库系统原理与应用教程(063)—— MySQL 练习题:操作题 39-50(七):SELECT 基本语法联系
- ESP8266-Arduino编程实例-HC-SR04超声波传感器驱动
- layaBox---TypeScript---接口
- What are the applications of X-rays?
猜你喜欢
随机推荐
Confluence OGNL注入漏洞复现(CVE-2022-26134)
How Google earth engine realizes the arrangement and selection of our time list
reporter undercover
【HMS core】【Analytics Kit】【FAQ】如何解决华为分析付费分析中付款金额显示为0的问题?
快使用flyway管理sql脚本吧~
【开发者必看】【push kit】推送服务典型问题合集3
数据库系统原理与应用教程(064)—— MySQL 练习题:操作题 51-61(八):查询条件的构造、通配符
18.支持向量机(SVM)的介绍
Web 3.0入门教程
LayaBox---TypeScript---类型兼容性
linux 安装mysql8.0 超详细教程(实战多次)
C陷阱与缺陷 第6章 预处理器 6.4 宏并不是类型定义
Mathematical Principles of Graph Convolutional Neural Networks——A Preliminary Study on Spectral Graph Theory and Fourier Transform
测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己
MySQL【单行函数】
Servo System of Hydraulic Steering Gear Based on Fuzzy PID
SQL行列转换
C陷阱与缺陷 第6章 预处理器 6.1 不能忽视宏定义中的空格
js中的基础知识点 —— BOM
Informatics Olympiad All-in-One 1966: [14NOIP Popularization Group] Scale Simplification | Luogu P2118 [NOIP2014 Popularization Group] Scale Simplification









