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

时间:2018-10-31 12:51:39

标签: hive hiveql hive-partitions

我在Hive中有三个分区表(每年分区),所有表都有多个分区。我将所有这三个表作为我的要求的一部分。现在,我只想为最新分区而不是之前创建的分区运行此sql。

我尝试在where子句中使用max(partition),但似乎不支持

我做了下面的事情(不是确切的代码。只是一个代码概念)

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子句以及包含“从表中选择max(year)”的子查询,但这似乎并不可行。关于如何实现这一目标的任何想法?

更新 我在以下条件下尝试了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 :(得分:0)

修改版本:

    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
;