首页 > 解决方案 > Hive查询:根据条件选择一列,另一列值匹配某些特定值,然后将匹配结果创建为新列

问题描述

我必须在 HiveQL 中进行一些查询和创建列操作。

例如,

app      col1

app1     anybody love me?
app2     I hate u
app3     this hat is good
app4     I don't like this one
app5     oh my god
app6     damn you.
app7     such nice girl
app8     xxxxx
app9     pretty prefect
app10    don't love me.
app11    xxx anybody?

我想匹配一个关键字列表 like['anybody', 'love', 'you', 'xxx', 'don't']并选择匹配的关键字结果作为新列,命名keyword如下:

app      keyword

app1     anybody, love
app4     I don't like this one
app6     damn you.
app8     xxx
app10    don't, love
app11    xxx

看来我必须使用嵌套查询。
逻辑有点像选择匹配的结果行​​并设置应保存在列表或类似内容中的匹配结果作为新列。

但我对 HiveQL 还不够熟悉。
有人可以帮我吗?
提前感谢。

标签: sqlstringjoinhivehiveql

解决方案


在 Hive 中,您可以使用stack UDTF

with keywords as (
select stack(4, --the number of tuples
'anybody', 'you', 'xxx', 'don\'t'
) as keyword
)

select t.app, k.keyword
from  mytable t
inner join keywords k
    on t.col1 like concat('%', k.keyword, '%')

此外,对于旧版本的 hive 连接使用like将不起作用,请在 WHERE 中使用带有堆栈和过滤器的交叉连接:

from  mytable t
cross join keywords k
where t.col1 like concat('%', k.keyword, '%')

推荐阅读