尽管drill 是schema on fly 的但是,提供scehma 以及统计信息可以加速drill 数据的处理,所以drill 1.17
添加了Metastore(基于iceberg tables)
简单介绍
模式感知执行的显着优势:
- 在计划时间:
更好的计划优化范围。
由于类型已知,因此可以正确估算列宽,因此可以更准确地估算成本。
如果某些数据类型验证失败,则可以安全地提前退出。 - 在运行时:
SchemaChange避免异常。所有次要片段都将对该模式有一个共同的理解。
读取数据及其统计数据元数据有助于构建更有效的计划并优化查询执行:
最佳连接规划,两阶段聚合与一阶段聚合计划,过滤条件的选择性估计,并行化决策至关重要。
考虑到以上几点,可以通过以下方式改进现有查询处理:
存储表架构并重用
收集,存储和重用表统计信息以改进查询计划
启用Metastore
通过以下命令配置,web ui 也是可以的
SET `metastore.enabled` = true; // 会话级别
ALTER SYSTEM SET `metastore.enabled` = true; // 系统级别
table Metastore
table Metastore 包含了以下信息:
table schema, 列名,类型
table 统计信息(统计信息,min,max,null,count。。。,直方图统计信息)
schema 优先级
drill 在查询计划以及执行阶段都会使用Metastore,同时drill提供了多种模式进行schema 的创建
当执行ANALYZE TABLE
命令的时候,drill 将使用如下规则:
基于table 函数提供的
在table 根目录提供的基于 shema file 定义的 `CREATE OR REPLACE SCHEMA`
基于文件数据推断的schema
分析table
参考命令,当执行完成之后我们可以在INFORMATION_SCHEMA 获取数据信息
ANALYZE TABLE `lineitem` REFRESH METADATA;
说明
以上是一个简单的介绍,详细的参考官方文档