Wie schreibt man einen LEFT JOIN in BigQuery ist Standard-SQL?
Wir haben eine Abfrage, die funktioniert in BigQuery-Legacy-SQL. Wie schreiben wir es in Standard-SQL, damit es funktioniert?
SELECT Hour, Average, L.Key AS Key FROM
(SELECT 1 AS Key, *
FROM test.table_L AS L)
LEFT JOIN
(SELECT 1 AS Key, Avg(Total) AS Average
FROM test.table_R) AS R
ON L.Key = R.Key ORDER BY Hour ASC
Derzeit die Fehler die es gibt ist:
Equality is not defined for arguments of type ARRAY<INT64> at [4:74]
BigQuery verfügt über zwei Modi für Anfragen: ältere SQL und SQL-Standard. Wir haben uns angeschaut, die BigQuery Standard-SQL-Dokumentation und auch sehen, SO beantworten auf Standard-SQL-joins in BigQuery - aber so weit, so unklar ist uns, was die key-änderung benötigt werden könnte.
Table_L sieht wie folgt aus:
Row Hour
1 A
2 B
3 C
Table_R sieht wie folgt aus:
Row Value
1 10
2 20
3 30
Ergebnisse Gewünscht:
Row Hour Average(OfR) Key
1 A 20 1
2 B 20 1
3 C 20 1
Wie wir diese umschreiben BigQuery Legacy-SQL-Abfrage zum arbeiten im Standard-SQL?
- Was willst du mit dieser Abfrage zu tun? Es sei denn
key
ist eine Spalte intable_L
dies nicht funktionieren sollte, in einer der beiden Versionen. - zeigen Sie die Abfrage, die für Sie arbeitet im Legacy-SQL, und so werden wir in der Lage sein, um Ihnen zu helfen mit der Arbeit, die version in Standard-SQL
- Die Abfrage, die funktioniert im Legacy-SQL aufgelistet werden, ist bereits gezeigt. Das ist die eine, die die Fehler bei der Verwendung in SQL-Standard, wird gezeigt, wie gut.
- Abfrage in deine Frage macht nicht viel Sinn und so ist es schwer zu helfen, w/o zu verstehen, was es ist, dass Sie versuchen zu tun. Ich schlage vor, Sie zu erklären, was genau Sie tun, mit dem Beispiel von Eingabedaten und erwartete Ausgabe
- Die Abfrage ist das hinzufügen der Durchschnitt der Tabelle auf der "rechten" zu jeder Zeile der "linken" Tabelle. Ist es eine Art zu tun, die einen cross join. Es funktioniert gut auf BigQuery. Warum sollte es nicht funktionieren?
- Beispiel-Tabellen Hinzugefügt.
- Da die
ON
Zustand hatl.key
in es. Es sei denn, dass eine Spalte in der Tabelle, dann erhalten Sie eine Fehlermeldung. Und, Sie haben bereits zwei Spalten mitkey
imselect
, das ist umständlich, zumindest. - Schlüssel-Feld ist nicht in der Tabelle - was ist der Sinn/die Logik hinter "key" - Feld?
- Das Key-Feld in dieser Abfrage ermöglicht einen cross-join-Typ Funktion zwischen den beiden Tabellen, wenn die Tabellen nicht wirklich ein verknüpfen Schlüssel.
- wie Sie sehen können aus meiner Antwort - Sie brauchen nicht cross join der hier (zumindest so wie die Frage formuliert ist, jetzt) somit müssen keine künstlichen Schlüssel Feld :o)
- Ja. Schön. Versuchen Sie es jetzt. Auch haben wir gerade entdeckt, wir waren fehlende Teil der Abfrage, wenn wir es kopiert über. Die Abfrage sollte machen jetzt mehr Sinn. Auch der Fehler ist ein anderer Fehler, die wir korrigieren oben.
- Sie haben zu Recht über die Abfrage nicht funktioniert. Wir haben gerade realisiert, dass wir uns verpasst, die Eröffnung Teil der Abfrage an, wenn wir es kopiert über. Es ist genau jetzt und der Fehler BigQuery wirft aktualisiert wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihren letzten update in Frage und Kommentare - versuchen Sie es unter
Oben ist für die Prüfung
die Abfrage, die Sie ausführen sollten, in "Produktion" ist
Im Fall, wenn aus irgendeinem Grund Sie gebunden sind, VERBINDEN, verwenden Sie die folgende CROSS JOIN-version
oder unten LEFT-JOIN-Ausführung mit Schlüssel-Feld, beteiligt (im Falle dass, wenn der Schlüssel wirklich wichtig für Ihre Logik - die ich irgendwie fühle, ist wahr)
Ihre Fehlermeldung deutet darauf hin, dass
key
ist nicht eine Spalte intable_L
. Wenn Nein, dann zählen Sie nicht in der Abfrage.Sieht es aus wie Sie wollen einfach die Durchschnitt der Summe von
table_R
. Sie können dieses Konzept als: