Предложение Hive «Имеет» не отфильтровывает результаты - PullRequest
0 голосов
/ 06 февраля 2020

Я работаю над HQL-запросом, который создает комбинации birthState / BirthMonth для определенных c критериев данных. Мне удалось отследить мою проблему до того, что мое предложение «Имеет» неправильно фильтрует результаты на основе моих агрегированных значений.

По сути, мне нужно отфильтровать комбинации birthState / birthMonth, в которых не более 5 человек, или менее 100 на летучих мышах. (оба условия должны быть соблюдены для сохранения строки).

with results as
(
select 
m.bmonth as birth_month, 
m.bstate as birth_state, 
count(m.id) as total_players, 
sum(b.hits) as total_hits, 
sum(b.ab) as total_atbats, 
dense_rank() over (order by sum(b.hits)/sum(b.ab)) as rank
from master m, batting b
where m.id = b.id
and m.bmonth is not null
and m.bstate is not null
and m.bstate != ""
group by m.bmonth, m.bstate
having total_players > 4 and total_atbats > 100
)

select
r.rank,
r.birth_month,
r.birth_state,
r.total_hits/r.total_atbats
from results r

Я относительно новичок в Hive по сравнению со стандартным SQL, но полагал, что этот код будет работать аналогичным образом. Какие-либо предложения? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...