在Hive Views中屏蔽子字符串



我需要在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