屏蔽 json 值中的特定数据

时间:2021-02-23 12:59:19

标签: json google-bigquery

我必须屏蔽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;

1 个答案:

答案 0 :(得分: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;            

带输出

enter image description here