Hive: Reflect UDF
2024-09-06 15:07:52
Reflect UDF
JAVA类和方法通常用于处理用户希望在hive中使用的确切的函数。相比与封装一个UDF然后调用这个方法,这些
方法主要通过反射UDF去调用。Reflect使用Java反射去实例化,
并且调用对象的方法;也能够调用静态方法。这个方法必须返回一个基础类或者一个hive能序列化的类。 SELECT reflect("java.lang.String", "valueOf", 1),
reflect("java.lang.String", "isEmpty"),
reflect("java.lang.Math", "max", 2, 3),
reflect("java.lang.Math", "min", 2, 3),
reflect("java.lang.Math", "round", 2.5),
reflect("java.lang.Math", "exp", 1.0),
reflect("java.lang.Math", "floor", 1.9)
FROM src LIMIT 1;
结果:
1 true 3 2 3 2.7182818284590455 1.0 注意:
1. 0.9.0采用了java_method()
2. Reflect UDF是不确定返回值的。它不能保证在给予相同的参数时,返回值。因此小心在where子句中使用,因为会使谓词下推失败
谓词下推
谓词下推的基本思想:尽可能早的处理表达式(expressions),默认产生的执行计划在看到数据的地方添加过滤
器filter,但是有些情况过滤filter表达式expressions被推到离第一次看到数据的操作operator更近。
如,select a.*, b.* from a join b on (a.col1 = b.col1) where a.col1 > 20 and b.col2 > 40(个人理解,where后面的句子为谓词,)
当没有谓词下推时,执行的顺序是
a join b , 然后再 filter
使用谓词下推时,执行的顺序是
a b 先进行过滤,然后再进行 join操作
开启谓词下推功能
set hive.optimize.ppd=true
参考官方文档:https://cwiki.apache.org/confluence/display/Hive/ReflectUDF
最新文章
- 【干货】jsMind思维导图整合Easyui的右键菜单
- Git合并分支操作
- Steve Loughran:Why not raid 0,its about time and snowflakes!!!
- 同一web系统,不同端口的跨域问题
- 为android项目集成maven
- 如何创建支持Eclipse IDE的Maven项目
- Linux 套接字编程中的 5 个隐患
- javascript 浏览器执行断点
- 单片机C语言实现的采用DS18B20的温度检测装置
- pydev去掉右边的预览栏minimap
- vue2重写饿了么
- uva10003 区间DP
- 收集nodejs经典组件:
- 为何写flash的时候要地址左移一位?
- Maven项目中获取classpath和资源文件的路径
- Linux系统上面使用python切割nginx日志
- SSH框架整合,css、js会被过滤器过滤掉
- Linux 小知识翻译 - 「架构 续」(arch)
- typedef 用法总结
- SPLAY,LCT学习笔记(一)