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語句中的窗口函數操作。關于窗口函數的詳情,請參見窗口函數。