xuefuz commented on a change in pull request #9445: [FLINK-13706][hive] add documentation of how to use Hive functions in… URL: https://github.com/apache/flink/pull/9445#discussion_r314124163
########## File path: docs/dev/table/hive/hive_functions.md ########## @@ -0,0 +1,150 @@ +--- +title: "Hive Functions" +nav-parent_id: hive_tableapi +nav-pos: 3 +--- +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +## Hive User Defined Functions + +Users can use their existing Hive User Defined Functions in Flink. + +Supported UDF types include: + +- UDF +- GenericUDF +- GenericUDTF +- UDAF +- GenericUDAFResolver2 + +Upon query planning and execution, Hive's UDF and GenericUDF are automatically translated into Flink's ScalarFunction, +Hive's GenericUDTF are automatically translated into Flink's TableFunction, +and Hive's UDAF and GenericUDAFResolver2 are translated into Flink's AggregateFunction. + +To use Hive User Defined Functions, user must set a HiveCatalog backed by Hive Metastore that contains that function as the current catalog, and have to use Blink planner. + +## Using Hive User Defined Functions + +Assuming we have the following Hive functions registered in Hive Metastore: + + +{% highlight java %} +/** + * Test simple udf. Registered under name 'myudf' + */ +public class TestHiveSimpleUDF extends UDF { + + public IntWritable evaluate(IntWritable i) { + return new IntWritable(i.get()); + } + + public Text evaluate(Text text) { + return new Text(text.toString()); + } +} + +/** + * Test generic udf. Registered under name 'mygenericudf' + */ +public class TestHiveGenericUDF extends GenericUDF { + + @Override + public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { + checkArgument(arguments.length == 2); + + checkArgument(arguments[1] instanceof ConstantObjectInspector); + Object constant = ((ConstantObjectInspector) arguments[1]).getWritableConstantValue(); + checkArgument(constant instanceof IntWritable); + checkArgument(((IntWritable) constant).get() == 1); + + if (arguments[0] instanceof IntObjectInspector || + arguments[0] instanceof StringObjectInspector) { + return arguments[0]; + } else { + throw new RuntimeException("Not support argument: " + arguments[0]); + } + } + + @Override + public Object evaluate(DeferredObject[] arguments) throws HiveException { + return arguments[0].get(); + } + + @Override + public String getDisplayString(String[] children) { + return "TestHiveGenericUDF"; + } +} + +/** + * Test split udtf. Registered under name 'mygenericudtf' + */ +public class TestHiveUDTF extends GenericUDTF { + + @Override + public StructObjectInspector initialize(ObjectInspector[] argOIs) throws UDFArgumentException { + checkArgument(argOIs.length == 2); + + // TEST for constant arguments + checkArgument(argOIs[1] instanceof ConstantObjectInspector); + Object constant = ((ConstantObjectInspector) argOIs[1]).getWritableConstantValue(); + checkArgument(constant instanceof IntWritable); + checkArgument(((IntWritable) constant).get() == 1); + + return ObjectInspectorFactory.getStandardStructObjectInspector( + Collections.singletonList("col1"), + Collections.singletonList(PrimitiveObjectInspectorFactory.javaStringObjectInspector)); + } + + @Override + public void process(Object[] args) throws HiveException { + String str = (String) args[0]; + for (String s : str.split(",")) { + forward(s); + forward(s); + } + } + + @Override + public void close() { + } +} + +{% endhighlight %} + +Users can use them in SQL as: Review comment: Maybe add some snippet from Hive cli to show those UDFs are registered in Hive. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
