--- --- ZusammenfassungBigQuery - Wie erstellt man eine neue Spalte, in der die Berechnung die neue Spalte selbst enthält?
Ich habe drei Säulen: [visitorID], [Rang], [Zahlen].
In BigQuery, Ich möchte eine neue Spalte [Berechnung] erstellen, die einen Teil der Summe von [Zahlen] und [Berechnung] selbst, incluing angegebenen Bedingungen.
Das Problem, dem ich jetzt begegne, ist, dass "ich in BigQuery keine Spalte erstellen kann, die die Berechnung einschließlich der Spalte benötigt, die ich erstelle". Ich bin nicht sicher, ob mein Konzept oder Idee geeignet ist oder nicht, und ich hoffe, es gibt einige bessere Vorschläge.
--- Details ---
* Die Tabelle I haben:
Eine Tabelle mit drei Spalten: [visitorID], [Rang], [Zahlen].
* Die neue Spalte Ich brauche zu erstellen:
Sie möchten die Spalte [Berechnung] erstellen.
* Die Definition der Berechnung:
Nach der Bestellung von [visitorID] und [Rang], die [Berechnung] ist
(i) Wenn [numbers] = 0, dann [Berechnung ] = 0 (ii) Wenn [Zahlen] <> 0, DANN summieren Sie den aktuellen [Zahlen] -Wert und die vorherige [Berechnungs] -Nummer. (iii) Basierend auf (ii), wenn die Summe größer als 30 ist, dann [Berechnung] = 0, bleibt ELSE [Berechnung] derselbe Summenwert.
* Das Problem I
Ich brauche bin Begegnung mit BigQuery zu verwenden, um diese Art der Berechnung zu tun. Was ich jedoch herausgefunden habe, ist die "Fenster-Summen-Funktion", die dafür keine gute Lösung war. Ich denke, der entscheidende Punkt ist, dass "In BigQuery kann ich keine Spalte erstellen, die die Berechnung einschließlich der Spalte benötigt, die ich erstelle".
Das heißt, ich brauche immer den vorhandenen Wert, um eine neue Spalte zu erstellen. Ich habe meine Beispielabfrage wie folgt, die das Problem nicht lösen kann. Und Sie können auch den Druckbildschirm sehen, um zu verstehen, was das Problem ist.
Siehe Beispielabfrage wie folgt.
SELECT
visitorID,
rank,
numbers,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank) AS window_sum_current,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS window_sum_prec1
FROM sample_table
* Sucht Vorschläge
Ich mag würde für Anregungen fragen. (1) In BigQuery, ist dieses Problem lösbar oder nicht? (2) Welche Methode oder Konzept fehlt mir? (3) Was ist ein besserer Weg, um das Problem in BigQuery zu lösen?
Vielen Dank.
Hallo Mikhail, Ich versuche, Ihre Methode, die unglaublich erfolgreich ist. Ich danke dir sehr. Und ich fand es eine Verbindung http://storage.googleapis.com/bigquery-udf-test-tool/testtool.html, wo man die UDF testen kann (aber noch nicht einen Debugger finden ... es ist schwierig, die UDF zu debuggen). Trotzdem, vielen Dank für Ihre Hilfe. Ich verstehe immer noch die Logik, die Sie verwendet haben (vor allem warum die GROUP_COONCAT verwenden), und ich fand, ohne die GROUP_CONCAT verwenden, wird die Länge in der For-Schleife Teil ein Problem sein. Habe gerade eine fantastische Lektion gelernt :-) –