在 Hive 视图中屏蔽子字符串

Posted

技术标签:

【中文标题】在 Hive 视图中屏蔽子字符串【英文标题】:Masking a Substring in Hive Views 【发布时间】:2021-08-10 12:19:04 【问题描述】:

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

这些是我尝试过的少数Built-in Hive Functions,它们似乎对我的事业没有帮助。

面具 get_json_object STR_TO_MAP if 子句

我也不认为 substring 和 regexp_Extract 在这里有用,因为字段值的位置并不总是预先确定的,而且我不熟悉正则表达式。

PS:感谢任何可以帮助我避免编写新 UDF 的帮助。

【问题讨论】:

请注意,上面的 json 在 Hive 的 String Type 列中。 【参考方案1】:

regexp_replace:

select regexp_replace(column_name,'"ip_address":".*?"', '"ip_address":null') as column_name 适用于任何位置。

您可以在: 前后添加任意数量的可选空格:

regexp_replace(column_name,'"ip_address" *: *".*?"', '"ip_address":null')

正则表达式'"ip_address" *: *".*?"'含义:

"ip_address" - 字面意思是“ip_address”

* - 0 个或多个空格(在 json 中允许)

: - 字面意思是:

* - 0 个或多个空格

".*?" - 双引号内任意数量的任意字符(非贪婪)。

如果您想用一些计算值替换值,请参见类似的问题,例如使用 sha256 进行混淆,而不仅仅是 null:https://***.com/a/54179543/2700344

【讨论】:

以上是关于在 Hive 视图中屏蔽子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

[在python中使用正则表达式搜索字符串子字符串

如何更改python字符串子字符串信息

使用 Python 的字符串子序列内核和 SVM

数组篇在python中如何查找最长字符串子串