Hive - проблема с подзапросом улья - PullRequest
0 голосов
/ 14 февраля 2019

Моя постановка проблемы похожа на

«Найти 2 верхних района на штат с наибольшей численностью населения»

данные похожи на

Ввод

Мой ожидаемый вывод -

вывод

Я пробовал это с большим количеством запросов и подзапросов, но приводит к ошибке SQL с подзапросом

Может ли кто-нибудь помочь мне получить этот результат?

Заранее спасибо.

Запросы, которые я пытался

  1. Выберите имя_состояния, (выберите concat_ws (',', collect_set (dist_name как строка)) от населения, где имя_состояния = имя_состояния, группа по порядку штатов по населению 2)

от группы населения по названию_состояния

выберите
имя_состояния, concat_ws (',', collect_set (приведение (dist_name как строка)))
из совокупности, в которой в качестве значения Pop.Dist_name (выберите dist_name из (выберите dist_name, max (b.population) какитого из совокупности b, где state_name = b.state_name группа по b.dist_name, b.dist_name порядок по общему пределу desc 2) как dist_name) группа по state_name

1 Ответ

0 голосов
/ 14 февраля 2019

Ниже был бы запрос -

 select A.state, collect_set(A.dist)[0], collect_set(A.dist)[1] from 
(select state, dist, row_number() over (partition by state order by population 
 desc) as rnk from <tableName>) A
where A.rnk<=2 group by A.state;

Ниже приведены результаты для данных выборки -

hive> select * from hier;
OK
C1      C11
C11     C12
C12     123
P1      C1
P2      C2

hive> select parent, collect_set(child)[0], collect_set(child)[1] from hier group by parent;
OK
C1      C11     NULL
C11     C12     NULL
C12     123     NULL
P1      C1      NULL
P2      C2      NULL
Time taken: 19.212 seconds, Fetched: 5 row(s)
...