最初にいくつかのコメント:
FETCH
現在、リテラルのみを引数として取ります ( https://msdn.microsoft.com/en-us/library/azure/mt621321.aspx )
@var = SELECT ...
@var
で始まる行セット式に名前を割り当てSELECT
ます。U-SQL (現在) では、クエリ結果からステートフルなスカラー変数を割り当てることはできません。代わりに、aCROSS JOIN
または otherを使用JOIN
してスカラー値を結合します。
今すぐ解決策に:
パーセンテージを取得するには、 関数ROW_NUMBER()
とPERCENT_RANK()
関数を見てください。たとえば、次の例は、質問に答えるためにどちらかを使用する方法を示しています。( andPERCENT_RANK()
は不要)のより単純なコードを考えると、その解決策をお勧めします。MAX()
CROSS JOIN
DECLARE @percentage double = 0.25; // 25%
@data = SELECT *
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20)
) AS T(pos);
@data =
SELECT PERCENT_RANK() OVER(ORDER BY pos) AS p_rank,
ROW_NUMBER() OVER(ORDER BY pos) AS r_no,
pos
FROM @data;
@cut_off =
SELECT ((double) MAX(r_no)) * (1.0 - @percentage) AS max_r
FROM @data;
@r1 =
SELECT *
FROM @data CROSS JOIN @cut_off
WHERE ((double) r_no) > max_r;
@r2 =
SELECT *
FROM @data
WHERE p_rank >= 1.0 - @percentage;
OUTPUT @r1
TO "/output/top_perc1.csv"
ORDER BY p_rank DESC
USING Outputters.Csv();
OUTPUT @r2
TO "/output/top_perc2.csv"
ORDER BY p_rank DESC
USING Outputters.Csv();