1
我写了一个蜂巢UDF使用一个内部的API如下,做解密:蜂巢UDF执行
public Text evaluate(String customer) {
String result = new String();
if (customer == null) { return null; }
try {
result = com.voltage.data.access.Data.decrypt(customer.toString(), "name");
} catch (Exception e) {
return new Text(e.getMessage());
}
return new Text(result);
}
和Data.decrypt做:
public static String decrypt(String data, String type) throws Exception {
configure();
String FORMAT = new String();
if (type.equals("ccn")) {
FORMAT = "CC";
} else if (type.equals("ssn")) {
FORMAT = "SSN";
} else if (type.equals("name")) {
FORMAT = "AlphaNumeric";
}
return library.FPEAccess(identity, LibraryContext.getFPE_FORMAT_CUSTOM(),String.format("formatName=%s", FORMAT),authMethod, authInfo, data);
}
其中配置( )创建了一个相当昂贵的上下文对象。
我的问题是:Hive是否为查询返回的每一行执行一次UDF?即如果我选择10,000行,评估方法是否运行10,000次?
我的直觉告诉我是。如果是的话,那么这里的第二个问题:
有什么办法,我可以做下列之一:
一)运行配置()一旦第一次启动查询时,然后共享上下文对象
b)代替UDF返回一个解密的字符串,它将加密的字符串聚合成一些Set,然后我对该集合进行批量解密?
在此先感谢
是的。在我发布问题后约两分钟,我就可以做**静态{} **。 –