2017-09-21 140 views
0

我有一個USQL查詢可以在管理表中針對400M記錄自行運行。 但是在開發過程中,我不想一直對所有記錄運行它,所以我彈出一個where子句,運行一小段數據,並在大約2分鐘(@ 5 AU)內完成,寫出結果到我的數據湖中的tsv。 滿意。USQL嵌套查詢性能

但是,我現在想用它作爲第二個查詢和進一步處理的來源。 因此,我創建了原始USQL(減去where子句)的視圖。 然後進行測試,一個新的腳本:

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

現在我期待的是作爲最初的原始查詢大約在同一時間執行英寸但是,我得到了4分鐘,通過計劃只有10%,並取消 - 有些不對。

沒有專家在閱讀工作圖,但... 原始腳本開始與2 *'提取組合分區'兩個閱讀一對夫婦的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的世界來看,似乎還有一些根本性的差異,我仍然絆倒。