Hive查询:尝试使用WHERE,LIKE在地图<string,string =“”>上进行字符串匹配

时间:2017-04-10 14:41:33

标签: sql string hadoop hive

我是Hive的新手,正在尝试进行类似以下的搜索:

SELECT * FROM table1 WHERE col1 LIKE "%abcd%";

然而,当我这样做时,我收到以下错误:

  

编译语句时出错:FAILED:SemanticException [错误   10014]:第1:30行错误的参数'“%abcd%”':没有匹配的方法   for class org.apache.hadoop.hive.ql.udf.UDFLike with   (地图,字符串)。可能的选择: FUNC (字符串,字符串)

看起来col1的类型错误,即地图的数据类型。有没有一种简单的方法可以在此列中搜索'%abcd%'模式?谢谢!

2 个答案:

答案 0 :(得分:3)

这很可能是你想要的

select  *
from    mytable 
where   concat_ws(',',map_values(mymap)) like '%abcd%'

答案 1 :(得分:0)

您收到此错误,是因为您在map<string,string>类型的列上像查询一样运行。在蜂巢中,如果列类型是map,那么您可以像这样直接通过键搜索值

select * from mytable where mycol['mykey'] = 'myvalue' 

您也可以对此执行like

select * from mytable where mycol['mykey'] like '%myvalue%' 

不确定密钥是否存在

select * from mytable where mycol['mykey'] is not null limit 1

请参阅此帖子,以获取更多here