public FunctionInfo registerGenericUDF(String functionName, Class<? extends GenericUDF> genericUDFClass, FunctionResource... resources) { FunctionType functionType = isNative ? FunctionType.BUILTIN : FunctionType.TEMPORARY; return registerGenericUDF(functionName, functionType, genericUDFClass, resources); }
public FunctionInfo registerGenericUDF(String functionName, Class<? extends GenericUDF> genericUDFClass, FunctionResource... resources) { FunctionType functionType = isNative ? FunctionType.BUILTIN : FunctionType.TEMPORARY; return registerGenericUDF(functionName, functionType, genericUDFClass, resources); }
@SuppressWarnings("unchecked") private FunctionInfo registerFunction( String functionName, FunctionType functionType, Class<?> udfClass, FunctionResource... resources) { FunctionUtils.UDFClassType udfClassType = FunctionUtils.getUDFClassType(udfClass); switch (udfClassType) { case UDF: return registerUDF( functionName, functionType, (Class<? extends UDF>) udfClass, false, functionName.toLowerCase(), resources); case GENERIC_UDF: return registerGenericUDF( functionName, functionType, (Class<? extends GenericUDF>) udfClass, resources); case GENERIC_UDTF: return registerGenericUDTF( functionName, functionType, (Class<? extends GenericUDTF>) udfClass, resources); case UDAF: return registerUDAF( functionName, functionType, (Class<? extends UDAF>) udfClass, resources); case GENERIC_UDAF_RESOLVER: return registerGenericUDAF( functionName, functionType, (GenericUDAFResolver) ReflectionUtil.newInstance(udfClass, null), resources); case TABLE_FUNCTION_RESOLVER: // native or not would be decided by annotation. need to evaluate that first return registerTableFunction(functionName, functionType, (Class<? extends TableFunctionResolver>) udfClass, resources); } return null; }
@SuppressWarnings("unchecked") private FunctionInfo registerFunction( String functionName, FunctionType functionType, Class<?> udfClass, FunctionResource... resources) { FunctionUtils.UDFClassType udfClassType = FunctionUtils.getUDFClassType(udfClass); switch (udfClassType) { case UDF: return registerUDF( functionName, functionType, (Class<? extends UDF>) udfClass, false, functionName.toLowerCase(), resources); case GENERIC_UDF: return registerGenericUDF( functionName, functionType, (Class<? extends GenericUDF>) udfClass, resources); case GENERIC_UDTF: return registerGenericUDTF( functionName, functionType, (Class<? extends GenericUDTF>) udfClass, resources); case UDAF: return registerUDAF( functionName, functionType, (Class<? extends UDAF>) udfClass, resources); case GENERIC_UDAF_RESOLVER: return registerGenericUDAF( functionName, functionType, (GenericUDAFResolver) ReflectionUtil.newInstance(udfClass, null), resources); case TABLE_FUNCTION_RESOLVER: // native or not would be decided by annotation. need to evaluate that first return registerTableFunction(functionName, functionType, (Class<? extends TableFunctionResolver>) udfClass, resources); } return null; }
private void createHiveServer() { HiveServer2 server = new HiveServer2(); server.init(new HiveConf()); for (Service service : server.getServices()) { if (service instanceof CLIService) { _client = (CLIService) service; } } Preconditions.checkNotNull(_client, "CLI service not found in local Hive server"); try { _sessionHandle = _client.openSession(null, null, null); _functionRegistry = SessionState.getRegistryForWrite(); // "map_from_entries" UDF is required to create maps with non-primitive key types _functionRegistry.registerGenericUDF("map_from_entries", MapFromEntriesWrapper.class); // TODO: This is a hack. Hive's public API does not have a way to register an already created GenericUDF object // It only accepts a class name after which the parameterless constructor of the class is called to create a // GenericUDF object. This does not work for HiveTestStdUDFWrapper as it accepts the UDF classes as parameters. // However, Hive has an internal method which does allow passing GenericUDF objects instead of classes. _functionRegistryAddFunctionMethod = _functionRegistry.getClass().getDeclaredMethod("addFunction", String.class, FunctionInfo.class); _functionRegistryAddFunctionMethod.setAccessible(true); } catch (HiveSQLException | NoSuchMethodException e) { throw new RuntimeException(e); } }
functionName, (Class<? extends UDF>) udfClass, false, resources); case GENERIC_UDF: return registerGenericUDF( functionName, (Class<? extends GenericUDF>) udfClass, resources); case GENERIC_UDTF: