我必须屏蔽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;
答案 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;
带输出