dremio 24 版本对于表优化的处理

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/sql/handlers/query/OptimizeHandler.java
sabot/kernel/src/main/java/com/dremio/exec/planner/sql/handlers/query/OptimizeOptions.java
sabot/kernel/src/main/java/com/dremio/exec/planner/sql/parser/SqlOptimize.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/

posted on 2023-02-12 19:28  荣锋亮  阅读(48)  评论(0编辑  收藏  举报

导航