Hive - выбирайте отдельные уникальные идентификаторы на дату без создания внешних таблиц или использования JOINS - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над набором данных, который имеет следующие столбцы:

unique_ID       Date
a               2018_09_08
a               2018_09_18
a               2018_09_28
d               2018_09_08

Я хочу выбрать те уникальные идентификаторы, которые встречаются во все три даты, то есть 2018_09_08, 2018_09_18 и 2018_09_28.

Мой вывод должен быть просто 'a'.

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

Вот запрос, который я написал - select distinct(unique_ID) from table_name where Date = '2018_09_08' and Date = '2018_09_18' and Date = '2018_09_28', которыйвозвращает ноль.

Я также пытаюсь написать подзапрос, но я сомневаюсь, что HIVE поддерживает такие подзапросы в этом случае.Вот что я написал:

select count(distinct(unique_ID)) from (
(select distinct(unique_ID) from table_name where Date = '2018_09_08') a
union all
(select distinct(unique_ID) from table_name where Date = '2018_09_18') b
union all
(select distinct(unique_ID) from table_name where Date = '2018_09_28') c
);

, и я получаю следующую ошибку синтаксического анализа: FAILED: ParseException line 3:0 missing ) at 'union' near ')' line 4:87 missing EOF at 'b' near ')'

Как мы можем получить уникальные идентификаторы в этом случае?

1 Ответ

0 голосов
/ 29 ноября 2018

Это можно сделать с помощью group by и having.

select unique_id,count(distinct date)
from tbl
where date in ('2018_09_08','2018_09_18','2018_09_28')
group by id 
having count(distinct date) = 3
...