1

私はSqlServer2008R2を使用しており、次の構造を持つ9億件のレコードを非常に高速にロードする必要があります。

varchar(20)
varchar(10)
varchar(50)
varchar(15)
varchar(20)
varchar(10)
varchar(4)
varchar(3)
varchar(10)
日時
日時
日時
日時
decimal(19、2)
decimal(19、 2)
decimal(19、2
) decimal(19、2)decimal(
19、2 )decimal(19、2)decimal(
19、2) decimal(19、2)
decimal (19、2) (私はさまざまな形式を持っています、最大100列のデータ-合計221GBのデータをロードする)





問題は、データが古いOS390からのものであり、日付がnullの場合、99999999のようなテキストファイルで送信

されることです。このデータをnullに変換する最良の方法は何ですか。Oracleでは、フォーマット内にロジックを配置できますが、BCPでそれを実行できますか?または、SSISを使用してロードと変換を同時に行うことで、これを実現する最速の方法ですか?またはトリガーか何かで??

テキストとしてロードしてからデータベースに変換することは、データの量が多いため、オプションではないと思います。

4

1 に答える 1

0

.NETクライアントアプリケーションを使用して、いつでもデータを任意の方法で変換できます。簡単な設定で430GB/時間でデータをロードしました。

8つの.NETスレッドをスピンアップしSqlBulkCopy、10mの行バッチを使用してデータをストリーミングするようにしました。各スレッドは、独自のヒープテーブルに挿入されます。これは、可能な限り最も単純なセットアップの一種です。これは、同じマシン上にSQLServerを搭載した4* 2Corei7デスクトップで実行されました。SQLのCPU使用率は約50%で、私のアプリのCPU使用率は残りの50%でした。したがって、2台のマシンと高速ネットワークを使用することでスループットを簡単に2倍にすることができます。

これにより、最終データをターゲットテーブルに直接挿入できます(理想的にはパーティション化されているため、別々のパーティションにロードできます)。

于 2013-03-26T15:33:35.523 に答える