我在hive表list_ids
中有一个列,它是以逗号分隔的字符串形式存储的id列表。
如何为此列编写查询以检查它是否存储特定的ID
示例:
list_ids = "abc,cde,efg"
我想要像
这样的东西 select * from table_name where list_ids contains cde;
答案 0 :(得分:25)
使用Hive标准函数split
和array_contains
split(string str, string pat)
通过将pat(正则表达式)拆分为
array<string>
如果数组包含值,则 array_contains(array<T>, value)
返回true
<强> select * from table_name where array_contains(split(list_ids,','),'cde')
强>
答案 1 :(得分:16)
Hive支持LIKE
运算符。您可以使用以下方法轻松完成:
select * from table_name where list_ids like '%cde%';
查看此语言手册以获取更多信息:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
答案 2 :(得分:0)
使用Hive功能爆炸即可实现此目的。
实施例
从table_name中选择*
左侧视图爆炸(list_ids) explosion_table为list_id_tbl
其中list_ids =&#39; cde&#39;