1

SQL Server では、BETWEEN ステートメントを使用して JOIN を実行し、時間範囲を複数の間隔レコードに分解します。クエリは次のようになります

SELECT
    a.UltimateID,  
    a.SiteID,
    ProductID,
    b.Date
FROM
    ss_UsageTracking a
    JOIN SELECTServerSchema.ss_fn_CreateDateTable(@StartDate, @EndDate, 1) b ON b.Date BETWEEN a.StartDate AND a.EndDate

これにより、StartDate と EndDate の間のデータごとに 1 つのレコードが得られます。SQL 配列を返す UDF と CROSS APPLY EXPLODE ステートメントを使用して、その爆発を行う方法を考え出しました。

私が見ている問題は、行セットの行ごとに 1 回、何百万回も日付範囲を計算していることです。これは非常に効率が悪いように見え、実際に処理時の時間消費の主な原因となっています。

上記で使用した日付テーブルを生成する手段を作成し、パフォーマンスを実験したいと考えていますが、U-SQL Join は BETWEEN ステートメントをサポートしていません。

これにはどのようなアプローチを使用する必要がありますか? CROSS APPLY がこれを処理できるかどうかは、ドキュメントから明らかではありません。

コードビハインドでUDFを使用して、間隔が2つの日付の間にある場合にtrueまたはfalseを返そうとしましたが、エラーが発生しただけで、JOIN ON句はUDFではなく列にのみ使用できます

4

1 に答える 1