Hive UDF进阶

Java的类中可以定义静态代码块, 每次我们使用hive的create [temporary] function语句时,会调用UDF中的静态代码块.

静态代码块是类加载时用到调用的.


UDF并不是每有一行记录就会实例化一次, 而是复用的. Hive会在HiveQL语句运行之初就实例化若干个UDF的实例.


由于Hive的join语句对条件限制比较严格, 不能随意使用大于或小于作join的条件.所以UDF有时可以用来代替join.

例如有两张表A表大, B表小, 都一列时间. 现在要在两张表的时间列上join, join的条件不是两列时间相等, 而是两列时间最接近.

这时候就可以使用UDF来代替join

构造函数:

把B表(因为它是小表), 相关列读入内存

(注意Hive的compilation lock, 在UDF中执行HiveQL, 要开启hive.driver.parallel.compilation=true)


evaluate函数:

遍历A表, 返回对应最接近日期.

猜你喜欢

转载自blog.csdn.net/rav009/article/details/80454984