Есть ли способ выделить подзапрос из этого запроса Hive? - PullRequest
0 голосов
/ 10 марта 2020

Редактировать: я использую Apache Hive (version 3.1.0.3.1.5.0-152)

Когда я запускаю следующий запрос:

insert into delta_table (select * from batch_table where loaddate=(select max(loaddate) from batch_table));

Я получаю эту ошибку:

Неподдерживаемое выражение SubQuery 'loaddate': разрешены только выражения SubQuery, которые являются конъюнктами верхнего уровня

У нас есть таблица, в которую записываются ежедневные пакеты со столбцом loaddate, который уникален для каждая партия. Цель запроса - получить все записи из самой последней партии, не зная, какая у нее дата загрузки. Я подозреваю, что проблема заключается в том, что я использую подзапрос внутри подзапроса. Есть ли способ изменить этот запрос, чтобы сделать то же самое, но без последнего подзапроса?

Ответы [ 3 ]

0 голосов
/ 10 марта 2020

Похоже, ошибка произошла потому, что таблица была создана неправильно, и по какой-то причине это вызвало сбой запроса. Я воссоздал таблицу, и теперь она работает

0 голосов
/ 11 марта 2020

Analyti c Функция + фильтр будет более эффективной, чем самостоятельное объединение или подзапрос с еще одним сканированием таблицы для определения максимальной даты:

insert into delta_table 
select col1, col2, ... coln --list columns here
from
(
select t.*, rank() over(order by loaddate desc) rnk
  from batch_table t
)s
where rnk=1;
0 голосов
/ 10 марта 2020

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

with max_load as ( select max(loaddate) as loaddate from batch_table) 
    insert into delta_table 
    (select * from batch_table a where a.loaddate=max_load.loaddate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...