当前位置: 首页 > news >正文

【StarRocks系列】查询语句执行全流程

目录

StarRocks 查询数据流程详解

1. 提交查询语句

2. FE 解析与优化

3. 选择 BE 节点与数据路由

4. BE 数据读取与计算

5. 结果返回

关键优化点总结

示例流程

流程图


StarRocks 查询数据流程详解

StarRocks 采用分布式 MPP 架构,查询流程涉及 FE(Frontend)BE(Backend) 协同工作,核心流程如下:


1. 提交查询语句
  • 客户端(如 MySQL Client/JDBC)向任意 FE 节点发送 SQL 请求。
  • FE 接收请求后,进入解析阶段。

2. FE 解析与优化

步骤分解:

  1. SQL 解析与语法校验
    • FE 的 Parser 将 SQL 解析为抽象语法树(AST)。
    • 校验语法、表/列是否存在、权限等。
  1. 逻辑计划生成
    • 将 AST 转换为逻辑计划(Logical Plan),明确操作顺序(如 Scan、Filter、Join、Aggregate)。
  1. 优化器处理
    • CBO(Cost-Based Optimizer) 基于统计信息(表大小、列基数等)优化逻辑计划:
      • 谓词下推(Predicate Pushdown)
      • Join 重排序(Join Reorder)
      • 选择最优聚合策略(单阶段/两阶段聚合)
    • 输出 最优物理执行计划
  1. 分布式计划拆分
    • 将物理计划拆分为多个 Fragment(并行执行单元),每个 Fragment 包含:
      • Scan 节点(数据扫描)
      • Compute 节点(计算操作)
      • Exchange 节点(跨节点数据传输)。

3. 选择 BE 节点与数据路由
  • 数据本地性优先
    FE 根据 分区分桶信息 选择存储目标数据的 BE 节点,优先调度到数据所在的 BE 执行(减少网络传输)。
  • 分区分桶剪枝
    • 分区剪枝(Partition Pruning):
      根据 WHERE 条件过滤无关分区(如日期分区)。
    • 分桶剪枝(Bucket Pruning):
      根据分桶键(如 user_id)的哈希值定位目标分桶(Tablet)。

4. BE 数据读取与计算

BE 节点执行流程:

  1. 索引加速过滤
    • 前缀索引(Short Key Index)
      每 1024 行生成一个索引项,通过前缀快速定位数据块。
    • 布隆过滤器(Bloom Filter)
      对高基数列(如 user_id)快速过滤不满足条件的数据块。
    • 位图索引(Bitmap Index)
      低基数列(如 gender)的等值过滤加速。
  1. 列式读取与向量化计算
    • 按列读取数据(OLAP 场景友好),利用 SIMD 指令 进行向量化计算。
    • 执行过滤(WHERE)、聚合(GROUP BY)、连接(JOIN)等操作。
  1. 多阶段聚合
    • 两阶段聚合示例:
      • Local Aggregation:BE 节点本地预聚合。
      • Global Aggregation:汇总所有 BE 的中间结果,生成最终聚合值。
  1. 数据交换(Exchange)
    • 若需跨节点计算(如 Shuffle Join),BE 通过 Exchange 节点 传输数据。

5. 结果返回
  1. 结果汇总
    最终结果由某个 BE 或 FE 汇总(取决于查询类型)。
  2. 返回客户端
    FE 将结果集返回给客户端。

关键优化点总结

阶段

优化技术

目的

FE 解析

CBO 优化、谓词下推

减少计算量和数据传输

路由

分区分桶剪枝

减少扫描数据量

BE 读取

前缀索引 + Bloom Filter + 向量化计算

加速过滤与计算

分布式计算

本地化优先 + 两阶段聚合

降低网络开销,提升并行效率

示例流程

SELECT user_id, SUM(amount) 
FROM orders 
WHERE date = '2023-10-01' AND product_id = 100 
GROUP BY user_id;
  1. FE 解析 SQL,剪枝 date='2023-10-01' 的分区,定位 product_id=100 的分桶。
  2. FE 生成计划:每个 BE 扫描本地分桶 → 本地聚合 → 结果汇总到 Leader BE 做全局聚合。
  3. BE 利用前缀索引快速定位数据块,Bloom Filter 过滤 product_id=100 的行。
  4. 结果返回客户端。

通过以上流程,StarRocks 实现高性能分布式查询,适合大规模数据分析场景。

流程图

http://www.lryc.cn/news/573143.html

相关文章:

  • 1. 常见K线组合
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 03(题目+回答)
  • 智慧医院核心引擎:IBMS 系统守护医疗环境高效与安全​
  • 内容搜索软件AnyTXT.Searcher忘记文件名也能搜,全文检索 1 秒定位文件
  • Python中字符串常用的操作方法
  • mysql导入大sql(比如10GB的sql文件)
  • 开源AI智能名片链动2+1模式S2B2C商城小程序:破解微商代理模式困局的数字化创新路径
  • MySQL存储引擎与架构
  • 在AI普及的大环境下神经网络在新能源汽车热管理系统中的应用简介
  • CLion开发Qt桌面程序_git的简单使用_小团体
  • opencv try-catch
  • day38-Django(4)
  • AI大模型学习之基础数学:高斯分布-AI大模型概率统计的基石
  • 自定义Django rest_framework中response的示例
  • 一个小BUG引发的对Mybatis-Plus的模糊查询的思考
  • 基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
  • 从代码学习深度学习 - 预训练BERT PyTorch版
  • flutter环境变量记录
  • 为WIN10微软输入法的全角切换Bug禁用Shift+Space组合键
  • 软件工程概述知识点总结
  • (LeetCode ) 169. 多数元素(哈希表 || 二分查找)
  • python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理
  • C++链表的虚拟头节点
  • Wire--编译时依赖注入工具
  • Java面试题025:一文深入了解数据库Redis(1)
  • 4.1 FFmpeg编译选项配置
  • 缓存与加速技术实践-Kafka消息队列
  • ARCGIS国土超级工具集1.6更新说明
  • 【RAG优化】深度解析开源项目MinerU:从PDF解析到多模态理解的工业级解决方案
  • Linux - 安装 git(sudo apt-get)