sql—如何组合两个表以获得配置单元中的单个表

j1dl9f46  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(384)

我有下面的表格,需要把它们组合在Hive里

谁能帮我一下我们怎么能做到这一点。我试过和coalesce约会,没关系。但fam部分不能合并到单个列中。
非常感谢你的帮助。
谢谢,巴布

euoag5mw

euoag5mw1#

分两步使用完全外连接,例如。

with join1 as (
  select coalesce(t1.date, t2.date) as date
       , coalesce(fam1, fam2) as fam
       , coalesce(famcnt1, 0) as famsct1
       , coalesce(famcnt2, 0) as famsct2
    from table1 as t1
    full outer join table2 as t2
      on (t1.date = t2.date and fam1 = fam2)
)
select coalesce(t1.date, t3.date) as date
     , coalesce(fam, fam3) as fam
     , coalesce(famcnt1, 0) as famsct1
     , coalesce(famcnt2, 0) as famsct2
     , coalesce(famcnt3, 0) as famsct3
from join1 as t1
  full outer join table3 as t3
    on (t1.date = t3.date and fam = fam3)
im9ewurl

im9ewurl2#

你可以用 full outer join . 然而, unionleft join s通常看起来更干净:

select df.date, df.name,
       coalesce(t1.famcnt1, 0) as famcnt1,
       coalesce(t2.famcnt2, 0) as famcnt2,
       coalesce(t3.famcnt3, 0) as famcnt3
from ((select date, fam1 from table1
      ) union   -- on purpose to remove duplicates
      (select date, fam1 from table2
      ) union   -- on purpose to remove duplicates
      (select date, fam1 from table3
      )
     ) df left join
     table1 t1
     on t1.date = df.date and t1.name = df.name left join
     table2 t2
     on t2.date = df.date and t2.name = df.name left join
     table3 t3
     on t3.date = df.date and t3.name = df.name;

如果你对 NULL 而不是 0 ,那么不 COALESCE() 根本就不需要这些。

相关问题