hadoop - 如何将新记录更新到临时表中的主表

我是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

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

最佳答案

您可以通过合并两个表来完成此操作,然后为已存在的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替换为更新后的值

https://stackoverflow.com/questions/55137509/

相关文章:

apache-spark - Spark的示例在客户端模式下引发FileNotFoundExcept

nginx - 多个网站在Docker容器中运行,如何实现?

dns - 在链接的Docker容器中解析内部DNS

ubuntu - docker登录错误: no such host

hadoop - 为什么 hive 中的CTAS查询没有得到预期的结果?

hadoop - 在实际运行oozie工作流之前如何检测错误?

docker - docker 容器可以连接到 SRIOV 虚拟功能吗?

amazon-web-services - 需要有关数据管道创建的设计输入

sql - 配置单元确定日期重叠的记录

python - Fedora 22 : ERROR: No module named '_rpmb