2016-07-26 9 views
0

Ich habe eine Tabelle und möchte den häufigsten Wert einer bestimmten Spalte zurückgeben. Normalerweise würde man das mit dem klassischen GROUP BY ... ORDER BY ... LIMIT tun. Ich stolperte über die TOP Funktion von BigQuery und interessierte mich dafür, da die Dokumentation besagt, dass es im Allgemeinen schneller ist. Die Dokumentation sagt aber auch, dass es "möglicherweise nur ungefähre Ergebnisse zurückgeben kann". Wann ist das der Fall und ist die Verwendung der TOP Funktion im Allgemeinen es wert, wenn man genaue Ergebnisse benötigt?Wann gibt die TOP-Funktion von Google BigQuery ungefähre Ergebnisse zurück?

Ausführliche Beschreibung der documentation:

TOP ist eine Funktion, die eine Alternative zum GROUP BY-Klausel ist. Es wird als vereinfachte Syntax verwendet für GROUP BY ... ORDER BY ... LIMIT .... Im Allgemeinen führt die TOP-Funktion schneller als die vollständige ... GROUP BY ... ORDER BY ... LIMIT ... Abfrage, kann aber nur ungefähre Ergebnisse zurückgeben.

+0

Wichtig auf SO, können Sie akzeptierte Antwort markieren, indem Sie das Häkchen auf der linken Seite der veröffentlichten Antwort, unterhalb der Abstimmung. Siehe http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235, warum dies wichtig ist. Auch wichtig, auf der Antwort zu stimmen. Stimmen Sie Antworten ab, die hilfreich sind. Es gibt mehr ... Sie können überprüfen, was zu tun ist, wenn jemand Ihre Frage beantwortet - http://stackoverflow.com/help/someone-answers. –

+0

Ich bin mir der Praktiken auf SO bewusst, aber Ihre Antwort geht nicht direkt auf die Fragen ein, die ich gestellt habe, daher kann ich sie nicht akzeptieren. Ich schätze Ihre Zeit aber, so dass es tatsächlich eine Aufwertung verdient. –

Antwort

1

unten könnte mehr fit für einen Kommentar - aber zu lange, so habe ich es in Antwort

Bisher aus meiner Erfahrung als nur gut ist, durch eine vereinfachte Alternative zu GROUP zu haben - das heißt, btw , nur in einfachen Szenarien anwendbar: A query that uses the TOP() function can return only two fields: the TOP field, and the COUNT(*) value.

Das sagte - Ich sehe keine Diskrepanz in den Zahlen, während ich sehe, dass es schneller läuft.
Also, überprüfen Sie unten den Vergleich, den ich gegen Tabelle mit 2.5B Reihen laufe. Wie Sie sehen können - zählt, sind genau das gleiche und Laufzeit 15% schneller

enter image description here

enter image description here

Zur gleichen Zeit, wenn Sie ähnliche Abfragen ausgeführt werden und überprüfen Query Plan Explanation - Sie werden völlig sehen verschiedene Ausführungsmuster, die zu einem anderen Ergebnis führen könnten, aber ich konnte einen solchen Anwendungsfall nicht erfassen

+1

Mit nur 5 verschiedenen Elementen ist es einfach, einen Zähler zu zählen: Sie benötigen nur 5 Zähler. Mit 1.000.000 verschiedenen Elementen benötigen Sie genug Speicher für eine Million verschiedener Zähler. TOP() ist in der Lage, Ihnen die Top-Elemente mit viel weniger Speicher zu zeigen, zum Preis von ungefähren Ergebnissen. Deshalb ist TOP viel schneller, und warum bekommst du genaue Ergebnisse hier :). –

+0

Sinn machen! Danke, Felipe! –