【问题标题】:Masking the specific data inside the json value屏蔽 json 值内的特定数据
【发布时间】:2021-02-23 12:59:19
【问题描述】:

我必须屏蔽IP和名称对应的数据。但是,屏蔽函数将 '\\2' 视为文本并对其应用屏蔽,而不是引用实际值。

with a as (
select (' {"Category": "test","abc": {"IP": "2401:4900:52f0:304a:34cd:93e6:ea31:3cce"}, "xyz": {"name": "Sai"}}') as json
)
select 
  *,
  regexp_replace(json, r'("_nanoseconds": )([":0-9a-zA-Z ]+)', concat('\\1',TO_HEX(md5('\\2')))) as dummy_json
dummy_json
from a;

【问题讨论】:

  • 在这种情况下_nanoseconds 是什么?你的意思是IP?您的预期输出是什么?
  • 是的,我将通过IPname 代替_nanoseconds。 @Mikhail 共享了查询和输出,这是我的预期输出。

标签: json google-bigquery


【解决方案1】:

考虑下面的例子

create temp function mask_json(json string, key string) as (
  replace (json, 
    regexp_extract(json, r'"' || key || '": "[^""]+"'), 
    concat('"' || key || '": "' || to_hex(md5(regexp_extract(json, r'"' || key || '": "([^""]+)"'))) || '"')
  ));
with a as (
  select (' {"Category": "test","abc": {"IP": "2401:4900:52f0:304a:34cd:93e6:ea31:3cce"}, "xyz": {"name": "Sai"}}') as json
)
select 
  mask_json(mask_json(json, 'IP'), 'name') masked_json
from a;            

有输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2016-04-07
    • 1970-01-01
    • 2014-03-03
    • 2021-05-21
    • 2021-12-05
    • 2018-11-07
    相关资源
    最近更新 更多