Hadoop Hive MAX дает несколько результатов - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь получить максимальное значение из счетчика, выбрав 2 метки srcip и max, но каждый раз, когда я включаю srcip, мне приходится использовать group by srcip в конце и дает мне результат, так как max не было даже там.

Когда я пишу такой запрос, он дает мне правильное максимальное значение, но я также хочу выбрать srcip.

Select max(count1) as maximum 
    from (SELECT srcip,count(srcip) as count1 from data group by srcip)t;

Но когда я включаю srcip в выборку, я получаю результат, который былno max function

Select srcip,max(count1) as maximum 
from (SELECT srcip,count(srcip) as count1 from data group by srcip)t 
group by srcip;

Я бы ожидал от этого одного результата, но получаю несколько.

У кого-нибудь есть идеи?

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

давайте рассмотрим, есть ли у вас такие данные.

Таблица

enter image description here

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

Запрос

SELECT srcip,count(srcip) as count1 from data group by srcip

Вывод: table1

enter image description here

Теперь давайте посмотрим, чтобывает, что вы выполняете внешний запрос в приведенной выше таблице.

Select srcip,max(count1) as maximum from table1 group by srcip

Тот же вывод

Причина, по которой ваш запрос говорит о выборе srcip и максимальном количестве из каждой группы srcip,И у нас есть 3 группы, так что 3 ряда.

enter image description here

0 голосов
/ 02 января 2019

Запрос ниже возвращает ровно одну строку с максимальным количеством и соответствующим скриптом.Это запрос, основанный на ожидаемом результате;Вы бы предпочли больше изучать sql и предыдущие комментарии, а затем переходить к аналитическим запросам.

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

select scrip, count1 as maximum from (select srcip, count(scrip) over (PARTITION by scrip) as count1, row_number() over (ORDER by scrip desc) as row_num from data) q1 having row_num = 1;
0 голосов
/ 15 декабря 2018

Вы можете сделать ORDER BY count DESC с LIMIT 1, чтобы получить скрипт со счетом MAX.

SELECT srcip, count(srcip) as count1 
  from data group by srcip
ORDER BY count1 DESC LIMIT 1
...