我有一個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";
假設您安裝了本地模擬器,一個建議可能是從Visual Studio使用本地環境。託管一個縮小的數據集以進行測試,然後使用下拉菜單訪問您的實際Azure Data Lake Analytics帳戶。我一直都在使用它,並喜歡無縫切換。 – wBob