2009-09-02 2 views
0

入力:From-> ToRowsのペア。数百万行の変換のための変換

From To 
1  2 
2  3 
3  4 
6  7 

出力:値からそれぞれの場合、値に到達可能なのペア。 など。 for 1

明らかに、グラフ構造にデータを吸い上げてDFSスキャンを実行することができます。

そうする別の方法は、そのようなこと、あります:

  1. ではなく、命令型プログラミングのSQL /機能的なスタイルを使用しますか?
  2. 十分に高速で、1,000万行が必要です。 (C#/ SSISでの現在のグラフ手法は〜2時間で実行されます)
+0

を(シェアードナッシング=>地図削減)あなたがそれをしたいHTMLとして? – ChaosPandion

+0

あなたはどのデータベースを使用していますか? –

+0

@ChaosPandionはSQLローではありません –

答えて

2

CTE(Common Table Expressions)を使用すると、ここで正しい答えが返されます。日付範囲に関する同様の状況についてはhereをご覧ください。

+0

はrCTEのように見えますが、明日の実際のデータを確認してスレッドを更新します –

+0

CTEは機能しますか?つまり、少なくともSQL Server 2005を使用しています。 2008年にはより良い階層構文があります... –

+0

1つの問題 - CTEは無限ループに陥り、色の変化によりDFSが入り込まなくなります。私たちはそれを達成できますか? –

1

このことについて:

最初の実行:メイクハッシュ。

h[1] = 2 
h[2] = 3 
h[3] = 4 
h[6] = 7 

セカンドラン:それは未処理であればYESの場合、変更の実行と出力到達行う場合は、各キーに対して、(私が説明します)を参照してください。

h[1] = 2 (unprocessed) --> output "1 2" 
    h[2] = 3 (unprocessed) --> output "1 3" 
    h[3] = 4 (unprocessed) --> output "1 4" 
     h[4] = null 

を今、私たちは(計算さを保存(ダイナミックプログラミングの場合のように)将来のルックアップを高速化するために、次のような結果が得られます。

極端なケースのシナリオは:

  1. ませ値をキーとして使用されていません。 2回目の実行では、キーごとに2つのルックアップがあります。
  2. これは一本鎖である。次に、2回目の実行で、h [1]が評価された後、休憩は計算された値をピックアップするだけです。

実際の実行速度については、テストが必要です。

+0

データベースは、第3世代言語よりも常に高速になります。 –

+0

スキャンは高性能なビジネスです。 – Faiz

0

DBMSは、リレーショナル情報/レコードセットを処理するために設計されており、DFSのようなhieararchicalアプローチは設計されていません。ヒアナークル情報を処理する上でパフォーマンスが必要な場合は、第3世代言語で書かれた外部コードを使用して作業を進めてください。特定の要件に合わせて、Managed(CLR)SQL関数またはSSIS内のスクリプトタスクを使用することはできますか?

0

あなたは組み合わせる必要があります。

  • バッチ処理
  • 関数型プログラミングスタイル
  • クラスタリング
関連する問題