Hiveテーブルを作成したHDFScsvに暗号化されたデータがあり、最初にクエリパラメータを暗号化してからルックアップを実行する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')が実行されていることです。暗号化を1回行ってから、対戦を行います。私はもう試した:
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が既知の列ではないというエラーをスローするため、これも機能しません。