我有一个每天运行的ETL过程(CSV到SQL数据库),但源中的数据有时会发生变化,因此我希望第二天再次使用更新的文件运行它。
如何编写SQL语句以查找所有差异?
例如,假设Table_1
的复合PRIMARY KEY
由FK_1
,FK_2
和FK_3
组成。
我是在SQL中还是在ETL过程中执行此操作?
感谢。
修改 我现在意识到这个问题太宽泛了。无视。
答案 0 :(得分:1)
您可以使用EXCEPT查找缺少的IDs
。例如:
SELECT FK_1, FK_2, FK_2
FROM new_data_table
EXCEPT
SELECT FK_1, FK_2, FK_2
FROM current_data_table;
更好(在性能方面)实现这些ID,然后将这个新表加入new_data_table
以插入所有列。
如果您需要在一个查询中执行此操作,则可以使用简单的LEFT JOIN
。例如:
INSERT INTO current_data_table
SELECT A.*
FROM new_data_table A
LEFT JOIN current_data_table B
ON A.FK_1 = B.FK_1
AND A.FK_2 = B.FK_2
AND A.FK_3 = B.FK_3
WHRE B.[FK_1] IS NULL;
我们的想法是获取new_data_table
中的所有记录,current_data_table
表(WHRE B.[FK_1] IS NULL
)中没有匹配。