Вы можете использовать regexp_replace
, чтобы заменить некоторые значения в json какой-либо строкой (см. Столбец json_with_number_replaced
в приведенном ниже примере).
Лучше применять sha256
вместо простой замены, потому что эта функция криптографически сильна (необратимая односторонняя функция), детерминирована и допускает столкновения. Эти свойства хеш-функции sha256 позволяют объединять запутанные значения (если используется тот же метод запутывания) и выполнять агрегирование. Вы все еще можете посчитать разные mobile_numbers после запутывания. См. Вычисление столбцов mobile_number_obfuscated
и json_with_number_obfuscated
в следующем примере:
select json original_json,
s.original_mobile_number,
s.mobile_number_obfuscated,
regexp_replace(s.json, '(mob_no":[\\s]?")([+]?[\\d]+)','$1xx') as json_with_number_replaced,
regexp_replace(s.json, '(mob_no":[\\s]?")([+]?[\\d]+)',concat('$1',mobile_number_obfuscated)) as json_with_number_obfuscated
from
(
select regexp_extract(s.json, 'mob_no":[\\s]?"([+]?[\\d]+)',1) as original_mobile_number,
java_method('org.apache.commons.codec.digest.DigestUtils', 'sha256Hex', regexp_extract(s.json, 'mob_no":[\\s]?"([+]?[\\d]+)',1)) mobile_number_obfuscated,
s.json
from
(--original data
select '{ "name":"John", "age":30, "car":null, "mob_no": "+99999999"}' as json
)s
)s;
OK
original_json original_mobile_number mobile_number_obfuscated json_with_number_replaced json_with_number_obfuscated
{ "name":"John", "age":30, "car":null, "mob_no": "+99999999"} +99999999 98ae38dddc1994179e21d104feb7b09e5627953d9fe9b9851239ac445b6de3cd { "name":"John", "age":30, "car":null, "mob_no": "xx"} { "name":"John", "age":30, "car":null, "mob_no": "98ae38dddc1994179e21d104feb7b09e5627953d9fe9b9851239ac445b6de3cd"}
Time taken: 1.988 seconds, Fetched: 1 row(s)
В этом примере я продемонстрировал, как вы можете использовать regexp_replace для замены значения для некоторого ключа в JSON, а также как использовать sha256 для маскировки ваших данных PII.