2014-01-27 3 views
4

У меня есть две таблицы с столбцами, как показано ниже.Hive - проверка того, содержит ли массив в каждой строке таблицы любые сопоставимые данные в столбце в другой таблице

Posts: 
user STRING, 
tag_list ARRAY<STRING> 

Tags: 
tag STRING 

Вот несколько примеров данных в этих таблицах.

Posts: 
user1 help, pig 
user2 bigdata, hadoop, query, hiveql 
user1 hive, hiveql, help 

Tags: 
hadoop 
hiveql 

Если я хочу, чтобы отфильтровать только строки в таблице сообщений, которые содержат теги, перечисленные в таблице тегов, как показано в приведенных ниже результатов, как бы я сделать это в улей запросе? Я не уверен, как присоединиться к этим двум таблицам с помощью array_contains.

Expected Query Result: 
user2 bigdata, hadoop, query, hiveql 
user1 hive, hiveql, help 

Благодаря

ответ

5

Я был в состоянии получить ожидаемый результат с этим запросом.

select distinct b.user, b.tag_list from 
(select tag from tags) a 
join 
(select user, tag_list, exp from posts 
lateral view explode(tag_list) exploded_table as exp) b 
on (a.tag = b.exp);