Hive: Как мы можем замаскировать конкретную пару значений ключа (содержащую данные PII) в объекте json, находящемся в столбце, в Hive? - PullRequest
0 голосов
/ 11 января 2019

Существуют данные PII, которые существуют в паре ключ-значение объекта json, хранящейся в моей таблице Hive в столбце. Есть ли способ, которым я могу замаскировать только значение требуемой пары ключ-значение, сохраняя при этом другие немаскированные

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать 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.

...