我正在尝试使用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代码:
Teradata结果:
Hive代码:
Hive错误:
这可以在HIVE中实现吗?