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

Спасибо


person rev    schedule 27.01.2014    source источник


Ответы (1)


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

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);
person rev    schedule 28.01.2014