StarRocks 中的 Operator是执行引擎中的基本计算单元
1. 数据源 Operator(Scan)
这类 Operator 负责从数据源读取数据,是执行计划的起点。
OlapScanOperator:最核心、最常用的扫描 Operator。负责从 StarRocks 本地的存储引擎(存储格式为 star_index+ data文件)中扫描数据。它会利用分区裁剪、前缀索引、ZoneMap 索引、Bitmap 索引、Bloom Filter 等技术高效地读取列式数据块。
FileScanOperator:用于查询外部数据源,如 HDFS、S3 上的 Parquet、ORC、CSV 等格式的文件。允许直接对外部数据进行分析(ELT)。
ESScanOperator:专门用于扫描 Elasticsearch 外部表,将查询下推到 ES 集群执行。
JDBCScanOperator:用于查询 JDBC 外部表(如 MySQL、PostgreSQL 等数据库)。
2. 计算与转换 Operator(单节点计算)
这类 Operator 在单个节点上对数据流进行变换和处理,通常不涉及网络传输。
ProjectOperator:投影操作。用于选择查询中指定的列,或计算新的列(例如 SELECT a, b+1 AS c FROM table中的 b+1)。
FilterOperator / PredicateOperator:过滤操作。根据 WHERE 子句中的条件对数据进行筛选。它利用向量化执行,对一整批数据快速应用过滤条件。
AggregateOperator:聚合操作。执行 COUNT, SUM, AVG, MAX, MIN以及 GROUP BY等聚合计算。在 MPP 中,它通常分为两个阶段:
本地聚合:在数据所在的 BE 上先进行预聚合,减少数据量。
全局聚合:对本地聚合的结果进行最终汇总。
SortOperator:排序操作。用于 ORDER BY子句。它是一个阻塞 Operator,因为它需要接收到所有数据后才能完成排序。
TopNOperator:TopN 排序/限制操作。用于 ORDER BY … LIMIT N。它比全量排序更高效,因为不需要对所有数据进行完全排序,只需维护一个大小为 N 的堆。
LimitOperator:限制操作。用于 LIMIT N子句,简单截断数据流,只返回前 N 行。
HashJoinOperator:哈希连接操作。用于 JOIN操作。它会为连接的一端(通常是右表/构建端)在内存中构建一个哈希表,然后用另一端(左表/探测端)的数据去这个哈希表中查找匹配的行。这是最常用的 Join 方式。
MergeJoinOperator:归并连接操作。当左右两边的输入数据都已经按照连接键排好序时,可以使用这种更高效的连接方式。
WindowOperator:窗口函数操作。用于计算窗口函数,如 ROW_NUMBER(), RANK(), SUM() OVER (PARTITION BY …)等。
3. 数据交换 Operator(网络与数据重分布)
这类 Operator 是 MPP 架构的核心,负责在不同 BE 节点之间移动和重新分布数据,以实现并行计算。
ExchangeOperator:这是一个逻辑上的统称,在实际执行计划中通常表现为:
ExchangeSourceOperator:数据接收端。从一个或多个上游 BE 节点接收通过网络发送过来的数据。
ExchangeSinkOperator:数据发送端。将本节点的数据按照某种分区规则(如 Hash、Broadcast、随机)发送给下游的 BE 节点。
数据交换类型(Shuffle):
HASH_PARTITION:按某个键的哈希值将数据分布到不同节点,用于 GROUP BY非分区键或 JOIN。
BROADCAST:将小表的数据广播到所有包含大表数据的节点上,用于 Broadcast Join。
SINGLETON:将数据汇集到单个节点(例如需要全局排序或最终聚合的节点)。
RANDOM:随机分布数据,用于平衡负载。
4. 其他特殊 Operator
AnalyticOperator:与分析函数相关(类似于 WindowOperator,但具体实现可能有所不同)。
CrossJoinOperator:笛卡尔积连接,用于没有连接条件的 JOIN,使用较少。
RepeatOperator:用于配合 GROUPING SETS、CUBE或 ROLLUP等高级分组操作,生成多维度分组的结果。
如何查看执行计划中的 Operator?
您可以通过 EXPLAIN命令来查看一个查询的执行计划,从而观察这些 Operator 是如何组装的。
EXPLAIN SELECT customer_id, SUM(amount)
FROM sales
WHERE dt = ‘2023-10-01’
GROUP BY customer_id;
在这个计划中,您可能会看到:
OlapScanNode-> HashAggNode(本地聚合) -> EXCHANGE(网络Shuffle) -> HashAggNode(全局聚合)
示例 2:带 Join 的查询
EXPLAIN SELECT s.order_id, c.customer_name
FROM sales s JOIN customers c ON s.customer_id = c.customer_id;
计划中可能包含:
OlapScanNode(sales) -> HashJoinNode(构建端/探测端) -> EXCHANGE(Broadcast customers 表) -> OlapScanNode(customers)
注意:在 EXPLAIN的输出中,你可能会看到 XXXNode和 XXXOperator的术语。可以简单理解为:
Node: 是逻辑执行计划中的概念,由 FE 生成。
Operator: 是物理执行计划中的概念,是 Node 在 BE 上的具体执行实体。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » StarRocks 中的 Operator是执行引擎中的基本计算单元
