2017-10-02 2 views
1

J'essaie de comprendre pourquoi une requête BigQuery prend tellement de temps.vitesse BigQuery - temps de __SHUFFLE1_REPARTITION0

Il ya quelques messages sur l'interprétation de la sortie de Explanation, mais n'a rien trouvé pour vous aider à comprendre ce qui se passe dans ce cas.

Vous ne savez pas pourquoi lire depuis __PSRC___SHUFFLE2_0 et écrire au __SHUFFLE2_REPARTITION0 prendrait tellement de temps? Est-ce repartitionnement par une nouvelle clé? (Bien que l'étape précédente, 13, a également été écrit par HASH($290)

Cela prend actuellement environ 200s sur un échantillon de nos données, dont 70% est consacré à cette étape.

(je ne peux pas poster toute requête ici, si je pouvais poster une version expurgée si utile.)

Query Timing

+0

Les étapes 2 et 5 sont intéressantes. L'étape 2 va de 2M lignes à 7M et l'étape 5 reçoit 10 M lignes avec une sortie de 140M. Je suspecte des jointures explosives. Quelle est la taille de la taille des données interrogées? –

Répondre

2

Évitez Exploding rejoint.

Sans beaucoup plus Contex t, je ne peux pas dire ce qui se passe, mais le stade 2 et 5 sont intéressants:

  • Etape 2 va de 2M lignes à 7M
  • Etape 5 obtient 10 M lignes avec une sortie de 140M.

je soupçonne que rejoint explosant. Quelle est la taille de la taille des données interrogées?

Sans données supplémentaires, je vais dire que je suis heureux que BigQuery peut gérer l'explosion des jointures comme celles-ci, mais je ne voudrais pas attendre des requêtes extrêmement rapides lorsque vous faites exploser les jointures.

Pour un exemple concret de l'explosion se joint, jetez un oeil à https://stackoverflow.com/a/46533335/132438.

+0

OK, merci. L'étape 2 est un 'UNNEST' et l'étape 5 est un' JOIN ', que je vais étudier. – Maximilian

+0

Savez-vous pourquoi tout le temps serait consacré au Shuffle & Repartition s'il s'agit d'une jointure explosive? Pourquoi la dépense ne proviendrait-elle pas de la jointure elle-même? – Maximilian

+0

BigQuery examine le nombre de lignes que la requête va analyser et décide de donner 100 emplacements à ce travail. Soudainement cette requête va plus de 10000x fois plus de lignes, et plus de nœuds sont nécessaires (jointure explosive). Pour mettre ces noeuds au travail, BigQuery doit re-shuffle et re-partitionner toutes les données en vol. C'est pourquoi cela devient le pas lent. –