我在 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 在 where 子句中不支持IN或 select 查询。
我能做些什么?
我可以做类似的事情:
select encrypt('Ann') as ann from cc_details where first_name = ann;
这也不起作用,因为查询解析器抛出一个错误,说ann不是已知列