【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.pswp.cn/diannao/87930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87930.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS 5的分布式通信矩陣是如何工作的?

HarmonyOS 5 的分布式通信矩陣通過多層級技術協同實現跨設備高效協同,其核心工作機制如下: 一、核心架構:分布式軟總線 3.0? ?動態拓撲感知? 設備自動發現并構建最優傳輸路徑(如手機與智慧屏優先采用 Wi-Fi P2P 直連&#xf…

自定義Django rest_framework中response的示例

在實際項目開發中,原有框架的response可能并不能完全滿足我們的需求。比如我們需要定義一些更加詳細的RESULT_CODE來說明情況。那么我們就可以基于原有的response進行自定義。 下面是一個自定義Django rest_framework中response的示例 # -*- coding:utf-8 -*- imp…

如何開發HarmonyOS 5的分布式通信功能?

以下是基于HarmonyOS 5開發分布式通信功能的完整技術指南,涵蓋核心流程與關鍵代碼實現: 一、開發前置配置 權限聲明? 在module.json5中添加分布式權限: {"module": {"requestPermissions": [{"name": &quo…

Linux --靜態庫和動態庫的制作和原理

本章重點: 動靜態庫的制作,使用和查找 可執行程序ELF格式 可執行程序的加載過程 虛擬地址空間和動態庫加載的過程 動靜態庫的制作,使用和查找 1.在了解庫的制作之前,我們首先需要知道什么是庫。庫是寫好的現有的,成…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | IncrementingCounter(遞增計數器)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— IncrementingCounter組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup&g…

簡約求職簡歷競聘工作求職PPT模版共享

簡歷競聘&#xff0c;自我介紹&#xff0c;個人簡歷&#xff0c;工作求職PPT模版&#xff0c;崗位競聘求職簡歷PPT模版&#xff0c;低調綠自我介紹PPT模版&#xff0c;簡約求職簡歷PPT模版&#xff0c;個人介紹PPT模版&#xff0c;我的簡歷PPT模版&#xff0c;個人求職簡介PPT模…

Java大廠面試攻略:Spring Boot與微服務架構深度剖析

問題一&#xff1a;Spring Boot 的自動配置原理是什么&#xff1f; 簡潔面試回答&#xff1a; Spring Boot 的自動配置基于條件化配置&#xff0c;通過 Conditional 注解實現&#xff0c;根據項目中依賴和環境自動裝配 Bean。 詳細解析&#xff1a; Spring Boot 自動配置的核…

Windows核心端口攻防全解析:135、139、445端口的技術內幕與安全實踐

Windows核心端口攻防全解析&#xff1a;135、139、445端口的技術內幕與安全實踐 引言&#xff1a;Windows網絡通信的命脈 在Windows網絡生態系統中&#xff0c;135、139和445端口猶如網絡通信的"大動脈"&#xff0c;承載著關鍵的系統服務和網絡功能。這些端口不僅是…

從生活場景學透 JavaScript 原型與原型鏈

一、構造函數&#xff1a;以 “人” 為例的對象工廠 1. 生活場景下的構造函數定義 我們以 “人” 為場景創建構造函數&#xff0c;每個人都有姓名、年齡等個性化屬性&#xff0c;也有人類共有的特征&#xff1a; // 人類構造函數 function Person(name, age) {this.name na…

學c++ cpp 可以投遞哪些崗位

此次描述知識針對應屆生來說哈&#xff0c;如果是社招&#xff0c;更多是對于你目前從事的方向&#xff0c;技術棧進行招聘就好了。 此次編寫是按照boss上崗位篩選的方式進行編寫的&#xff0c;其實投簡歷一般也是用boss&#xff0c;后面也會出一篇文章給大家介紹一般找工作都用…

【Docker基礎】Docker鏡像管理:docker rmi、prune詳解

目錄 引言 1 Docker鏡像管理概述 1.1 為什么需要鏡像清理&#xff1f; 1.2 鏡像生命周期管理 2 docker rmi命令詳解 2.1 基本語法 2.2 常用選項 2.3 刪除單個鏡像 2.4 刪除多個鏡像 2.5 強制刪除鏡像 2.6 刪除所有鏡像 3 docker rmi工作原理 3.1 鏡像刪除流程 3.…

57-Oracle SQL Profile(23ai)實操

在上一期中說到了SQL Tuning Advisor其中一個影響對象就是SQL Profile&#xff0c;同樣在管理和應用開發中,SQL性能優化是個任重道遠的工作&#xff0c;低效的SQL語句讓應用響應緩慢,用戶整體體驗下降,拖垮搞蹦整個系統都有可能。Oracle數據庫提供了多種組合工具&#xff0c;有…

man的使用

man的使用 文章目錄 man的使用基本用法&#xff1a;常見 man 命令操作&#xff1a;man 命令的章節&#xff1a;示例&#xff1a; man 是 Linux 和 macOS 系統中的命令&#xff0c;用于查看命令和程序的手冊頁&#xff08;manual pages&#xff09;。手冊頁包含了關于命令、函…

【藍牙】手機連接Linux系統藍牙配對,Linux Qt5分享PDF到手機

要實現手機連接 A40i Linux 系統并通過藍牙接收 PDF 文件&#xff0c;可以按照以下步驟操作&#xff1a; 1. 配置 Linux 藍牙功能 確保開發板上的藍牙模塊已正確驅動并支持藍牙協議棧。 安裝藍牙工具&#xff1a; bash sudo apt install bluetooth bluez bluez-tools 啟動藍…

1432. 改變一個整數能得到的最大差值

1432. 改變一個整數能得到的最大差值 題目鏈接&#xff1a;1432. 改變一個整數能得到的最大差值 代碼如下&#xff1a; class Solution { public:int maxDiff(int num) {string s to_string(num);function<int(char, char)> replace_stoi [&](char old_char, cha…

解密 Spring MVC:從 Tomcat 到 Controller 的一次完整請求之旅

今天&#xff0c;想和你聊一個我們每天都在打交道&#xff0c;但可能不曾深入思考的話題&#xff1a;當一個 HTTP 請求從瀏覽器發出&#xff0c;到最終被我們的 Spring Controller 處理&#xff0c;它到底經歷了一場怎樣的旅程&#xff1f; 理解這個流程&#xff0c;不僅僅是為…

在 Java 中操作 Map時,高效遍歷和安全刪除數據

在 Java 中操作 Map 時&#xff0c;高效遍歷和安全刪除數據可以通過以下方式實現&#xff1a; 一、遍歷 Map 的 4 種高效方式 1. 傳統迭代器&#xff08;Iterator&#xff09; Map<String, Integer> map new HashMap<>(); map.put("key1", 5); map.pu…

力扣-136.只出現一次的數字

題目描述 給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。 你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且該算法只使用常量額外空間。 class Solution {public i…

Go 網絡編程:HTTP服務與客戶端開發

Go 在標準庫中內置了功能強大的 net/http 包&#xff0c;可快速構建高并發、高性能的 HTTP 服務&#xff0c;廣泛應用于微服務、Web后端、API中間層等場景。 一、快速創建一個HTTP服務 示例&#xff1a;最簡Hello服務 package mainimport ("fmt""net/http&quo…

【Prism】 實現注入的幾個標準化步驟(相機舉例)

?? Prism 架構中如何優雅地注冊和注入相機服務 在開發基于 Prism + WPF 的應用時,合理使用依賴注入(DI)可以大大提高系統的可維護性和擴展性。本文以一個多相機平臺管理系統為例,展示如何通過接口、枚舉、容器注冊等方式,實現相機服務的靈活配置與使用。 ?? 一、定義…