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

posted on 2024-06-03 06:41  荣锋亮  阅读(5)  评论(0编辑  收藏  举报

导航