如何使用REGEXP_REPLACE屏蔽Hive中的列?

时间:2018-05-30 08:51:58

标签: hive masking

我正在尝试使用regexp_replace来实现以下在Hive中屏蔽地址字段的要求。

如果我有一个地址字段,我需要保留1,4,8,12 ..(4的倍数)位置的字符,并将剩余字符替换为' X',应保留空格。

我已经在Teradata中取得了成果,但使用相同的函数和参数与Hive SQL斗争。

Teradata代码:

SELECT 
RegExp_Replace(RegExp_Replace(
RegExp_Replace
('CHANGI COURT', '(.)(.)?(.)?(.)?', '(\1(\2[\3(\4', 2,0,'c'),'(\([^ ])', 'X', 1,0,'c'),'(\(|\[)', '', 1,0,'c');

Teradata结果按预期工作:

  

CXXNXX CXXXT

Hive Code:

SELECT 
RegExp_Replace(RegExp_Replace(
RegExp_Replace
('CHANGI COURT', '(.)(.)?(.)?(.)?', '(\1(\2[\3(\4', 2,0,'c'),'(\([^ ])', 'X', 1,0,'c'),'(\(|\[)', '', 1,0,'c');

Hive错误

  

FAILED:SemanticException [错误10014]:第1:37行错误的参数'''':   没有类org.apache.hadoop.hive.ql.udf.UDFRegExpReplace的匹配方法   with(string,string,string,int,int,string)。可能的选择:    FUNC (string,string,string)(state = 42000,code = 10014)

我还附上了Hive和Teradata的代码和结果截图。

Teradata代码:

Working Teradata code

Teradata结果:

Teradata Resultset

Hive代码:

Hive code

Hive错误:

Hive code error

这可以在HIVE中实现吗?

0 个答案:

没有答案