Hive查询:将字符串与关键字列表匹配

时间:2014-03-20 10:44:30

标签: sql hive hiveql

我有一个带有关于电影的推文的蜂巢表和一个关键字映射到电影标题的表

关键字示例:

title                 keyword
------                -------
3 Days to Kill        3daystokill
3 Days to Kill        3 days to kill
12 Years a Slave      12YearsASlave

推文示例:

id              text
------          -------
125675146       3daystokill sucks!
125673498       3 days to kill is awesome!
239873985       I like 12 Years a Slave :)

我希望能够找到与特定电影标题的关键字匹配的推文。例如,我想查找所有提及3天杀死关键字的推文(3daystokill和3天杀死)。

我认为这样的事情,但结果是空的:(

SELECT k.keyword, t.text
FROM keywords k JOIN tweets t
ON t.text = CONCAT('%',k.keyword,'%')
WHERE k.title = "3 Days to Kill";

3 个答案:

答案 0 :(得分:4)

您正在寻找like,而不是=

SELECT k.keyword, t.text
FROM keywords k JOIN
     tweets t
     ON t.text like CONCAT('%', k.keyword, '%')
WHERE k.title = '3 Days to Kill';

编辑:

我不知道HiveQL在开头或结尾只将like限制为通配符。一个选项是rlike。另一个是instr()

SELECT k.keyword, t.text
FROM keywords k JOIN
     tweets t
     ON instr(t.text, k.keyword) > 0
WHERE k.title = '3 Days to Kill';

答案 1 :(得分:0)

我不确定以下是否有帮助.. :(但刚试了一下。

select case when
replace(keyword,' ',null) = '3daystokill'
then keyword
end
from keywords

答案 2 :(得分:0)

您可以使用Hive StatisticsAndDataMining功能context_ngrams()

SelectedTabPageIndex