2017-09-21 9 views
0

관리되는 테이블의 400M 레코드에 대해 자체적으로 실행되는 USQL 쿼리가 있습니다. 그러나 개발 중에는 모든 레코드에 대해 항상 실행하고 싶지 않으므로 where 절을 넣고 작은 하위 섹션에 대해 실행하고 약 2 분 (@ 5 AU)으로 완료합니다. 내 데이터 호수에서 TSV로 결과를 작성합니다. 행복합니다.USQL 중첩 쿼리 성능

그러나 두 번째 쿼리 및 이후 처리를위한 원본으로 사용하고 싶습니다. 그래서 원본 USQL (where 절 제외)로 뷰를 생성합니다. 그런 다음, 새로운 스크립트를 테스트 :

'Select * from MyView WHERE <my original test filter>'. 

지금 나는 원래 원시 쿼리로 같은시기에 실행하기 위해 기다리고 있었다. 하지만 대신 4 분, 계획을 통해 불과 10 %에 도달, 취소 - 뭔가 옳지 않다.

작업 그래프를 읽을 수있는 전문가가 없지만 ... 원래 스크립트는 2 개의 '압축 풀기 파티션'으로 시작됩니다. 둘 다 hundered MB를 읽었을 때 저장된보기에서 선택하면 100GB가 넘습니다! 따라서이 단계에서는 where 절을 전혀 고려하지 않습니다.

분명히 이것은 DLA가 백그라운드에서 작동하는 방법에 대해 아직 이해하지 못했음을 보여줍니다!

(a) 무슨 일이 일어나고 있고 (b) 내가 원하는 행동을 취할 수있는 길을 이해했는지 알려주시겠습니까?

현재 테이블에 첫 번째 결과를 저장하고 두 번째 쿼리를 호출하는 저장 프로 시저와의 플레이가 있습니다. 그러나 '전통적인'SQL Server와 비교할 때 과장된 것 같습니다.

모든 포인터 & 힌트를 높이 평가합니다! 많은 감사

원본 자료 쿼리

:

CREATE VIEW IF NOT EXISTS Play.[M3_CycleStartPoints] 
AS 

//@BASE = 
SELECT ROW_NUMBER() OVER (PARTITION BY A.[CTNNumber] ORDER BY A.[SeqNo]) AS [CTNCycleNo], A.[CTNNumber], A.[SeqNo], A.[BizstepDescription], A.[ContainerStatus], A.[FillStatus] 
FROM 
[Play].[RawData] AS A 
LEFT OUTER JOIN 
    (
     SELECT [CTNNumber],[SeqNo]+1 AS [SeqNo],[FillStatus],[ContainerStatus],[BizstepDescription] 
     FROM [Play].[RawData] 
     WHERE [FillStatus] == "EMPTY" AND [AssetUsage] == "CYLINDER" 
    ) AS B 
      ON A.[CTNNumber] == B.[CTNNumber] AND A.[SeqNo] == B.[SeqNo] 
WHERE (
     (A.[FillStatus] == "FULL" AND 
     A.[AssetUsage] == "CYLINDER" AND 
     B.[CTNNumber] == A.[CTNNumber] 
     ) OR (
     A.[SeqNo] == 1 
     ) 
    ); 

     //AND A.[CTNNumber] == "BE52XH7"; 
     //Only used to test when running script as stand-alone & output to tsv 

두 번째 쿼리

SELECT * 
FROM [Play].[M3_CycleStartPoints] 
WHERE [CTNNumber] == "BE52XH7"; 
+0

로컬 에뮬레이터가 설치되어 있다고 가정 할 때 Visual Studio의 로컬 환경을 사용하는 것이 좋습니다. 테스트 할 축소 된 데이터 세트를 호스트 한 다음 드롭 다운을 사용하여 실제 Azure Data Lake Analytics 계정에 액세스하십시오. 나는 이것을 항상 사용하고 매끄러운 스위치를 좋아합니다. – wBob

답변

0

좋아, 난이있어, 또는 적어도 부분적 것 같아요.

테이블 반환 함수 http://www.sqlservercentral.com/articles/U-SQL/146839/

은보기에 인수의 통과를 허용하고 결과를 반환합니다.

그래도이 주제를 둘러싼 독서 자료를 찾는 데 관심이 있습니다. T-SQL 세계에서 왔을 때, 여전히 근본적인 차이점이 있습니다.