首页 > 解决方案 > 屏蔽 json 值内的特定数据

问题描述

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

标签: jsongoogle-bigquery

解决方案


考虑下面的例子

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;            

带输出

在此处输入图像描述


推荐阅读