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

标签 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

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

最佳答案

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

关于hadoop - 如何将新记录更新到临时表中的主表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137509/

相关文章:

hadoop - HAMSTER无法在伪分布式模式下运行

Python Hive 查询限制为 100

unix - 将同一配置单元 session 中的多个查询输出导出到 shell 脚本?

sql - hive 仅选择前两位小数

apache - 在哪里可以找到有关hadoop jobtracker如何停止的任何线索?

hadoop - 级联中的横向 View 功能

hadoop - Apache-Pig,转换子组

sql - 单个配置单元查询以提取一段字符串

python - 在HIVE中爆炸

json - 删除/忽略 json 中不需要的元素