没有共同领域的加入

时间:2015-04-10 08:30:18

标签: hadoop hive hiveql

我有以下表格:

Table1

user_name Url
Rahul    www.cric.info.com
ranbir   www.rogby.com
sahil    www.google.com
banit    www.yahoo.com

Table2

Keyword  category
cric     sports
footbal sports
google  search

我想通过匹配Table1中的关键字来搜索Table2。我可以执行相同的使用case语句并且查询可以正常工作,但这不是正确的方法,因为每次我必须在添加新搜索关键字时添加case语句。

select user_name from table1
case when url like '%cric%' then sports
else 'undefined'
end as category 
from table1;

2 个答案:

答案 0 :(得分:0)

谢谢找到这种方法的解决方案。首先我们需要进行加入,之后我们需要过滤记录。

select user_name,url,Keyword,catagory from(select table1.user_name,table1.url ,table2.keyword,table2.catagory from table1 left outer join table2)a where a.url like (concat('%',a.phrase,'%')

答案 1 :(得分:0)

不确定更多当前版本,但我遇到了类似的问题......主要问题是Hive只支持equi-join语句...当你将逻辑应用于连接的任何一侧时,它有难以转化为Map Reduce功能。

如果您具有可靠的结构化字段,则替代方法是您可以从较大字段创建匹配键。例如,如果您知道要查找的关键字存在于点分隔URI的第二个位置,则可以执行以下操作:

select
Uri
, split(Uri, "\\.")[1] as matchKey
from
Table1
join Table2 on Table2.keyword = Table1.matchKey
;