「分散式技術專題」常用的 SQL 運算元介紹
SQL 查詢的執行過程,就像工廠的加工流水線,層層遞進,最終得到想要的結果,而SQL運算元就好比其中的一道道工序。
本篇簡要介紹一下 SQL 執行計劃中,一些常見運算元的含義和邏輯。
1. indexscan 索引掃描
當資料表中建立了索引,並使用索引欄位進行查詢時,會進行索引掃描。
2. tablescan 順序表掃描
tablescan 負責從磁碟中以連續塊的形式從磁碟中讀取資料頁。
一般在 SQL 查詢中,有幾張表就要有幾個 tablescan 操作。在分散式資料庫中,同一張表的掃描,還會被分配到多個結點使用分散式的方式執行。
3. project 投影
投影操作,是從表中根據查詢欄位選擇相關的列。
SELECT cc_name, cc_class FROM call_center WHERE cc_class = 'large' LIMIT 10;
在這個查詢中,tablescan 操作會將 call_center 表的資料做全欄位讀取,project 操作負責篩選出 cc_name, cc_class 這兩個列。
4. filter 過濾
filter 會根據 where 條件中的篩選條件,篩選出符合的記錄。其中過濾條件也叫謂詞邏輯。
在兩表連線時,謂詞邏輯可以在 join 前執行,也可以在 join 後執行。因為 join 操作是做笛卡爾積,如果在 join 後執行謂詞邏輯,將大大增加計算的基數,所以一般的資料庫最佳化執行器都會將謂詞下推,讓謂詞邏輯在 join 操作前完成。
上述的 project 和 filter 運算元可以在資料表的列和行兩個維度對資料進行限定,大大縮小處理的資料量,降低資源消耗,是 SQL 最佳化時常用的方法。
5. exchange
在分散式資料庫中,tablescan 等操作是分散式進行的,而各個分支結點將結果彙總的過程就是 exchange 操作。
exchange 操作還可以細分為 LocalExchange 和 RemoteExchange。LocalExchange 即本地資料結果彙總,沒有網路 IO;而 RemoteExchange 是資料從不同的資料結點彙總到某一結點,需要網路傳輸。
6. join 連線
連線的本質是兩個表做笛卡爾積操作。
SELECT ctr_total_return FROM customer_total_return_t1 ctr1 WHERE ctr1.ctr_total_return > ( SELECT avg( ctr_total_return ) FROM customer_total_return_t2 ctr2 WHERE ctr1.ctr_store_sk = ctr2.ctr_store_sk );
在這個SQl中,先會對錶 customer_total_return_t2 進行讀取,並以 ctr_store_sk 為 key ,統計 avg(ctr_total_return) 然後 customer_total_return_t1 和 customer_total_return_t2 會做笛卡爾積,再進行條件過濾。
7. aggregation 聚合
對資料做分組聚合,統計分析。
一般會先在每個結點先做一次分組統計,exchange 資料匯合之後再做一次合併統計。
SELECT avg( ctr_total_return ) FROM customer_total_return_test WHERE ctr_store_sk = 10;
上面這個查詢中只有一張表,由於是分散式執行,表雖然只掃描一次,但是會在多個資料結點進行掃描,所以 avg 函式會在每個結點先執行一次,exchange 彙總完後,會再進行一次 avg 操作。
8. values
SELECT 1 + 1, DATE '2001-08-22', ARRAY [1, 2, 3];
有時 SQL 中資料不是從表中查詢出來的,而是給定的一個數字、字元或陣列,這時 values 操作會將這些識別符號轉化成具體的數值。
9. scalar 標量
根據策略,給定一個結果值。
SELECT CASE WHEN( SELECT count(*) FROM store_sales WHERE ss_quantity BETWEEN 81 AND 100 ) > 18213 THEN 1 ELSE 2 END AS bucket5 FROM reason WHERE r_reason_sk = 1;
如 case when 中根據判斷條件計算結果時會使用。
10. markDistinct
SELECT avg( ss_sales_price ) AS B1_LP, count( DISTINCT ss_list_price ) AS B1_CNTD FROM store_sales;
distinct操作時,對資料的類別進行標識。
11. window 視窗
視窗函式是應用於視窗和分割槽的函式,可分為三類:排名函式,分析函式和聚合函式。
SELECT cs_call_center_sk, sum(cs_ext_sales_price) OVER( PARTITION BY cs_sold_date_sk ) AS revenueratio FROM catalog_sales LIMIT 100;
視窗函式計算時,會根據 partition by 後的欄位進行分割槽,然後進行統計分析或排名。
12. sort 排序
SELECT ss.ca_county, ss.d_year FROM ss, sc WHERE ss.ca_county = sc.ca_county ORDER BY ss.d_year;
排序操作。
13. topN
即 limit 操作,獲取限定的記錄條數。
14. output
向客戶端輸出結果。
以上為常用的SQL運算元介紹, 「分散式技術專題」是國產資料庫 Hubble 團隊精心整編,專題會持續更新,歡迎大家保持關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026685/viewspace-2934940/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 「分散式技術專題」SQL 解析的 AP/TP 判別分散式SQL
- 「分散式技術專題」副本機制分散式
- 「分散式技術專題」故障恢復分散式
- 「分散式技術專題」剖析一個SQL的解析及執行過程分散式SQL
- 分散式鎖(1):Java 常用技術方案分散式Java
- halcon基礎運算元介紹(視窗建立,運算元執行時長,是否啟用更新函式)函式
- 「分散式技術專題」事務基礎及特性分散式
- 「分散式技術專題」資料切分與合併分散式
- 「分散式技術專題」SQL最佳化的前置條件和最佳化技巧分享分散式SQL
- ?【Alibaba中介軟體技術系列】「Sentinel技術專題」分散式系統的流量防衛兵的基本介紹(入門原始碼介紹)分散式原始碼
- 分散式技術設計中的問題分散式
- 「分散式技術專題」資料分佈(原理、資料分片)分散式
- 「分散式技術專題」資料庫常見的JOIN演算法分散式資料庫演算法
- 「分散式技術專題」基於Gossip協議的去中心服務分散式Go協議
- 「分散式技術專題」獨立儲存的優勢與劣勢分散式
- NumPy常用的位運算函式函式
- 分散式計算技術的比較:Jini, Jxta and Web Services分散式Web
- 「分散式技術專題」兩種向量化執行引擎的實現方法分散式
- 「分散式技術專題」非獨立儲存的優勢與劣勢分散式
- 自己作圖分析分散式技術架構演化的常用套路分散式架構
- 分散式計算技術(上):經典計算框架MapReduce、Spark 解析分散式框架Spark
- 「分散式技術專題」基於代價解析的最優路徑規劃分散式
- 「分散式技術專題」時鐘系列一:事件的因果和邏輯時鐘分散式事件
- 「分散式技術專題」併發系列一:基於加鎖的併發控制分散式
- 「分散式技術專題」併發系列二:基於時間的併發控制分散式
- ZooKeeper分散式專題(一) -- zookeeper安裝以及介紹分散式
- 「分散式技術專題」併發系列三:樂觀併發控制之原型系統(分散式驗證)分散式原型
- 分散式技術-Zookeeper概述分散式
- 分散式技術中不可或缺的分散式互斥方案分散式
- ?【Java技術專區】「探針Agent專題」Java Agent探針的技術介紹(1)Java
- 運維排查問題常用sql運維SQL
- 分散式 SQL 資料庫與表格最佳化技術分散式SQL資料庫
- 「分散式技術專題」去中心化服務與中心化服務的優劣分散式中心化
- 技術專題之-技術的概述
- 【分散式技術專題】「分散式技術架構」一文帶你釐清分散式事務協議及分散式一致性協議的演算法原理和核心流程機制(Paxos篇)分散式架構協議演算法
- 不同體系分散式儲存技術的技術特性分散式
- 分散式系統技術難題--異地多活分散式
- 搞懂分散式技術12:分散式ID生成方案分散式