Hive - получить только последний раздел одной или нескольких таблиц улья.

У меня есть три разделенных таблицы (Yearly Partitions) в 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 [Error 10128]: Line 108:23 Not yet supported place for UDAF 'max'

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

ОБНОВИТЬ Я пробовал предложение 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

как вы думаете, почему это невозможно? Я использую это, чтобы получить максимумы

mangusta 31.10.2018 14:15

Ok. Для удобства я упомянул, что таблица имеет только год в качестве раздела, но на самом деле в ней больше столбцов раздела, и у меня есть больше таблиц, которые нужно объединить. Так что я не думаю, что это возможно.

JKC 31.10.2018 14:24

имеет значение, сколько типов разделов имеет таблица? все дело в изменении предложения «где». кроме того, ваша агрегатная функция (т.е. max) применяется к столбцу раздела, а не к обычному, поэтому даже скорость здесь не имеет значения

mangusta 31.10.2018 14:56

@mangusta Спасибо за ваш вклад. Я попробую то же самое и выложу здесь, если будут какие-либо расхождения в производительности.

JKC 31.10.2018 15:06

@mangusta Я не могу ввести более одного подзапроса в предложение where. Обновлен вопрос, чтобы он содержал более подробную информацию. Любые идеи ?

JKC 02.11.2018 06:28

как насчет того, чтобы использовать тот, что в моем ответе ниже

mangusta 02.11.2018 07:18
2
6
2 146
1

Ответы 1

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

    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
;

Другие вопросы по теме