2016-06-06 4 views
0

행의 총 개수를 가지고 상위 3 %를 취할 필요가있는 하나 개의 데이터 집합을 가지고 나에게 rows.I의 상위 N 비율을 가져 U-SQL 쿼리를 작성하는 데 도움이 필요 U-SQL 쿼리의 행 N 비율을 가져 오기 위해 필요 col1을 기반으로하는 데이터 세트의 행 내가 작성한 코드는 다음과 같습니다

@count = SELECT Convert.ToInt32(COUNT(*)) AS cnt FROM @telData; 
@count1=SELECT cnt/100 AS cnt1 FROM @count; 
DECLARE @cnt int=SELECT Convert.ToInt32(cnt1*3) FROM @count1; 


     @EngineFailureData= 
      SELECT vin,accelerator_pedal_position,enginefailure=1 
      FROM @telData 
      ORDER BY accelerator_pedal_position DESC 
      FETCH @cnt ROWS; 

@telData 도움에 대한 내 기본 dataset.Thanks입니다. 첫째

답변

1

일부 의견 : 인수 (https://msdn.microsoft.com/en-us/library/azure/mt621321.aspx)

  • @var = SELECT ...SELECT로 시작하는 행 집합 표현에 이름 @var를 할당으로

    1. FETCH는 현재 리터럴을합니다. U-SQL (현재)은 쿼리 결과에서 스테이트 풀 스칼라 변수를 할당하지 않습니다. 백분율을 얻으려면

      ROW_NUMBER()PERCENT_RANK() 기능을 살펴 :. 대신 솔루션에 지금의 스칼라 값에 가입

    JOINCROSS JOIN 등을 사용합니다. 예를 들어, 다음 중 하나를 사용하여 질문에 대답하는 방법을 보여줍니다. PERCENT_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();