Sql 配置单元查询:尝试使用WHERE进行字符串匹配,如在地图上<;字符串,字符串>;

Sql 配置单元查询:尝试使用WHERE进行字符串匹配,如在地图上<;字符串,字符串>;,sql,string,hadoop,hive,Sql,String,Hadoop,Hive,我是Hive的新手,正在尝试执行类似以下内容的搜索: SELECT * FROM table1 WHERE col1 LIKE "%abcd%"; 但是,当我这样做时,我会得到以下错误: 编译语句时出错:失败:SemanticException[错误] 10014]:第1:30行错误的参数“%abcd%”:没有匹配的方法 对于类org.apache.hadoop.hive.ql.udf.UDFLike,使用 (地图,字符串)。可能的选项:FUNC(字符串,字符串) 看起来col1的类型是错误的

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

SELECT * FROM table1 WHERE col1 LIKE "%abcd%";
但是,当我这样做时,我会得到以下错误:

编译语句时出错:失败:SemanticException[错误] 10014]:第1:30行错误的参数“%abcd%”:没有匹配的方法 对于类org.apache.hadoop.hive.ql.udf.UDFLike,使用 (地图,字符串)。可能的选项:FUNC(字符串,字符串)


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

这很可能就是你想要的

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

出现此错误是因为您在
map
type列上像查询一样运行。在配置单元中,如果列类型为map,则可以直接针对键搜索值,如下所示

select * from mytable where mycol['mykey'] = 'myvalue' 
您也可以像那样对其执行

select * from mytable where mycol['mykey'] like '%myvalue%' 
不确定密钥是否存在,然后

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

参考这篇文章了解更多你知道什么是地图吗?不客气。另外,请不要忘记接受我的回答,但上面说,因为我的代表<15,所以+1不会出现:“声誉低于15的人会被记录,但不会更改公开显示的帖子分数。”对不起。当我得到一个大于15的代表时,我会再次+1你的答案。这是向上投票。接受是通过标记V signI无法获取“,”map_值(mymap)与col1的关系来完成的。你能解释一下吗?我的地图是col1。我想澄清一下,我们正在处理一张地图