当前位置: 首页 > news >正文

starrocks有哪些operator

StarRocks 中的 ​​Operator(操作符)​​ 是执行引擎中的基本计算单元,它们组成了查询的执行计划。每个 Operator 负责完成一个特定的、相对单一的数据处理任务。

由于 StarRocks 的架构在持续演进,其 Operator 体系也经历了从传统的基于行的模型到向量化批处理模型的转变。目前,​​主要围绕向量化执行引擎和 Pipeline 引擎来组织​​。

以下是 StarRocks 中主要 Operator 的分类和详解:


1. 数据源 Operator(Scan)

这类 Operator 负责从数据源读取数据,是执行计划的起点。

  • OlapScanOperator​:​​最核心、最常用的扫描 Operator​​。负责从 StarRocks 本地的存储引擎(存储格式为 star_indexdata文件)中扫描数据。它会利用分区裁剪、前缀索引、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​​:​​聚合操作​​。执行 COUNTSUMAVGMAXMIN以及 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 SETSCUBE或 ROLLUP等高级分组操作,生成多维度分组的结果。


如何查看执行计划中的 Operator?

您可以通过 EXPLAIN命令来查看一个查询的执行计划,从而观察这些 Operator 是如何组装的。

​示例 1:简单的扫描和聚合​

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 上的具体执行实体。

总结

StarRocks 的 Operator 体系是其高性能查询引擎的基石。它们通过 ​​向量化处理​​(一次处理一批数据)和 ​​Pipeline 执行​​(异步流水线,避免阻塞)实现了极高的执行效率。理解这些 Operator 的功能,对于进行 SQL 调优(例如,通过执行计划判断是否出现了不该有的 CrossJoin,或 HashJoin的构建端是否过大)至关重要。

http://www.dtcms.com/a/453936.html

相关文章:

  • vps服务器怎么创建多个网站天津建设银行东丽网站
  • 诚信网站建设的意义怎么样推销自己网站
  • 政务类信息化项目验收流程指南
  • 优秀设计赏析网站网页设计与网站的关系
  • 做网站公司促销海报从什么网站建网站好
  • MySQL Docker 容器化部署全指南
  • 建立网站用英语站长号
  • 网站建设需要学编程吗化妆品网站模版免费下载
  • 罗庄网站建设类似wordpress的建站
  • python做网站教程alexa排名什么意思
  • 单调栈知识点
  • 专业的肿瘤电场疗法厂家
  • 【02】VM二次开发——VisionMaster(VM)开发环境配置、工程搭建
  • 全面解析浏览器事件系统
  • 中国空间站模型网络工程专业是干什么的
  • 大型网站都怎么做推广wap网站建设案例
  • Windows文件资源管理器快速查看文件夹内所有视频总时长
  • 聊城网站营销信息一般的网站都是用什么系统做的
  • 网站搭建传媒公司网站模板
  • 关于我的cifar-10的模型跑取
  • linux进程详解
  • 【无约束优化】多维搜索——梯度方法
  • AI作为操作系统已经不能阻挡了,尽管它还没来
  • 哪个网站建设公司贵阳网站建设公司排行
  • 建设银行官方网站企业网银苏州市工程造价信息网官网
  • API 类别 - 选择器
  • 网站建设商业阶段谷歌网站提交
  • VSCode下json文件自动排版的实现(VSCODE安装美化JSON插件)
  • 深圳做网站推广公司微信小程序商城需要多少钱
  • 在Vue项目中构建后端配置的动态路由及权限控制体系