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操作。
在文档使用中是否遇到以下问题
更多建议
匿名提交