如果你想做到不爆炸,那么你需要编写自定义UDF。
sha256 hash 是一种很好的数据混淆方法(在 Hive 中是 sha2(input, 256) 函数),因为它是可容忍冲突和确定性的单向函数。单向意味着不可能反转(加密强),耐碰撞意味着对于不同的输入值获得相同哈希的概率非常低,确定性意味着对于相同的输入它始终是相同的哈希,此属性允许您对散列属性执行连接并计算不同的散列值,以与未散列相同的方式执行其他分析和聚合。
使用原生 Hive 函数,可以分解,应用 sha256,然后再次收集数组。
例如这样:
select t.id,
collect_list(named_struct('name', sha2(e.name, 256), 'age', e.age, 'gender', e.gender)) as result_array
from mytable t
lateral view outer inline(t.biodata) e as name, age, gender
group by t.id
在数据仓库中的所有数据中应用 sha256 仍然可以让您通过散列值进行分析和连接,但如果没有原始值->散列映射就无法反转 sha256。
此外,您可能希望将空值或其他“特殊值”设置为 NULL 或空,而不是像这样散列它们:case when name = '' or name = 'NA' then '' else sha2(name, 256) end,这样分析和过滤这些值会更方便。
sha256 的长度为 64 HEX 位,不依赖于输入长度。 'test' 输入字符串示例:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
对于没有原生 sha2 的旧 Hive 版本,您可以使用 reflect 或 java_method 调用 DigestUtils 方法:reflect('org.apache.commons.codec.digest.DigestUtils', 'sha256Hex', input)
安全性较低且耐冲突性较差的哈希方法是 MD5: md5(input)。
Hive 还具有用于屏蔽数据的 mask_hash 函数,该函数基于 Hive 2.x 中的 MD5 和 changed to use sha256 in Hive 3.0, see code changes,您可以使用该代码并阅读此博客以了解如何使用 sort array(struct) by specified struct field in GenericUDF,这将如果你想要自定义 UDF,给你一个好的开始