AnalyticDB for MySQL中的一個運算元負責完成一個基本的資料處理邏輯,合理地組合運算元、最佳化運算元的順序和執行方式,可以提升資料的處理效率。本文介紹AnalyticDB for MySQL中的常用運算元及運算元所對應的屬性。
背景資訊
AnalyticDB MySQL版中的一個運算元負責完成一個基本的資料處理邏輯,一組運算元按照執行計畫完成資料的一組處理規則。AnalyticDB MySQL版是一個分布式系統,大多數運算元可以達到在多個節點上並行完成計算任務,來提高資料處理效率。
您可以通過AnalyticDB MySQL版的SQL診斷功能查看具備屬性的運算元以及運算元層級的結果診斷。更多詳情,請參見運算元層計劃執行樹和運算元層級診斷結果。
只有部分運算元具備屬性。
Aggregation
AnalyticDB MySQL版是一個分散式資料庫,支援多節點並行完成彙總操作(更多關於彙總和分組彙總的資訊,請參見分組彙總查詢最佳化)。Aggregation運算元通過sum()
、count()
、avg()
等函數對資料進行彙總或分組彙總操作。
Aggregation運算元包含了以下屬性。
屬性 | 說明 |
GroupByKeys | 分組欄位。 |
AggregationFunctions | 使用的彙總函式,例如 說明 如果SELECT欄位沒有出現在GROUP BY子句中,也沒有使用任何其他彙總函式,則系統會自動調用 |
Step | 當前彙總所處的階段,取值如下:
|
DistinctLimit
對應SQL語句中的DISTINCT LIMIT操作。
Filter
AnalyticDB MySQL版支援兩種資料過濾過程:
資料來源過濾:使用儲存層資料的索引進行過濾。
說明沒有獨立的運算元用於表示資料來源過濾過程,該過程中的過濾條件會體現在TableScan運算元中。關於TableScan運算元的詳情,請參見TableScan。
非資料來源過濾:儲存層資料沒有索引,需要在計算層使用Filter運算元進行過濾。
AnalyticDB MySQL版預設對所有欄位建立了索引,但在如下情境中不會將過濾條件下推:
查詢語句中使用了
no_index_columns
或filter_not_pushdown_columns
Hint,或叢集使用了adb_config filter_not_pushdown_columns配置,導致過濾條件下推功能被關閉。過濾條件中使用了函數(包括
cast
操作符)。過濾條件中的相關欄位沒有索引(例如建表時指定了
no_index
關鍵字,或建表後執行DROP INDEX
刪除了索引)。
此時AnalyticDB MySQL版會使用Filter運算元來過濾資料。
Filter運算元包含了以下屬性。
屬性 | 說明 |
Filter | 過濾運算元的過濾條件。 |
Join
對應SQL語句中的Join操作。AnalyticDB MySQL版在建立分布式表時需要通過Distributed By
來設定分布欄位,Join key是否為分布欄位涉及到資料的重分布類型。關於資料重分布的詳情,請參見RemoteExchange。
Join運算元包含了以下屬性。
屬性 | 說明 |
Criterias | Join條件,例如 |
Type | Join類型。AnalyticDB MySQL版支援4種類型:INNER、LEFT、RIGHT和FULL。 |
Method | Join演算法。AnalyticDB MySQL版支援2種演算法:
|
JoinFilter | Join過濾條件。 |
Limit
對應SQL語句中的LIMIT操作。
MarkDistinct
對應SQL語句中的count(DISTINCT)
操作。
僅當SQL語句中包含2個或2個以上的
count(DISTINCT)
操作時,才會使用MarkDistinct運算元。若SQL語句中只包含1個
count(DISTINCT)
操作,AnalyticDB MySQL版會自動進行最佳化,使用Aggregation運算元。更多詳情,請參見Aggregation。
Project
對應SQL語句中對特定欄位的投影操作,例如case when then
控制流程、concat()
函數等。
Project運算元包含了以下屬性。
屬性 | 說明 |
ProjectExpression | Project運算式。 |
RemoteExchange
該運算元用來表示上遊向下遊Stage傳輸資料時所用的方法。上下遊Stage間傳輸資料的方法有如下幾種:
Broadcast:表示上遊Stage中每個計算節點的資料都會複製到所有下遊Stage的計算節點。
Repartition:表示上遊Stage中每個節點的資料會按照固定的規則切分後,再分發到下遊Stage的指定計算節點。
Gather:表示上遊Stage中每個節點的資料會集中到下遊Stage中某一個特定的計算節點。
關於資料轉送方法的詳情,請參見Stage層執行計畫樹。
RemoteSource
該運算元用來表示當前Stage的輸入資料是通過網路從遠程節點傳輸過來的。
RemoteSource運算元包含了以下屬性。
屬性 | 說明 |
OutputColumns | 運算元輸出的欄位。 |
StageOutput
該運算元用於將當前Stage處理後的資料通過網路傳輸到下遊Stage的節點。
Sort
對應SQL語句中ORDER BY子句的操作,執行ORDER BY欄位的排序。
Sort運算元包含了以下屬性。
屬性 | 說明 |
OrderBy | 排序欄位。 |
Orderings | 排序方式。支援如下方式:
|
SortMerge
執行分布排序時,該運算元用於對從上遊Stage的多個節點傳輸來的資料進行歸併排序。
TableScan
該運算元用於從資料來源讀取資料,如果需要過濾資料,那麼資料過濾由底層資料來源使用索引高效完成。
TableScan運算元包含了以下屬性。
屬性 | 說明 |
TableName | 掃描的資料所屬表名。 |
SelectFields | 表掃描節點掃描的欄位。 |
DataBase | 掃描的資料所屬資料庫名。 |
FilterPushDown | 過濾條件是否下推到儲存節點。 說明 僅噹噹前Stage中存在過濾條件下推時才會展示該屬性。 |
PushedDownFilter | 下推到儲存節點的過濾條件。 說明 僅噹噹前Stage中存在過濾條件下推時才會展示該屬性。 |
TableWriter
在ETL類型的SQL語句(如INSERT INTO或REPLACE INTO)執行完對應的資料查詢後,會使用TableWriter運算元完成目標表的寫入操作。
TopN
對應SQL語句中的ORDER BY LIMIT m,n
查詢。
TopN運算元包含了以下屬性。
屬性 | 說明 |
OrderBy | 排序欄位。 |
Count | 對應SQL語句中ORDER BY時的LIMIT操作。 |
Orderings | 排序方式。支援如下方式:
|
Step | TopN運算元的執行步驟,包括如下步驟:
|
Offset | 對應SQL語句中ORDER BY時的OFFSET操作。 |
Union
對應SQL語句中的UNION操作。
Window
對應SQL語句中的視窗函數操作。關於視窗函數的詳情,請參見視窗函數。