跳到主要内容
版本:1.2

Query Engine

介绍​

GreptimeDB 的查询引擎基于 Apache DataFusion。DataFusion 提供逻辑计划、物理计划、优化器框架和执行运行时;GreptimeDB 在此基础上增加各查询语言的 planner、存储相关优化规则、自定义计划节点和分布式执行。

DDL 和其他控制面操作由 statement executor 分发。Query engine 接收数据处理计划,包括 INSERT ... SELECT 等操作中读取输入数据的部分。

查询生命周期​

  1. SQL、PromQL 或日志查询 planner 通过 catalog 解析表,并生成 DataFusion logical plan。DataFusion 不直接支持的操作由 GreptimeDB plan extension 表示。
  2. DataFusion 的 analyzer 和 optimizer rule 与 GreptimeDB rule 共同运行。这些规则规范化表达式和类型、改写时间范围操作、将 projection 和 filter 下推到 scan,并在需要时引入分布式计划节点。
  3. Physical planner 将优化后的 logical plan 转换为流式 operator。GreptimeDB 随后应用 scan 并行度、排序和分布式执行相关的 physical rule。
  4. 执行阶段通过 physical plan 拉取 Arrow record batch。存储 scan 接收 projection 和 predicate,下游 operator 消费数据流,无需先物化完整结果。

使用 EXPLAIN 查看逻辑和物理计划。EXPLAIN ANALYZE 还会执行计划并报告运行时指标。

数据表示​

GreptimeDB 使用 Apache Arrow record batch 作为内存数据表示。一个 record batch 包含等长的列数组和 schema。查询 operator 交换这些 batch 组成的数据流,使 Region scan 到结果编码的执行路径保持列式处理。

索引​

索引构建和持久化格式属于存储引擎。查询层向 scan 提供 predicate 和 projection,Mito 再利用时间范围、Parquet 统计信息和索引跳过不可能匹配的数据。参见数据持久化与索引。

分布式执行​

分布式模式下,Frontend 规划集群级查询,Datanode 执行 Region 本地子计划。MergeScan 是两个阶段之间的边界。