Как выбрать строки с более высоким значением только в Hive - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть следующие данные в Hive (отсортировано по столбцу Count):

ItemX   ItemXX  Count
-----   ------  -----
item1   item11  8
item1   item12  2
item1   item13  1
item2   item21  10
item2   item22  1
item3   item31  9
item3   item32  7
item3   item33  5

Мне нужно отфильтровать только максимальное количество строк. Как это:

item1   item11  8
item2   item21  10
item3   item31  9

Как я могу сделать это в Hive QL?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

В обычных случаях (без сортировки) вы можете использовать следующие запросы:

-- 1.
SELECT a.* FROM tbl a 
INNER JOIN (
    SELECT ItemX, MAX(Count) Count 
    FROM tbl 
    GROUP BY ItemX
) b ON a.ItemX = b.ItemX AND a.Count = b.Count;

-- 2.
SELECT a.* FROM tbl a 
LEFT OUTER JOIN tbl b 
    ON a.ItemX = b.ItemX AND a.Count < b.Count 
WHERE b.ItemX  IS NULL;

Примечание: Второй запрос можно выполнить с помощью Hive 2.2.0+, поскольку сложные выражения в предложении ON не поддерживаются до этой версии (см. Hive wiki ).

0 голосов
/ 29 апреля 2018

Использование row_number() Функция:

select ItemX, ItemXX, Count
  from
     (
      select ItemX, ItemXX, Count,
             row_number() over(partition by ItemX order by Count desc) rn 
      from table_name 
     )s
where rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...