【翻译】Flink Table Api & SQL — Hive —— Hive 函数
2024-09-03 20:54:42
本文翻译自官网:Hive Functions https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/hive/hive_functions.html
用户可以在Flink中使用 Hive 现有的自定义函数。
支持的UDF类型包括:
- UDF
- GenericUDF
- GenericUDTF
- UDAF
- GenericUDAFResolver2
根据查询的计划和执行,Hive的UDF和GenericUDF会自动转换为Flink的ScalarFunction,Hive的GenericUDTF会自动转换为Flink的TableFunction,Hive的UDAF和GenericUDAFResolver2会转换为Flink的AggregateFunction。
要使用Hive用户定义的函数,用户必须
- 设置由Hive Metastore支持的HiveCatalog,其中包含该函数作为会话的当前 catalog
- 在Flink的classpath中包含该函数的 jar
- 使用 Blink planner
使用Hive 自定义的函数
假设我们在Hive Metastore中注册了以下Hive函数:
/**
* 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() {
}
}
从Hive CLI中,我们可以看到它们已注册:
hive> show functions;
OK
......
mygenericudf
myudf
myudtf
然后,用户可以在SQL中以如下方式使用它们:
Flink SQL> select mygenericudf(myudf(name), 1) as a, mygenericudf(myudf(age), 1) as b, s from mysourcetable, lateral table(myudtf(name, 1)) as T(s);
局限性
Flink中现时不支持Hive内置内置。要使用Hive内置函数,用户必须首先在Hive Metastore中手动注册它们。
仅在Blink planner中测试了Flink 批处理对Hive功能的支持。
Hive函数当前不能在Flink中的各个 catalog 之间使用。
有关数据类型限制,请参考Hive。
欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文
最新文章
- 混合框架中Oracle数据库的还原处理操作
- RestController 和Controller的区别
- Tomcat+Nginx+Lvs部署方案与性能调优
- centos7中 npm install express 时Error: Cannot find module 'express'错误
- Vimium 快捷键记录
- PHP PDO函数库具体解释
- 【JPA】表达条件查询的关键字
- Csharp实现快速排序
- VS2010程序打包操作
- Kendo UI开发教程(8): Kendo UI 特效概述
- docker环境下使用xdebug进行断点调试
- Nginx+keepalived 双机热备(主从模式)
- python变量进阶(可变不可变,局部变量和全局变量)
- python的数字图像处理学习(1)
- [Leetcode]下一个更大元素II
- 实操一下<;python cookbook>;第三版1
- Node.js 模块之 morgan中间件记录日志
- KBMMW 4.80.00 发布
- Java 同步器
- JSP状态管理 及 Cookie实例