Je souhaite poser une question concernant la jointure croisée sur BigQuery. J'effectue une jointure croisée où les 2 tables sont en fait énormes (disons 2 millions et 1 million) la requête s'exécute comme pour toujours. Existe-t-il un moyen ou une alternative en matière de jointure croisée?
3 Réponses :
S'il y a M lignes de la première et N lignes de la seconde, le résultat est M * N lignes. Dans votre cas, 1M * 1M serait énorme et la requête s'exécuterait pour toujours. Veuillez passer par le lien ci-dessous qui définit les jointures croisées pour éviter les anti-modèles: https://cloud.google.com/bigquery/docs/best- pratiques-performances-modèles
Ou, vous pouvez écrire un problème spécifique sur lequel vous travaillez et les gens ici pourront peut-être vous aider.
La jointure croisée signifie que le serveur doit mapper la table A chaque ligne avec la table B chaque ligne pour obtenir toutes les combinaisons de données possibles. Dans votre cas, cela donne 2 millions x 1 million = 2 × 10¹²
lignes à générer par le serveur! Si vous avez vraiment besoin de quelque chose comme la jointure croisée - échantillonnez vos grandes tables avec les fonctions random ()
pour obtenir de petits ensembles de tests raisonnables, puis effectuez une jointure croisée sur eux plus tard, pour réduire l'ensemble de sortie.
Vous devez utiliser la jointure croisée dans les cas où vous devez associer chaque élément d'une table à chaque élément de l'autre table. Dans ce cas, si vous utilisez une jointure croisée, vous obtiendrez une réponse de 2 billions d'enregistrements. Sur cette page , vous pouvez trouver tous les types de requêtes dans BigQuery et son utilisation.
Essayez de mieux décrire votre problème afin que je puisse vous aider à trouver une solution réalisable car la jointure croisée n'est pas une bonne possibilité dans ce cas.
Oui, ne faites pas la jointure croisée. Gardez à l'esprit que les enregistrements de 1 mil x 1 mil représentent en fait un billion d'enregistrements. Même si chaque enregistrement de ce jeu de résultats n'avait qu'une empreinte mémoire d'un seul octet, il nécessiterait 1 To de mémoire. Vous n'avez probablement pas besoin de faire cela en premier lieu. Ajoutez plus d'informations et peut-être que quelqu'un ici pourra vous aider.
Ne sauvez pas la table! Cela cassera le budget! Il est plutôt inconcevable que vous ayez réellement besoin d'une
jointure croisée
. Vous devriez peut-être poser une autre question et expliquer ce que vous essayez de faire, fournir des exemples de données, les résultats souhaités et la requête (peut-être simplifiée) que vous utilisez actuellement.aah ok alors, je décide de ne pas poursuivre la requête tho, car j'ai peur du coût, merci quand même pour les réponses et les réponses: D