我需要在Hive表的顶部创建一个视图,屏蔽特定列中的数据。该表有一个字符串类型的列。该特定列中的数据是JSON结构。我需要屏蔽一个特定字段的值比如'ip_address'
{"id":1,"first_name":"john","last_name":"doe","email":"sample@123.com","ip_address":"111.111.111.111"}
:
{"id":1,"first_name":"john","last_name":"doe","email":"sample@123.com","ip_address":null}
这些是我尝试过的几个内置Hive函数,它们似乎对我的事业没有帮助。
面具- get_json_object
- STR_TO_MAP <
- 如果条款/gh>
我也不认为substring和regexp_Extract在这里是有用的,因为字段值的位置并不总是预先确定的,加上我不熟悉regex表达式。
PS:如果能帮助我避免编写新的UDF,我将不胜感激。
regexp_replace:
select regexp_replace(column_name,'"ip_address":".*?"', '"ip_address":null') as column_name
在任何位置都可以正常工作。
您可以在:
前后添加任意数量的可选空格:
regexp_replace(column_name,'"ip_address" *: *".*?"', '"ip_address":null')
Regexp'"ip_address" *: *".*?"'
含义:
"ip_address"
-字面"ip_address"
*
- 0个或多个空格(允许在json中)
:
-字面意思是:
*
- 0或更多空格
".*?"
-双引号内任意数目的任意字符(非贪婪)。
参见类似的问题,如果你想用一些计算值代替值,例如使用sha256混淆,而不仅仅是null: https://stackoverflow.com/a/54179543/2700344