Rejoint sur Google Bigquery
Je sais que le travail est fait pour améliorer la fonctionnalité de Jointure sur Bigquery, pas de coup de gueule ici, mais il sera difficile d'analyser 'To' ensembles de données sous forme de "annoncés" si le Joint ne peut pas être utilisé correctement.
OK, revenons au problème, j'ai deux tables, l'une est de 600 Mo et l'autre est 50Megs, j'ai essayé de faire une jointure et j'ai eu une erreur à propos de petite table doit être à gauche. J'ai fait quelques recherches et j'ai trouvé que Bigquery
considère que les deux tables plus grande si elles sont plus de 7MO?
Après quelques conseils que j'ai trouvé en ligne, je ne sélectionnez le jeu de données en question de la plus petite table et enregistré dans un nouveau tableau, le nouveau jeu de données est de 12 mo et 600K lignes sur deux colonnes. Ensuite, j'ai essayé mon nouveau requête mais je reçois toujours le même message d'erreur :
Query Failed : Error: Large table cdrs_test.geoIP_Left must appear as the leftmost table in a join query
geoIP_Left est de 12 Mégas, l'autre table est 600Megs..
Cela peut-il être fixé d'une manière ou suis-je en panne? Si donc quelqu'un sait à propos de tout autre service que je peux utiliser pour analyser de grands ensembles de données qui prend en charge les jointures?
EDIT: C'est le réel de la requête;
SELECT COUNT(results.cc_card) AS count,
sum(results.sessiontime) AS time,
geoIP_Left.place AS place
FROM cdrs_test.cdrs_2010_5 AS results
JOIN cdrs_test.geoIP_Left AS geoIP_table
ON results.cc_card = geoIP_table.vcard
WHERE results.sessiontime > 0 AND results.countryName Contains 'India'
GROUP BY place;
- Pourriez-vous montrer votre requête réelle?
- Assurez-vous ..ici vous allez
- SELECT COUNT(les résultats.cc_card) COMME le nombre,la somme(les résultats.sessiontime) COMME le temps, geoIP_Left.place de place DE cdrs_test.cdrs_2010_5 QUE les résultats de REJOINDRE cdrs_test.geoIP_Left COMME geoIP_table SUR les résultats.cc_card = geoIP_table.vcard OÙ les résultats.sessiontime > 0 ET les résultats.countryName Contient "l'Inde" GROUPE de la place;
- Ajout de la requête à la question pour des raisons de lisibilité.
Vous devez vous connecter pour publier un commentaire.
Vous pourrait exprimer cette requête comme une sous-sélection qui référence uniquement les colonnes de
cdrs_test.geoIP_Left
qui vous intéressent. Voir le deuxième exemple ici.Vous pouvez aussi tout simplement exécuter plusieurs requêtes - notez que vous pouvez enregistrer les résultats de la requête, explicitement, comme un nom de table, et d'utiliser cette table dans une version ultérieure de la requête.
Enfin, une autre option serait de pré-joindre les données, en utilisant (par exemple) un MapReduce pipeline de transformation, ou d'un Outil ETL fournie par l'un des BigQuery ETL partenaires.
Comme mentionné par Felipe dans le commentaire. BigQuery a permis un modificateur "CHACUN" à se JOINDRE à autoriser les Jointures de 2 grandes tables. À partir de la Requête d'une page de Référence -
Lorsque cela est possible, utilisez la commande JOINDRE sans le CHAQUE modificateur pour de meilleures performances. L'utilisation se REJOINDRE lorsque les dimensions de la table sont trop grands pour REJOINDRE.