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表, 返回对应最接近日期.
---------------------本文来自 爱知菜 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/rav009/art ... 984?utm_source=copy
|
|