找到,regexp_replace UDFs Hive来替换列中的字符串

时间:2016-07-18 15:28:19

标签: hive

我有一张如下表格

names    age  gender
v_mark   25   male
j_david  26   male
S_Rose   28   Female
mark     21   male

首先,我需要找出名称值包含"下划线"或不,那么 我需要更换"下划线"与"空间"或者"逗号" 名称值基于特定条件。

如果性别是男性,我需要更换"下划线"与空间 如果性别是女性,我需要更换"下划线"用逗号。

我在谷歌搜索过,我发现我需要使用Locate(检查"下划线"值是否存在)和regexp_replace(根据条件用逗号替换下划线)我试过WhenCase,但收到错误。以下是我的代码。

CASE
(
WHEN LOCATE("_",Table1.names)-1 > 0 AND Table1.gender='male'  THEN regexp_replace(T1.names, "_"," ")
WHEN LOCATE("_",Table1.names)-1 > 0 AND Table1.gender='Female'  THEN regexp_replace(T1.names, "_",",")
ELSE Table1.names
END
    ) AS names1

我需要像

这样的输出
names1    age  gender
v mark   25   male
j david  26   male
S,Rose   28   Female
mark     21   male

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

问题与'(' ,在代码下面使用案例后

CASE 当位置(" _",Table1.names)-1> 0和Table1.gender ='男性'那么regexp_replace(T1.names," ","") 当位置(" ",Table1.names)-1> 0和Table1.gender ='女性'那么regexp_replace(T1.names," _",",") ELSE Table1.names 结束     AS名称1

答案 1 :(得分:0)

案例陈述和正则表达式将为您提供所需的结果。

SELECT 
  CASE gender
    WHEN 'male' THEN regexp_replace(names, "_"," ")
    WHEN 'Female' THEN regexp_replace(names, "_",",")
  END AS names, 
  age, 
  gender
FROM table;