starrocks对大量数据怎么实现hash join

以下是个人理解,可能不正确,希望评论指正:

pipeline构建

be的入口是:main->start_be,这里注册的doris::PBackendService中有一个exec_plan_fragment用来执行fe发来的查询计划。执行分两步:FragmentExecutor::prepare,FragmentExecutor::execute。

prepare阶段

在prepare阶段,FragmentExecutor::prepare->_prepare_pipeline_driver->PipelineBuilder::build中将HashJoinNode转为pipeline。hash join 节点的右侧是build 端,左侧是probe 端,在生成build 端时,会在build端加入一个SpillProcessOperator的pipeline算子。probe端与build端一起绑定了同一个HashJoiner节点。

execute阶段

在执行阶段FragmentExecutor::execute向GlobalDriverExecutor提交pipeline driver,当worker线程遍历到包含hash join node的driver节点时,调用PipelineDriver::process执行pipeline中每个pipeline算子,即从上游算子pull_chunk,再push_chunk到下游节点。

SpillableHashJoinBuildOperator从上游拉数据,会将chunk数据交到PartitionedSpillerWriter中,从而计算chunk中每行的hash 值,并生成它应属于哪个hash backet的索引(selections),当一个hash bucket满时,就将这个桶分裂一级,如果分裂至最高级时还满,就输出到文件中。

当一个SpillableHashJoinBuildOperator从上游获取完最后一条数据时,会调用 set_finishing将所在partition的stream 设置为eof状态

对于SpillableHashJoinProbeOperator,在检查has_output时,会起task去load所有build端的SpillerReader,当检查到build端一个partition 的eof状态时,ProbeOperator的has_output能就会检查

当driver扫描到SpillableHashJoinProbeOperator,它加载数据到一定程度,会调用pull_chunk,用build侧的hash表来join 本probe侧数据,将join上的返回,push_chunk到下一个pipeline节点。join不上的部分通过probe_remain补充null,并将结果返回。

相关推荐

  1. starrocks大量数据怎么实现hash join

    2024-02-21 06:14:01       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-21 06:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-21 06:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-21 06:14:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-21 06:14:01       20 阅读

热门阅读

  1. npm install一直卡在 sill idealTree buildDeps

    2024-02-21 06:14:01       27 阅读
  2. 机器学习速成

    2024-02-21 06:14:01       32 阅读
  3. 6CCS3ML1 Machine Learning

    2024-02-21 06:14:01       21 阅读
  4. 机器学习 -- 矩阵和向量

    2024-02-21 06:14:01       23 阅读
  5. PaddleSeg分割框架解读[02] 配置文件config详解

    2024-02-21 06:14:01       28 阅读
  6. 74.如何实现无XML零配置的SpringMVC

    2024-02-21 06:14:01       25 阅读
  7. git项目管理

    2024-02-21 06:14:01       30 阅读
  8. linux docker部署深度学习环境(docker还是conda)

    2024-02-21 06:14:01       34 阅读
  9. singularity-ce-4.1.0 + go 完整安装步骤,及报错解决

    2024-02-21 06:14:01       24 阅读
  10. 深入理解Golang中的Options模式

    2024-02-21 06:14:01       24 阅读
  11. samber/lo 库的使用方法: 处理 channel

    2024-02-21 06:14:01       29 阅读
  12. C++动态开辟与C对比

    2024-02-21 06:14:01       24 阅读