Sql server 解决配置单元中重复数据的问题

Sql server 解决配置单元中重复数据的问题,sql-server,hadoop,hive,sqoop,Sql Server,Hadoop,Hive,Sqoop,下面是我的数据流 假设RDBMS有10条记录 step -1 RDBMS --> SQOOP --> HIVE(e.g. table A (initial load)) step -2 RDBMS(modified record {record 2}) --> SQOOP(incremental)--> HDFS --> temp HIVE tbl(table B) --> HIVE(table A) 在将步骤2中的数据从表B移动到表A时,我在配置单元中使

下面是我的数据流

假设RDBMS有10条记录

step -1
RDBMS --> SQOOP --> HIVE(e.g. table A (initial load))

step -2
RDBMS(modified record {record 2}) --> SQOOP(incremental)--> HDFS --> temp HIVE tbl(table B) --> HIVE(table A)
在将步骤2中的数据从表B移动到表A时,我在配置单元中使用带有“APPEND”选项的“insert”命令。显然,现在表A将有重复的数据


如何消除这些重复数据?有办法吗?如果是,它们是什么?如果没有,那么行业标准是什么

是的,您可以为此使用暂存表。我额外创建了两个表

DBMS_old:用于我希望保留在最终表中但不在新结果中的旧数据。 DBMS_new:用于我希望附加到最终表中的新数据

步骤1:使用左外部联接获取临时表中的所有旧数据,这将把所有旧数据都放入dbms_old中

insert overwrite table DBMS_old
select final.* from DBMS_results final
left outer join DBMS_new new
on final.primary_key = new.primary_key and final.col2 = new.col2
where new.primary_key is null;
步骤2:使用union all追加旧数据和新数据

insert overwrite table DBMS
select * from 
(select * from DBMS_old
union all
select * from DBMS_new) temp;

希望有帮助。

最简单的方法是插入到stage表中,并确保只有新条目a进入其中(通过执行left join和table_B&table_a),然后最后将数据从stage表插入到table_a。@Ambrish,你能给我一些简单的例子吗?