【问题标题】:Locate, regexp_replace UDFs Hive to replace string in a column定位,regexp_replace UDFs Hive 以替换列中的字符串
【发布时间】:2016-07-19 01:14:23
【问题描述】:

我有一张像下面这样的表格

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

首先我需要找出名称值是否包含“下划线”,然后 我需要根据具体情况将 name 值替换为“空格”或“逗号”。

如果性别是男性,我需要将“下划线”替换为空格 如果性别是女性,我需要用逗号替换“下划线”。

我在 google 中搜索过,我发现我需要使用 Locate(检查值中是否存在“下划线”)和 regexp_replace(根据条件用逗号替换下划线)我尝试了 When 和 @ 987654323@ 但出现错误。下面是我的代码。

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

谁能帮帮我。

【问题讨论】:

    标签: hive


    【解决方案1】:

    问题在于 '(' 使用下面的代码

    案例 当 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 结尾 AS 名称1

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-29
        • 2012-09-25
        • 2014-11-17
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-11
        • 2018-10-13
        • 2015-08-09
        相关资源
        最近更新 更多