0

SSIS で SQL Server 2008 から大規模なデータセットを読み込もうとしています。ただし、Visual Studio がすべてを一度に読み込むには遅すぎます。次に、for-each ループを使用して、毎回テーブルの一部をロードすることにしました。

たとえば、1,000 万件のレコードがある場合、毎回 100 万件をロードして 10 回実行して処理を完了することができればよいのにと思います。

これは単なる私の「脳の設計」であり、Foreach ループ コンポーネントを使用してそれを作成する方法がわかりません。大規模なデータセットを処理する他の方法はありますか?

4

2 に答える 2

0

私の意見では、データを機能的に分割するのが最善の方法です。ほとんどの場合、これを行うには日付列が適切です。例として注文日を見てみましょう。

その列について、最適な分母を見つけます。たとえば、注文日の各年は約100万行を生成します。

for eachループコンテナの代わりに、forループコンテナを使用します

このループを機能させるには、ソースデータですべての注文日の最小および最大年を見つける必要があります。これらは、スカラー結果をSSIS変数に保存するSQLステートメントを使用して取得できます。

次に、forループコンテナを設定して、以前に変数に格納した最小年と最大年の間でループし、反復ごとに1年を追加します。

最後に、実際にデータを取得するには、ソースSQLステートメントを、forループコンテナーによって生成された現在の年を指定するwhere句を含む変数の式として保存する必要があります。

"SELECT * FROM transactions WHERE YEAR(OrderDate) = " + @[User::ForLoopCurrentYear]

これで、データフローソースでこの変数を使用して、パーティション化されたデータを取得できます。

編集:

for eachループコンテナを使用する別の解決策は、SQL実行タスクでパーティションキーを取得し、その結果セットを次のタイプのSSIS変数に保存することですObject

SELECT YEAR(OrderDate) FROM transaction GROUP BY YEAR(OrderDate)

for eachループコンテナーを使用すると、ADO列挙子を使用してオブジェクトをループし、上記と同じ方法を使用して、現在の年をソースSQLステートメントに挿入できます。

于 2012-05-16T15:37:28.780 に答える