Je pense que ce problème est lié à l'optimisation des requêtes effectuée par Azure Data Lake Analytics; mais voyons ...USQL Nesting TVFs et Queries donne des résultats épouvantables
J'ai 2 requêtes séparées (TVF) faisant des agrégations, puis une requête finale pour joindre les 2 ensemble pour les résultats finaux. Alors ...
Table > Header Query
Table > Detail Query
Result = Header Query + Detail Query
Pour tester toute la logique, je lance les requêtes mineures séparément avec un filtre, stocker les résultats dans un fichier, puis utilisez les fichiers durs comme sources pour la requête finale; ce sont les durées totales (minutes).
Header Query 1.4 (408 rows)
Detail Query 0.9 (3298 rows)
Final Query 0.9 (408 rows)
Donc, je sais qu'au maximum, je peux obtenir mon résultat en environ 3,5 minutes. Cependant, je ne veux pas vraiment créer de nouveaux fichiers intermédiaires. Je veux utiliser les TDF directement pour alimenter la requête finale. Avec les TDF dans la requête finale, le graphique du travail obtient 97% de progression en environ 1,5 minute. Mais alors, tout l'enfer se déchaîne! Le dernier noeud est un agrégat avec 2500 sommets qui indique 16 minutes de temps de calcul. Donc ma question ... POURQUOI ??
Est-ce un cas où je ne comprends pas certains concepts fondamentaux du fonctionnement d'Azure?
Donc, quelqu'un peut-il expliquer ce qui se passe? Toute aide appréciée.
requête finale:
@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]
;
assez calme sur les réponses ... ce qui signifie que j'ai soit posé une question stupide ou il a expliqué tout faux. Que puis-je faire pour gagner de l'intérêt? – SimonB