Hive 配置单元-仅获取一个或多个配置单元表的最新分区

Hive 配置单元-仅获取一个或多个配置单元表的最新分区,hive,hiveql,hive-partitions,Hive,Hiveql,Hive Partitions,我在配置单元中每年有三个分区表,所有表都有多个分区。作为我要求的一部分,我将加入所有这三个表格。现在,我只想为最新的分区运行此sql,而不是为以前创建的分区运行此sql 我试图在where子句中使用maxpartition,但似乎不受支持 我做了一些类似于下面的事情,而不是确切的代码。只是一个代码概念 select a.*, b.*, c.* from table1 a left join table2 b on a.ID = b.ID left join table3 c on a.ID =

我在配置单元中每年有三个分区表,所有表都有多个分区。作为我要求的一部分,我将加入所有这三个表格。现在,我只想为最新的分区运行此sql,而不是为以前创建的分区运行此sql

我试图在where子句中使用maxpartition,但似乎不受支持

我做了一些类似于下面的事情,而不是确切的代码。只是一个代码概念

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)
我犯了这个错误

失败:SemanticException[错误10128]:尚不支持第108:23行 UDAF“最大”的位置

我可以将多个where子句与包含select maxyear 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
修改版本:

    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
;

你为什么认为这不可行?我用这个来得到maxesOk。为了便于参考,我提到的表只有一年作为分区,但实际上它有更多的分区列,我有更多的表要连接。所以我认为这是不可行的。表有多少分区类型重要吗?这都是关于修改where子句的。此外,您的聚合函数(即max)应用于分区列,而不是通常的分区列,因此即使是速度也不值得关注here@mangusta谢谢你的意见。如果有任何性能差异,我将尝试同样的方法并将其发布在这里。@mangusta我无法在where子句中引入多个子查询。已更新问题以包含更多详细信息。有什么想法吗?