Wenn LAST oder FIRST in einer Abfrage verwendet wird, die mehrere Tabellen ausführt, sind die zurückgegebenen Ergebnisse nicht konsistent. Wenn Sie dieselbe Abfrage erneut ausführen, werden jedes Mal andere Ergebnisse zurückgegeben.Die Verwendung von FIRST oder LAST over partitionierten Tabellen gibt inkonsistente Werte zurück
Die zurückgegebenen Werte stimmen jedoch mit den korrekten Werten LAST und FIRST von eins der Tabellen in der Abfrage überein. Die jeweils verwendete Tabelle scheint jedoch zufällig ausgewählt zu sein.
Zum Beispiel die Abfrage unter:
SELECT
FIRST(timestamp) as first_ts,
FROM TABLE_DATE_RANGE([some_table]_, timestamp('2016-07-21'), timestamp('2016-07-22'))
zurückkehren wird:
first_ts
2016-07-22 07:35:30 UTC
das erste Mal ausgeführt wird, und:
first_ts
2016-07-21 23:16:26 UTC
das nächste Mal ausgeführt wird. Und so weiter.
Das erwartete Ergebnis ist 2016-07-21 23:16:26
. Der Wert 2016-07-22 07:35:30 UTC
ist jedoch der erste Zeitstempel der Tabelle [some_table]_20160722
. Daher glaube ich, dass BigQuery es nicht ermöglicht, die Tabellen bei der Abfrage zwischen Tabellen zu sortieren. Als Ergebnis werden FIRST und LAST unzuverlässig, da die Reihenfolge der Tabellen nicht bekannt ist. Beachten Sie, dass MAX und MIN tun gut über Tabellen arbeiten.
Dies gilt nicht nur für die Verwendung der Legacy-SQL, sondern auch für die Verwendung der neuen SQL und der Funktionen FIRST_VALUE und LAST_VALUE (da FIRST und LAST nicht mehr unterstützt werden. Wahrscheinlich verwandt?) Siehe Beispiel unten mit neuer SQL.
SELECT
FIRST_VALUE(timestamp) OVER (ORDER BY event_sequence ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) first_ts,
FROM `some_table_*`
WHERE _TABLE_SUFFIX BETWEEN '20160721' AND '20160722'
Zusätzlich wird ein ähnliches Verhalten (und dies könnte ein anderes Thema in Betracht gezogen wird) wird beobachtet, wenn eine einzige Tabelle Abfrage wo Daten mehrfach auf sie angehängt wurden. Die Ergebnisse von FIRST und LAST werden inkonsistent. Jede geladene Teilmenge von Daten verhält sich wie eine Partition.
Das scheint mir wie ein Fehler, es sei denn, jemand kennt einen Weg, dies zu tun. Google Bigquery Team, wir lieben Ihr Produkt. Aber könnten Sie das bitte reparieren? Wir können FIRST- und LAST-Aggregationen nicht zuverlässig verwenden, und das ist eine große Sache für uns. Vielen Dank!
Wichtig auf SO, können Sie, indem Sie das Häkchen auf der linken Seite der entsandten Antwort akzeptierte Antwort markiert, unter dem Wählen. Siehe http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235, warum dies wichtig ist. Es gibt mehr ... Sie können überprüfen, was zu tun ist, wenn jemand Ihre Frage beantwortet - http://stackoverflow.com/help/someone-answers. –