dremio FormatPlugin 设计上的一些限制-基于easy format 框架
对于FormatPlugin 我以前也零碎的介绍过一些,会和FormatCreator, FormatMatcher 存储插件等都有一些关系,核心主要还是对于
文件系统的格式处理,今天我在基于easy format 框架 自定义开发jsonline 格式化插件的时候发现目前dremio 对于支持的文件格式在系统中硬编码的,改动起来需要处理的地方比较多,以下简单说明下
基于easy format 框架FormatPlugin 的一些限制
- 命名
自己开发的格式化插件命名上比较重要,而且不能与以前的进行重复,重复了不会进行处理 - 处理的文件格式
目前支持的文件格式比较固定,尽管我们可以所以去写,但是实际执行以及处理上dremio 还会进行一次判断,会造成我们自己开发的格式
扩展是不能使用的(主要是基于easyformat 框架的问题)
说明
如果easy format 框架对于文件系统进行新的格式化插件开发,对于dremio 内部的一些处理我们还是需要一些修改的,不然支持上会有问题(ui 上也是需要同时处理的), 间接的解决方法就是在处理的时候就转化为支持的通用格式,目前支持的通用格式
new ImmutableBiMap.Builder<String, FileType>()
.put("csv", FileType.CSV)
.put("tsv", FileType.TSV)
.put("txt", FileType.TEXT)
.put("psv", FileType.PSV)
.put("json", FileType.JSON)
.put("avro", FileType.AVRO)
.put("parquet", FileType.PARQUET)
.put("iceberg", FileType.ICEBERG)
.put("delta", FileType.DELTA)
.put("xlsx", FileType.EXCEL)
.put("xls", FileType.XLS)
.put("unknown", FileType.UNKNOWN)
.put("dremarrow1", FileType.ARROW)
.put("log", FileType.HTTP_LOG)
.build();
参考资料
sabot/kernel/src/main/java/com/dremio/exec/store/dfs/easy/EasyFormatPlugin.java
services/namespace/src/main/java/com/dremio/service/namespace/file/FileFormatDefinitions.java
services/namespace/src/main/proto/namespace-file.proto
services/namespace/src/main/java/com/dremio/service/namespace/file/FileFormat.java