gpt4 book ai didi

hive - 在插入之前查找 Record 是否已存在于 HIVE 表中

转载 作者:行者123 更新时间:2023-12-02 04:40:29 24 4
gpt4 key购买 nike

我有一个 HIVE 分区表,在向其中插入记录之前,我需要查找记录是否已经存在。

例子。

Insert into table employee partition (day, location) select distinct name, number,
date,aud_date, day, location from tableB.

如果我尝试从 tableB 插入的记录已经存在于 employee 表中,它应该绕过或将其写入另一个表。我需要检查员工表中是否已存在的列是姓名、编号、日期、日期、位置。我不想检查 aud_date,因为它会有所不同。

最佳答案

假设“数字”列是“非空”列(如果不是这种情况,请选择另一个来检查是否为空:

(注意:从 OP 的后续请求中添加了“where date >=”内联 View )

from (
select distinct e.number as e_number, B.name, B.number, b.date, B.aud_date,
B.day, B.location
from tableB B left outer join
(select * from employee where date >= <blah>) e
on e.name=B.name and e.number = e.number
and e.date = B.date and e.day=B.day and e.location=B.location
where e.number is null
) j
insert overwrite into table employee e
select j.name, j.number, j.date, j.aud_date, j.day, j.location

要回答“为什么 e.number 是空条件”这个问题:左外连接确保第一个表中的所有值都包含在结果中。那么当第二个表中没有值时会发生什么:在这种情况下,第二个表中的所有列都报告为空。

所以在上面的例子中,我们正在精确地搜索第二个表条目丢失的情况——因此我们:

  • 从表二中选择一个永不为空(又名不为空)的列。那么: number 是一个始终存在的列吗?如果没有,请选择另一个
  • 指定条件“table1-alias”。“table1-never-null-column”= null。这意味着记录实际上不存在于连接条件中 - 因此我们发现记录仅存在于表 1 中。

关于hive - 在插入之前查找 Record 是否已存在于 HIVE 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com