我需要在一個Hive表的頂部創建一個視圖,掩蓋某一列的資料。 該表有一個字串型別的列。該列中的資料是JSON結構的。我需要屏蔽一個特定欄位的值,比如'ip_address'
。{"id"/span>。 1,"first_name"/span>。 "john","last_name"。 "doe","email"。 "[email protected]","ip_address":"111. 111.111.111"}
預期:
{"id"。 1,"first_name"/span>。 "john","last_name"。 "doe","email"。 "[email protected]","IP_address"。 null}
這些是我嘗試過的少數內置Hive函式,它們似乎對我的事業沒有幫助。
- mask
- get_json_object 。
- STR_TO_MAP
- if條款
另外,我不認為substring和regexp_Extract在這里有用,因為欄位值的位置并不總是預先確定的,而且我對regex運算式并不熟悉。
PS:感謝任何幫助,這將幫助我避免撰寫一個新的UDF。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318981.html
標籤:
