I have some encrypted data in an HDFS csv, that I've created a Hive table for, 
and I want to run a Hive query that first encrypts the query param, then does 
the lookup.  I have a UDF that does encryption as follows:

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);
  }
}

Then I run the Hive query as:

  select * from cc_details where first_name = encrypt('Ann');

The problem is, it's running encrypt('Ann') across every single record in the 
table.  I want it do the encryption once, then do the matchup.  I've tried:

  select * from cc_details where first_name in (select encrypt('Ann') from 
cc_details limit 1);

But Hive doesn't support **IN** or select queries in the where clause.

What can I do?

Can I do something like:

  select encrypt('Ann') as ann from cc_details where first_name = ann;

That also doesn't work because the query parser throws an error saying **ann** 
is not a known column

Thanks,

Sam

Reply via email to