1

我正在使用 SqlServer 2008R2,我需要非常快地加载具有以下结构的 9 亿条记录。

varchar(20)
varchar(10)
varchar(50)
varchar(15)
varchar(20)
varchar(10)
varchar(4)
varchar(3)
varchar(10)
datetime
datetime
datetime
datetime
decimal(19, 2)
decimal(19, 2)
小数(19, 2)
小数(19, 2)
小数(19, 2)
小数(19, 2)
小数(19, 2)
小数(19, 2)
小数(19, 2)

(我有各种格式,一些多达 100 列数据 - 总共需要加载 221GB 的数据)

问题是数据来自旧的 OS390,如果日期为空,他们会将其发送到文本文件中,如 99999999。

将这些数据转换为空的最佳方法是什么?在 Oracle 中,您可以将逻辑放入格式中,您可以使用 BCP 做到这一点吗?或者是使用 SSIS 同时加载和转换的最快方法?或者用触发器什么的??

加载为文本,然后在数据库中进行转换,由于数据量大,我认为这不是一个选项。

4

1 回答 1

0

您始终可以使用 .NET 客户端应用程序以任何您想要的方式转换数据。我刚刚通过简单的设置以 430GB/小时的速度加载数据:

我刚刚启动了 8 个 .NET 线程,并让它们SqlBulkCopy以 10m 行的批次流式传输数据。每个线程都插入到自己的堆表中。这是一种最简单的设置。这在我的 4*2 Core i7 桌面上运行,SQL Server 在同一台机器上。SQL 有大约 50% 的 CPU 使用率,而我的应用程序有另外 50%。因此,通过使用两台机器和一个快速网络,吞吐量可以轻松翻倍。

这允许您将最终数据直接插入到目标表中(理想情况下,该表是分区的,因此您可以加载到单独的分区中)。

于 2013-03-26T15:33:35.523 回答