我正在使用包含Hive-0.13.1的Cloudera集群进行日常活动。
我的字符串模式很少,我需要找出Hive表中其中一列中是否存在这些模式。
示例:我所拥有的字符串模式是板球运动员的简称,例如" Dravid"," Sachin"," Ganguly"。我在配置单元中有一个列,其中包含所有板球运动员的全名。
select full_name from players limit 3;
Rahul Dravid
Sachin Ramesh Tendulkar
Sourav Ganguly
我需要将我的字符串模式与我的查询返回的值进行比较,并使用" Y"创建另一列。如果匹配或与#34; N"如果它不匹配。
除了Regex之外,如何编写Hive查询来实现这一目标?
答案 0 :(得分:0)
您可以将个案陈述与一样使用,或使用
在下面的查询中,我在full_name字段中使用了 lower function ,并将字段中的数据与较低的名称(dravid,sachin)进行了比较。
查询: -
select full_name,
case
lower(full_name) like '%dravid%'
or
lower(full_name) like '%ganguly%'
or
lower(full_name) like '%sachin%'
then 'Y'
else 'N'
end new_column_name
from players limit 3;
答案 1 :(得分:0)
使用条件函数if
和关系运算符RLIKE
进行正则表达式匹配的@Shu答案的缩短版本:
SELECT full_name,
if((lower(full_name) RLIKE 'dravid|sachin|ganguly'), 'Y', 'N') AS is_match
FROM players;