encryption - 使用 UDF 的 Hive 查询

标签 encryption hadoop hive

我在 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/

相关文章:

java - BouncyCaSTLe 最后一个字节解密问题

java - Android上的Whatsapp数据库解密

mysql - Coldfusion ENCRYPT 和 MySQL AES_DECRYPT 一起工作?

hadoop - 如何从 Hive 表中获取 lastaltertimestamp?

android - 在 Android 中拦截外发短信

hadoop - 有关Pagerank执行的疑问

hadoop - 在发送到 channel 之前删除空的 Flume 事件

mysql - 插入导致异常 ParseException 行 1 :12 missing TABLE at 'table_name' near '<EOF>' 的 Select 命令

apache - 我可以仅将源文件中的特定数据加载到HIVE表中吗?

hadoop - PyHive忽略Hive配置