算子
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语句中的窗口函数操作。关于窗口函数的详情,请参见窗口函数。