Dans Azure Data Warehouse, il est recommandé d'utiliser HASH pour les tables distribuées sur les champs que vous envisagez de JOIN et même potentiellement agréger. Il est également recommandé de créer des statistiques sur les champs que vous prévoyez d'utiliser. Disons que vous avez deux tables avec la même quantité d'enregistrements et de champs. Une table est hachée sur une clé très unique où l'autre est ROUND_ROBIN, où les données sont réparties de façon aléatoire entre les 60 bases de données.Les statistiques aident-elles les champs sur JOINS comme le hachage dans Azure Data Warehouse?
-- CustomerID is alphanumeric
SELECT
[ProductID]
,COUNT(DISTINCT [CustomerID]) AS [Unique Records]
FROM [dbo].[FactTable]
GROUP BY
[Product]
Sur la table hachée, si vous regroupez sur la clé hachée, vous pouvez le voir est le retour des résultats dans 0,05 secondes. Sur la table ronde, avec la même agrégation, c'est 0,51 secondes. Lorsque vous appliquez des statistiques aux champs que vous agrégez, la table hachée retourne toujours dans 0.05 secondes. Pas de changement. Lorsque vous faites la même chose à la table round robin, les résultats reviennent à la même chose que le hashed dans les 0,05 secondes.
Note: 2000 DWU requête en cours d'exécution en ressources xlarge (allocation mémoire max)
Lors de l'examen de la distribution de la clé hachée, je l'ai trouvé 140 millions d'enregistrements sont stockés dans une distribution des 60 bases de données. 50 millions d'autres enregistrements sont distribués assez uniformément dans les 59 autres bases de données. Une valeur par défaut rend ma clé hachée pas un bon candidat pour un hachage. Ma question est la suivante: alors que la table ronde avec statistiques fonctionne très bien sur le même champ que je suis avec l'autre table, est-ce que les mêmes performances resteront quand j'utiliserai le round robin sur JOINS avec cette touche? Je ne l'ai pas encore testé complètement, mais je cherche la meilleure approche.
Les statistiques aident-elles sur les jointures? Certains des articles que j'ai lus disent qu'ils le font, mais voir si quelqu'un d'autre a des réponses plus solides sur l'approche lorsque l'on considère Round Robin sur une clé de distribution. Je n'ai pas vraiment de bons candidats qui ne causent pas de biais de données comme dans mon exemple ci-dessus avec les 140 millions.
Si vous souhaitez que les réponses soient plus concrètes, il serait utile de publier le plan d'explication pour toutes les requêtes que vous avez testées. Mettez le mot 'EXPLAIN' devant la requête et exécutez-le, puis copiez le code XML dans votre question. – GregGalloway
N'en a pas vraiment, mais inclus l'exemple SQL pour référence. C'est juste une requête de base SELECT COUNT (DISTINCT) GROUP BY. – Fastidious
pouvez-vous en obtenir un? Je voudrais voir si les statistiques changent le plan d'explication ou si les différences de performance sont juste liées à la mise en cache. – GregGalloway