この問題は、Azure Data Lake Analyticsが実行するクエリの最適化に関連していると私は考えています。しかし、見てみよう...USQL TVFとクエリをネストすると、恐ろしい結果が得られます
私は2つの個別のクエリ(TVFs)集計をして、最終的な結果のために一緒に2に参加する最後のクエリがあります。 だから... ...うち全体のロジックをテストする
Table > Header Query
Table > Detail Query
Result = Header Query + Detail Query
は、私は結果をファイルに格納し、フィルタとは別にマイナーなクエリを実行し、最終的に、クエリのソースとしてハードファイルを使用します。これらは合計所要時間(分)です。
Header Query 1.4 (408 rows)
Detail Query 0.9 (3298 rows)
Final Query 0.9 (408 rows)
私は最大で約3.5分で結果を得ることができることを知っています。 しかし、私は本当に新しい仲介ファイルを作成したくありません。 TDFを使用して最終クエリを直接フィードしたいと思います。
最後のクエリでTDFを使用すると、ジョブグラフは約1.5分で約97%の進捗になります。 しかし、すべての地獄は緩んで壊れます! 最後のノードは、計算時間が16分であることを示す2500個の頂点を持つ集約です。 だから私の質問...なぜですか?
Azureの仕組みの基本的な概念を理解していないのですか?
誰もが何が起こっているのか説明できますか? 助けていただければ幸いです。
決勝問合せ:
@Header =
SELECT [CTNNumber],
[CTNCycleNo],
[SeqStart],
[SeqEnd],
[StartUTC],
[EndUTC],
[StartLoc],
[StartType],
[EndLoc],
[EndType],
[Start Step],
[Start Ctn Status],
[Start Fill Status],
[EndStep],
[End Ctn Status],
[End Fill Status]
FROM [Play].[getCycles3]
("") AS X;
@Detail =
SELECT [CTNNumber],
[SeqNo] AS [SeqNo],
[LocationType],
[LocationID],
[BizstepDescription],
[ContainerStatus],
[FillStatus],
[UTCTimeStampforEvent]
FROM [Play].[getRaw]
("") AS Z;
@result =
SELECT
H.[CTNNumber], H.[CTNCycleNo], H.[SeqStart], H.[SeqEnd]
,COUNT([D].[SeqNo]) AS [SeqCount]
//, COUNT(DISTINCT [LocationID]) AS [#Locations]
FROM
@Header AS [H]
INNER JOIN
@Detail AS [D]
ON
[H].[CTNNumber] == [D].[CTNNumber]
WHERE
[D].[SeqNo] >= [H].[SeqStart] AND
[D].[SeqNo] <= [H].[SeqEnd]
GROUP BY
H.[CTNNumber], H.[CTNCycleNo], H.[SeqStart], H.[SeqEnd]
;
かなり静かな...私はどちらかばかな質問をしたり、それがすべて間違って説明してきたことを意味している:ここで
は、CREATE STATISTICSを取り巻くいくつかのドキュメントです。 興味をそそるために何ができますか? – SimonB