...
// new APIs to TableEnvironment interface TableEnvironment { // load a module instance to the end of the module list void loadModule(String name, Module m); // unload a module instance from module list and other modules remain the same relative positions void unloadModule(String name); // the type string defined in the module // list all the modules' names according to order in module list List<String> listModules(); } // note the following modules will be of the order they are specified tableEnv.loadModule("a", MymoduleMyModule.INSTANCE); tableEnv.loadModule("b", new Xxx(properties)); tableEnv.loadModule("c", new Yyy()); tableEnv.unloadModule("a"); |
...
interface ModuleFactory extends TableFactory { Module createModule(String name, Map<String, String> properties); } |
...
We currently only move built-in functions into CoremoduleCoreModule.
public class CoreModule implements Module { public static final Core INSTANCE = new Core();
private CoreModule() { }
@Override public Set<String> listFunctions() { return BuiltInFunctionDefinitions.getDefinitions().stream() .map(f -> f.getName()) .collect(Collectors.toSet()); }
@Override public Optional<BuiltInFunctionDefinition> getFunctionDefinition(String name) { return BuiltInFunctionDefinitions.getDefinitions().stream() .filter(f -> f.getName().equalsIgnoreCaseequals(name)) .findFirst(); } } |
...
public abstract class HiveModuleFactory implements ModuleFactory {
@Override public Module createModule(String name, Map<String, String> properties) { return new HiveModule(properties.get("hive-version")); }
@Override public Map<String, String> requiredContext() { return new HashMap<String, String>() {{ put("type", "hive"); }}; }
@Override public List<String> supportedProperties() { return Arrays.asList("hive-version"); } } |
...
Java/Scala:
tableEnv.loadModule(CoreModule.INSTANCE"hive", new HiveModule("2.2.1")); |
...