dremio 24 版本开始支持表优化,主要是对于iceberg的表优化
机制简单说明
dremio 认为256M 是一个很不错的优选大小,其他的认为就是过小后者过大
参考图
额外的能力
支持基于路由的job处理,当然对于社区版是不行的,需要自己扩展
一些限制
- 一次只能运行一个任务
- 当前不支持delete 排序,以及元数据的重写
内部代码简单说明
这部分只是简单看了下,没有仔细研究
主要是对于基于文件的存储扩展支持了优化FileSystemRulesFactory 类中 主要是对于物理规则的添加
case PHYSICAL:
return ImmutableSet.<RelOptRule>of(
new IcebergMetadataFilesystemScanPrule(pluginType, optimizerContext),
new EasyFilesystemScanPrule(pluginType),
new ParquetFilesystemScanPrule(pluginType),
new IcebergFilesystemScanPrule(pluginType, optimizerContext),
new DeltaLakeFilesystemScanPrule(pluginType, optimizerContext),
ConvertCountToDirectScan.getAggOnScan(pluginType),
ConvertCountToDirectScan.getAggProjOnScan(pluginType),
new TableFilesFunctionScanPrule(pluginType),
new FileSystemTableOptimizePrule(optimizerContext)
);
参考资料
sabot/kernel/src/main/java/com/dremio/exec/planner/OptimizePlanGenerator.java
sabot/kernel/src/main/java/com/dremio/exec/planner/physical/TableOptimizePruleBase.java
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/FileSystemRulesFactory.java
sabot/kernel/src/main/java/com/dremio/exec/planner/physical/FileSystemTableOptimizePrule.java
https://docs.dremio.com/software/data-formats/apache-iceberg/optimizing/
https://docs.dremio.com/software/sql-reference/sql-commands/apache-iceberg-tables/optimize-table/