代码之家  ›  专栏  ›  技术社区  ›  Luke

带逻辑的SqlServer大容量插入

  •  1
  • Luke  · 技术社区  · 12 年前

    我使用的是SqlServer2008R2,我需要非常快地加载9亿条具有以下结构的记录。

    瓦尔查尔(20)
    瓦尔查尔(10)
    瓦尔查尔(50)
    瓦尔查尔(15)
    瓦尔查尔(20)
    瓦尔查尔(10)
    瓦尔查尔(4)
    瓦尔查尔(3)
    瓦尔查尔(10)
    日期时间
    日期时间
    日期时间
    日期时间
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)
    十进制(19,2)

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

    问题是数据来自一个旧的OS390,如果日期为空,他们会以99999999这样的文本文件发送数据。

    将此数据转换为null的最佳方法是什么?在Oracle中,您可以将逻辑放入格式中,您能用BCP做到这一点吗?还是使用SSIS同时加载和转换来实现这一点的最快方法?还是用扳机什么的??

    以文本形式加载,然后在数据库中转换,由于数据量太大,我认为这不是一种选择。

    1 回复  |  直到 12 年前
        1
  •  0
  •   usr    12 年前

    您可以随时使用.NET客户端应用程序以任何方式转换数据。我只是用一个微不足道的设置以430GB/小时的速度加载数据:

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

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