datavane / tis

Support agile DataOps Based on Flink, DataX and Flink-CDC, Chunjun with Web-UI
https://tis.pub
Apache License 2.0
983 stars 217 forks source link

实现一个hive Reader插件 #201

Closed baisui1981 closed 1 year ago

baisui1981 commented 1 year ago

离线分析完成之后需要将离线分析结果导入到外部存储中,需要Hive DataX Reader插件,之前hdfs Reader虽然也能用,但是配置太复杂,需要借助Hive MetaData 数据来反射hive的表存储信息,自动生成col meta

baisui1981 commented 1 year ago

已经支持,并且做了如下扩展:

  1. 伙伴插件工厂 DataXReader使用com.qlangtech.tis.plugin.CompanionPluginFactory 为 SelectedTab 创建伙伴插件,为DataXReader的SelectedTab提供属性扩展。 以下是在 DataXMongodbReader中使用的例子:

     public class DataXMongodbReader extends BasicDataXRdbmsReader<MangoDBDataSourceFactory> implements IMongoTableFinder {
        public static class DefaultDescriptor extends BasicDataXRdbmsReaderDescriptor //
              implements SubForm.ISubFormItemValidate, CompanionPluginFactory<SelectedTabExtend> {
    
          @Override
          public SelectedTabExtend getCompanionPlugin(UploadPluginMeta pluginMeta) {
              // ...
              return SelectedTabExtend.getBatchPluginStore(pluginMeta.getPluginContext(),
                      pluginMeta.getDataXName(true)).find(tabName, false);
          }
    
          @Override
          public Descriptor<SelectedTabExtend> getCompanionDescriptor() {
              return TIS.get().getDescriptor(MongoSelectedTabExtend.class);
          }
      }
    }
  2. 可以在不对SelectedTab 继承的情况下对DataXHiveReader.selectedTabs 的列表实例(SelectedTab) 进行扩展,使用com/qlangtech/tis/hive/reader/DataXHiveReader.selectedTabs.json配置文件 ,改变默认cols的显示方式 com.qlangtech.tis.extension.util.PluginExtraProps.ViewType 的 idlist 进行修改。
    {
    "cols": {
     "viewtype": "tuplelist", //改变成table方式显示
     "elementCreator": "com.qlangtech.tis.plugin.datax.mongo.MongoCMetaCreatorFactory",
     }
    }

    该配置文件是通过 https://github.com/datavane/tis/blob/59541e3218b06356c963f02be858deee5bcd78a1/tis-plugin/src/main/java/com/qlangtech/tis/extension/impl/SuFormProperties.java#L119-L125 代码覆写的

配置参数:

viewtype

idlist tuplelist
截屏2023-09-01 12 05 26 截屏2023-09-01 12 03 13

elementCreator

source 自定义扩展 element(CMeta)创建方法:

    public interface ElementCreatorFactory{
        CMeta create(JSONObject targetCol);
    }

源端 Selected Tab 校验:

由于dataX reader 中不能扩展 selectedTab,然后又通过自定义elementCreator属性修改了 selectedTable中cols中的Element元素类型,需要在selectedTab 表单提交的时,对表单进行校验,所以引入:

可以让selectTab 在提交时由宿主DataX Reader 执行表单校验:

interface ISubFormItemValidate {
        /**
         * 校验全部 selected tabs 表单
         *
         * @param msgHandler
         * @param context
         * @param props
         * @param subFormFilter
         * @param formData
         * @return
         */
        boolean validateSubFormItems(IControlMsgHandler msgHandler, Context context, BaseSubFormProperties props,
                                     IPropertyType.SubFormFilter subFormFilter, AttrVals formData);

        /**
         * 校验单个selected表单
         *
         * @param msgHandler
         * @param context
         * @param tab
         * @return
         */
        boolean validateSubForm(IControlMsgHandler msgHandler, Context context, SelectedTab tab);
    }