「分散式技術專題」常用的 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
- ?【Alibaba中介軟體技術系列】「Sentinel技術專題」分散式系統的流量防衛兵的基本介紹(入門原始碼介紹)分散式原始碼
- 「分散式技術專題」副本機制分散式
- 「分散式技術專題」故障恢復分散式
- 「分散式技術專題」剖析一個SQL的解析及執行過程分散式SQL
- ZooKeeper分散式專題(一) -- zookeeper安裝以及介紹分散式
- JAVA 分散式 - 分散式介紹Java分散式
- ?【Java技術專區】「探針Agent專題」Java Agent探針的技術介紹(1)Java
- halcon基礎運算元介紹(視窗建立,運算元執行時長,是否啟用更新函式)函式
- 「分散式技術專題」SQL最佳化的前置條件和最佳化技巧分享分散式SQL
- 「分散式技術專題」事務基礎及特性分散式
- 「分散式技術專題」資料切分與合併分散式
- 分散式高效能狀態與原子運算元據庫slock簡介分散式
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- 常用的分散式事務解決方案介紹有多少種?分散式
- 大資料技術 - 分散式訊息流平臺:Kafka與Pulsar的介紹大資料分散式Kafka
- 隱私計算相關技術介紹
- 簡單介紹雲端計算的容器技術
- 分散式事務介紹分散式
- 元宇宙八大關鍵技術介紹元宇宙
- DNS常用術語介紹DNS
- oracle常用函式介紹Oracle函式
- 「分散式技術專題」資料分佈(原理、資料分片)分散式
- 「分散式技術專題」基於Gossip協議的去中心服務分散式Go協議
- 「分散式技術專題」獨立儲存的優勢與劣勢分散式
- 「分散式技術專題」資料庫常見的JOIN演算法分散式資料庫演算法
- Spark常用Transformations運算元(一)SparkORM
- KAFKA介紹(分散式架構)Kafka分散式架構
- 分散式賬本基本介紹分散式
- NumPy常用的位運算函式函式
- 「分散式技術專題」非獨立儲存的優勢與劣勢分散式
- 「分散式技術專題」兩種向量化執行引擎的實現方法分散式
- 自己作圖分析分散式技術架構演化的常用套路分散式架構
- Hive的基本介紹以及常用函式Hive函式
- 沉浸式夜遊中常見技術手段介紹
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- spark一些常用運算元Spark
- 運維排查問題常用sql運維SQL