Hive - получить только последний раздел из одной или нескольких таблиц улья - PullRequest
0 голосов
/ 31 октября 2018

У меня есть три многораздельных таблицы (разделы по годам) в Hive, и все таблицы имеют несколько разделов. Я присоединяюсь ко всем этим трем таблицам как часть моего требования. Теперь я хочу запустить этот sql только для последнего раздела, а не для созданных ранее.

Я пытался использовать max (partition) в предложении where, но, похоже, он не поддерживается

Я сделал что-то вроде ниже (не точный код. Просто концепция кода)

select
a.*,
b.*,
c.*
from table1 a
left join table2 b on a.ID = b.ID
left join table3 c on a.ID = c.ID
where
a.year = max(a.year) and
b.year = max(b.year) and
c.year = max(c.year)

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

FAILED: SemanticException [Ошибка 10128]: строка 108: 23 Еще не поддерживается место для UDAF 'max'

Я могу использовать несколько выражений where с подзапросом, содержащим «select max (year) from table» для всей таблицы, но это не представляется возможным. Есть идеи, как этого добиться?

UPDATE Я пробовал предложение where с условиями ниже, но кажется, что в предложении where поддерживается только один suq-запрос. Не уверен, как решить эту проблему. Оценивая любые входные данные на этом

where
a.year in (select max(year) from table1) and
b.year in (select max(year) from table2) and
c.year in (select max(year) from table3

1 Ответ

0 голосов
/ 31 октября 2018

Модифицированная версия:

    select
    <columns>
    from  
    (  
     select 
     <columns> 
     from 
     table1 a 
     where a.year in (select max(year) from table1) 
    ) a1
    left join 
    (
     select 
     <columns> 
     from 
     table2 b 
     where b.year in (select max(year) from table2) 
    ) b1 on a1.ID = b1.ID
    left join 
    (
     select 
     <columns> 
     from 
     table3 c 
     where c.year in (select max(year) from table3) 
    ) c1 on a1.ID = c1.ID
;
...