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

最新文章

  1. 【干货】jsMind思维导图整合Easyui的右键菜单
  2. Git合并分支操作
  3. Steve Loughran:Why not raid 0,its about time and snowflakes!!!
  4. 同一web系统,不同端口的跨域问题
  5. 为android项目集成maven
  6. 如何创建支持Eclipse IDE的Maven项目
  7. Linux 套接字编程中的 5 个隐患
  8. javascript 浏览器执行断点
  9. 单片机C语言实现的采用DS18B20的温度检测装置
  10. pydev去掉右边的预览栏minimap
  11. vue2重写饿了么
  12. uva10003 区间DP
  13. 收集nodejs经典组件:
  14. 为何写flash的时候要地址左移一位?
  15. Maven项目中获取classpath和资源文件的路径
  16. Linux系统上面使用python切割nginx日志
  17. SSH框架整合,css、js会被过滤器过滤掉
  18. Linux 小知识翻译 - 「架构 续」(arch)
  19. typedef 用法总结
  20. SPLAY,LCT学习笔记(一)

热门文章

  1. JVM 专题十五:执行引擎
  2. 使用eval将字符串转化成字典时报name 'null' is not defined错误解决办法
  3. 微信小程序支付、小程序支付功能、小程序支付方法、微信小程序支付方法
  4. unity-TextAsset
  5. linux中无法使用vim命令
  6. 不吹不擂,315 道 Python 面试题,欢迎挑战!
  7. 使用truncate ,截断有外键约束的父表
  8. vue配置 less 全局变量
  9. [spring] -- 事务篇
  10. DJANGO-天天生鲜项目从0到1-001-环境框架搭建