我在 HDFS csv 中有一些加密数据,我已经为其创建了一个 Hive 表,我想运行一个 Hive 查询,该查询首先加密查询参数,然后进行查找。我有一个按如下方式进行加密的 UDF:
public class ParamEncrypt extends UDF {
public Text evaluate(String name) throws Exception {
String result = new String();
if (name == null) { return null; }
result = ParamData.encrypt(name);
return new Text(result);
}
}
然后我将 Hive 查询运行为:
select * from cc_details where first_name = encrypt('Ann');
问题是,它正在对表中的每条记录运行 encrypt('Ann')。我希望它进行一次加密,然后进行匹配。我试过:
select * from cc_details where first_name in (select encrypt('Ann') from cc_details limit 1);
但是 Hive 不支持 IN 或 where 子句中的 select 查询。
我能做什么?
我可以做类似的事情吗:
select encrypt('Ann') as ann from cc_details where first_name = ann;
这也行不通,因为查询解析器会抛出一个错误,提示 ann 不是已知列
最佳答案
最后通过右外连接作为
select * from cc_details ssn_tbl
right outer join ( select encrypt('850-37-8230','ssn') as ssn
from cc_details limit 1) ssn_tmp
on (ssn_tbl.ssn = ssn_tmp.ssn);
关于encryption - 使用 UDF 的 Hive 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945044/