对两个没有主键的 csv 文件进行比较

Sky*_*Sky 0 sql-server migration ssis csv

我想知道在 SSIS 中是否有一种方法可以比较两个没有引用键的 csv 文件(具有相同的结构)以使记录唯一。

根据我的意思给你一个更好的画面;在初始加载时,我们将数据从 csv 文件加载到表中,在后续加载中,我们将获得另一个可以有不同记录的 csv 文件(相同格式)。我们应该比较表中的内容与新版本的 csv 文件中存在的内容,并且只加载更改的子集。如果有新记录,应该插入,如果更新,应该更新,如果源中的记录被删除,它应该在表中标记为不活动。

现在我的问题是:

  • 有什么办法可以在 SSIS 中比较两个 csv 文件,而没有使记录唯一的键?
  • 我们如何比较 SQL Server 中的两个表,而没有使记录唯一的键?

csv文件的数据量相当大,超过2000万条记录!

任何想法表示赞赏。

谢谢,

纳兹拉

dez*_*zso 8

如果您将第一个 CSV 加载到表中,则可以轻松地将另一个 CSV 加载到临时表中(大概与“真实”的结构相同)。然后你可以通过

SELECT * FROM staging_table
EXCEPT
SELECT * FROM real_table
;
Run Code Online (Sandbox Code Playgroud)

新 CSV 中缺少的行可能会在EXCEPT. 但是,鉴于暂存表上缺少键(希望不是真正的键 - 从您的问题中不清楚),根据这种比较删除行可能会很痛苦,尤其是在行如此多的情况下。

完成后,您可以删除临时表。

(据我所知,这种方法适用于任何 RDBMS。)