全部產品
Search
文件中心

AnalyticDB:運算元

更新時間:Jul 06, 2024

AnalyticDB for MySQL中的一個運算元負責完成一個基本的資料處理邏輯,合理地組合運算元、最佳化運算元的順序和執行方式,可以提升資料的處理效率。本文介紹AnalyticDB for MySQL中的常用運算元及運算元所對應的屬性。

背景資訊

AnalyticDB MySQL版中的一個運算元負責完成一個基本的資料處理邏輯,一組運算元按照執行計畫完成資料的一組處理規則。AnalyticDB MySQL版是一個分布式系統,大多數運算元可以達到在多個節點上並行完成計算任務,來提高資料處理效率。

您可以通過AnalyticDB MySQL版的SQL診斷功能查看具備屬性的運算元以及運算元層級的結果診斷。更多詳情,請參見運算元層計劃執行樹運算元層級診斷結果

說明

只有部分運算元具備屬性。

Aggregation

AnalyticDB MySQL版是一個分散式資料庫,支援多節點並行完成彙總操作(更多關於彙總和分組彙總的資訊,請參見分組彙總查詢最佳化)。Aggregation運算元通過sum()count()avg()等函數對資料進行彙總或分組彙總操作。

Aggregation運算元包含了以下屬性。

屬性

說明

GroupByKeys

分組欄位。

AggregationFunctions

使用的彙總函式,例如sum()count()avg()等。

說明

如果SELECT欄位沒有出現在GROUP BY子句中,也沒有使用任何其他彙總函式,則系統會自動調用arbitrary()函數隨機選取分組中的一個值輸出。更多詳情,請參見ARBITRARY

Step

當前彙總所處的階段,取值如下:

  • PARTIAL:局部彙總。

  • FINAL:最終彙總。

  • SINGLE:單步彙總,即直接執行最終彙總。

DistinctLimit

對應SQL語句中的DISTINCT LIMIT操作。

Filter

AnalyticDB MySQL版支援兩種資料過濾過程:

  • 資料來源過濾:使用儲存層資料的索引進行過濾。

    說明

    沒有獨立的運算元用於表示資料來源過濾過程,該過程中的過濾條件會體現在TableScan運算元中。關於TableScan運算元的詳情,請參見TableScan

  • 非資料來源過濾:儲存層資料沒有索引,需要在計算層使用Filter運算元進行過濾。

AnalyticDB MySQL版預設對所有欄位建立了索引,但在如下情境中不會將過濾條件下推:

  • 查詢語句中使用了no_index_columnsfilter_not_pushdown_columnsHint,或叢集使用了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條件,例如tb_1.col_a=tb_2.col_a

Type

Join類型。AnalyticDB MySQL版支援4種類型:INNER、LEFT、RIGHT和FULL。

Method

Join演算法。AnalyticDB MySQL版支援2種演算法:

  • Hash:Hash演算法會把小表緩衝到記憶體中,使用Hash表尋找的方式完成Join操作。

  • Index:Index演算法會充分利用AnalyticDB MySQL版全索引的特點,使用Join key的索引完成Join操作。

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

排序方式。支援如下方式:

  • ASC_NULLS_FIRST:升序,空值在前。

  • ASC_NULLS_LAST:升序,空值在後。

  • DESC_NULLS_FIRST:降序,空值在前。

  • DESC_NULLS_LAST:降序,空值在後。

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

排序方式。支援如下方式:

  • ASC_NULLS_FIRST:升序,空值在前。

  • ASC_NULLS_LAST:升序,空值在後。

  • DESC_NULLS_FIRST:降序,空值在前。

  • DESC_NULLS_LAST:降序,空值在後。

Step

TopN運算元的執行步驟,包括如下步驟:

  • PARTIAL:在分布式排序過程中,對各個節點上的資料進行局部排序。

  • SORTMERGE:對已經進行了局部排序的資料進行最終的歸併排序。

  • SINGLE:沒有Partial過程,直接進行最終的歸併排序。

Offset

對應SQL語句中ORDER BY時的OFFSET操作。

Union

對應SQL語句中的UNION操作。

Window

對應SQL語句中的視窗函數操作。關於視窗函數的詳情,請參見視窗函數