AnalyticDB中的一个算子负责完成一个基本的数据处理逻辑,一组算子按照执行计划完成数据的一组处理规则。AnalyticDB是一个分布式系统,大多数算子可以在多个节点上并行的完成计算任务,提高数据处理效率。

Sort
负责执行SQL语句中的Order By子句,执行对Order By字段的排序。
Aggregate
负责实现对数据的聚合操作或者分组聚合操作,例如sum、count、avg等。AnalyticDB是一个分布式数据库,可以多节点并行的完成聚合操作,ADB中典型的聚合流程一般可以包含Partial和Final两种,Partial阶段完成各个计算节点内部的局部聚合,局部聚合的结果会根据分组字段进行网络间的重分布,重分布后的数据需要执行Final阶段的最终聚合。
Tablescan
负责从数据源读取数据,VisualPlan可以看到扫描数据的Database名称、Table名称以及使用了Predicate Pushdown优化的过滤条件。该算子展示的数据过滤过程由底层数据源使用索引高效完成。有关VisualPlan的详细信息,可参见VisualPlan
Filter
使用Filter算子完成在非数据源的数据过滤操作。ADB默认对所有字段创建了索引,但是有些过滤条件无法使用索引完成数据的过滤,例如过滤条件中包含对字段的function操作,或者用户手动删除了过滤条件字段的索引,都会导致过滤操作无法通过索引完成,此时会使用Filter算子完成数据的过滤。
Window
执行开窗运算的算子。
Limit
执行limit操作的算子。
TopnRowNumber
对应开窗操作中的order by limit m,n查询。
Distinctlimit
对应SQL语句中的group by distinct limit。
TopN
对应SQL语句中的order by limit m,n查询。
Tablewriter
ETL类型的SQL语句,例如insert into 或者replace into,在执行完对应的数据查询后,会使用Tablewriter算子完成目标表的写入操作。
Join
对应SQL语句中的join操作。AnalyticDB支持多种不同的Join类型,包括Inner Join、Left Outer Join、Right Outer Join、Full Outer Join、Semi/Anti Join。AnalyticDB在创建分布式表时需要制定分布字段(Distributed By),join key是否为分布字段涉及到数据的重分布类型。有关数据的重分布类型的详细解释,可参见本文中的“RemoteExchange“。AnalyticDB会根据表结构、数据特征的不同使用不同的Join算法,目前主要有两类,一类是hash,该算法会把小表缓存到内存中,使用hash表查找的方式完成join操作;另外一类是index,该算法会充分利用AnalyticDB全索引的特点,使用join key的索引完成join操作。Join条件在VisualPlan中的join算子处使用Criteria标识。
Union
对应SQL语句中union操作。
RemoteExchange
该算子在SQL语句中没有特定的对应关系,用来表示当前Stage的数据来源于其他Stage。该算子负责执行从上游Stage拉取数据到当前Stage,主要分为repartition、replicated和gather三种方式。
  • repartition表示当前Stage的某个计算节点只接收上游Stage的计算节点的特定分区的数据,在数据量较大时往往采用这种方式把相同的key值进行汇聚;
  • replicated表示下游Stage每个计算节点的数据进行了广播,复制到了所有下游Stage的节点。在数据量较小时,往往采用这正方式,防止在join时对大表数据进行网络间的传输,或者通过复制小表的方式防止join时的数据倾斜发生;
  • gather表示下游Stage的每个计算节点的数据没有复制和广播,而是汇聚到了当前Stage的一个节点上。
MarkDistinct
完成Distinct操作。