在SSIS中高效批量导入数据,偶尔PK重复内容?

发布于 2024-10-13 15:26:49 字数 365 浏览 5 评论 0原文

经过一些转换后,我定期将包含 100k 记录的平面文件加载到表中。该表在两列上有 PK。数据总体上不包含重复的PK信息,但偶尔也会存在重复。

我天真地不明白为什么 SSIS 拒绝我的所有记录,而只有其中一些记录违反了 PK 约束。我认为问题在于,在批量加载期间,即使其中 1 行违反了 PK 约束,该批次中的所有行都会被拒绝。

如果我将 OLE Db 目标的 FastLoadMaxInsertCommitSize 属性更改为 1,则可以解决问题,但它会像狗一样运行,因为它每提交 1 行。

在 MySQL 中,批量加载功能允许您忽略 PK 错误并跳过这些行,而不会牺牲性能。有谁知道在 SQL Server 中实现此目的的方法吗?

非常感谢任何帮助。

Am regularly loading a flat file with 100k records into a table after some transformations. The table has a PK on two columns. The data on the whole does not contain duplicate PK information but occasionally, there are duplicates.

I naively didn't understand why SSIS was rejecting all my records when only some of them violated the PK constraint. I believe the problem is that during a bulk load, if even 1 of the rows violates the PK constraint, all rows in that batch get rejected.

If I alter the FastLoadMaxInsertCommitSize property of the OLE Db Destination to 1, if fixes the problem but it then runs like a dog as it's committing every 1 row.

In MySQL, the bulk load facility allows you to ignore PK errors and skip those rows without sacrificing performance. Does anyone know of a way to achieve this in SQL Server.

Any help much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

属性 2024-10-20 15:26:49

听起来您可能正在寻找 IGNORE_DUP_KEY< /代码>

使用 IGNORE_DUP_KEY 选项处理重复值

当您创建或修改唯一的
索引或约束,您可以设置
IGNORE_DUP_KEY 选项打开或关闭。这
选项指定错误响应
多行中重复的键值
索引后的 INSERT 语句
被创建。当 IGNORE_DUP_KEY 为
设置为 OFF(默认),SQL
服务器数据库引擎拒绝所有
当一个或多个语句中的行
行包含重复的键值。
当设置为 ON 时,仅显示
包含重复键值的是
被拒绝;不重复的键值
已添加。

例如,如果单个语句
向表中插入 20 行
唯一索引,以及其中 10 行
包含重复的键值,通过
默认所有 20 行都被拒绝。
但是,如果索引选项
IGNORE_DUP_KEY 设置为 ON,仅
10 个重复的键值将是
被拒绝;另外10个不重复
键值将被插入到
表。

It sounds like you may be looking for IGNORE_DUP_KEY?

Using the IGNORE_DUP_KEY Option to Handle Duplicate Values

When you create or modify a unique
index or constraint, you can set the
IGNORE_DUP_KEY option ON or OFF. This
option specifies the error response to
duplicate key values in a multiple-row
INSERT statement after the index has
been created. When IGNORE_DUP_KEY is
set to OFF (the default), the SQL
Server Database Engine rejects all
rows in the statement when one or more
rows contain duplicate key values.
When set to ON, only the rows that
contain duplicate key values are
rejected; the nonduplicate key values
are added.

For example, if a single statement
inserts 20 rows into a table with a
unique index, and 10 of those rows
contain duplicate key values, by
default all 20 rows are rejected.
However, if the index option
IGNORE_DUP_KEY is set to ON, only the
10 duplicate key values will be
rejected; the other 10 nonduplicate
key values will be inserted into the
table.

携余温的黄昏 2024-10-20 15:26:49

您可以将 FastLoadMaxInsertCommitSize 提高到 5k...这将大大加快插入速度。然后,设置错误输出以重定向行 - 在错误输出上,将包含错误行的一批 5k 行发送到另一个目标。 (下一位来自内存!)如果您将其设置为不快速加载,它将插入好的行,您可以将错误输出传递到错误表或行计数任务之类的东西。

您可以使用 FastLoadMaxInsertCommitSize 数字,直到找到最适合您的值。

You can up the FastLoadMaxInsertCommitSize to say 5k...this will speed up your inserts greatly. Then, set the Error Output to redirect the rows - on the error output from there, send a batch of 5k rows that contains an error row to another Destination. (This next bit is from memory!) If you set this up to not be fast load, it will then insert the good rows and you can pass the error output to an error table or something like a row count task.

You can play with the FastLoadMaxInsertCommitSize figures until you find something that works well for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文