本文翻译自官网:Hive Functions  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/hive/hive_functions.html

Flink Table Api & SQL 翻译目录

用户可以在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(开发技术)相关的推文

最新文章

  1. 混合框架中Oracle数据库的还原处理操作
  2. RestController 和Controller的区别
  3. Tomcat+Nginx+Lvs部署方案与性能调优
  4. centos7中 npm install express 时Error: Cannot find module 'express'错误
  5. Vimium 快捷键记录
  6. PHP PDO函数库具体解释
  7. 【JPA】表达条件查询的关键字
  8. Csharp实现快速排序
  9. VS2010程序打包操作
  10. Kendo UI开发教程(8): Kendo UI 特效概述
  11. docker环境下使用xdebug进行断点调试
  12. Nginx+keepalived 双机热备(主从模式)
  13. python变量进阶(可变不可变,局部变量和全局变量)
  14. python的数字图像处理学习(1)
  15. [Leetcode]下一个更大元素II
  16. 实操一下<python cookbook>第三版1
  17. Node.js 模块之 morgan中间件记录日志
  18. KBMMW 4.80.00 发布
  19. Java 同步器
  20. JSP状态管理 及 Cookie实例

热门文章

  1. org.apache.ibatis.exceptions.PersistenceException:
  2. 什么是 MFA?
  3. 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法
  4. Nested List Weight Sum
  5. reids 数据库学习
  6. minikube 安装试用
  7. Android 系统Action大全
  8. TypeError: BlobBuilder is not a constructor
  9. proxmox之cloud-init
  10. oracle--CKPT