如何用新记录更新到临时表中的主表

时间:2019-03-13 08:40:00

标签: hadoop hive

我是Hive的新手。我有一个主表t1和临时表t2。临时表每天都会通过传入数据上载。传入的数据可以是更新的记录,也可以是新的记录。

table t2(temp):               table t1(main)
id   name                      id      name
1   vinni                      1       vikki
3   anna                       2       amita

我希望主表中有旧记录,临时表中的更新记录和临时表中的新记录。

我的主表应具有如下记录:

id  name
1   vinni
2   amita
3   anna

我尝试通过完全外部联接来执行此操作,但这不是最佳解决方案。那么如何通过使用左外部联接来实现这一点。最后,我不希望我的临时表记录,并且在将其数据加载到主表后可以删除该表。

1 个答案:

答案 0 :(得分:0)

您可以通过合并两个表来完成此操作,然后为已存在的ID选择更新的记录,例如

with union_table as (
  select *, 0 as new_flag from t1
  union all
  select *, 1 as new_flag from t2
),
stage_table as (
  select *, max(new_flag) over (partition by id) as max_flag
    from union_table
),
stage_table2 as (
  select id, name, new_flag
    from stage_table
   where new_flag = max_flag
)
select id, name
  from stage_table2

开窗max将帮助您确定是否需要将特定ID替换为更新后的值