Улей запрос, чтобы выбрать только записи в определенном процентиле - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть таблица с двумя столбцами - ID и общая продолжительность:

id  tot_dur
123 1
124 2
125 5
126 8

Я хочу запрос Hive, который выбирает только 75-й процентиль. Это должна быть только последняя запись:

id  tot_dur
126 8

Это то, что у меня есть, но мне трудно понять использование функций OVER () и PARTITIONED BY (), так как из того, что я исследовал, это те функции, которые я должен использовать. Прежде чем я получу столбец tot_dur, я должен sum и group by столбец duration. Не уверен, является ли percentile правильной функцией, потому что я нашел варианты использования с percentile_approx.

select k1.id as id, percentile(cast(tot_dur as bigint),0.75) OVER () as tot_dur
from (
SELECT id, sum(duration) as tot_dur 
FROM data_source
GROUP BY id) k1
group by id

1 Ответ

0 голосов
/ 06 февраля 2020

Если я вас правильно понял, это то, что вы хотите:

with data as (select stack(4,
123, 1,
124, 2,
125, 5,
126, 8) as (id,  tot_dur))
-----------------------------------------------------------------------------
select data.id, data.tot_dur 
from data 
join (select percentile(tot_dur, 0.75) as threshold from data) as t 
where data.tot_dur >= t.threshold;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...