BigQuery Scripting wurde am 3. Oktober letzten Jahres (2019) in der Beta veröffentlicht. Wenn Sie es gut verwenden, können Sie es durch Python-Verarbeitung ersetzen, oder? Ich war begeistert, aber ich (+ Team), der nicht so gut programmieren kann, weiß nicht, wie man es benutzt.
Sie verwenden tatsächlich "[BigQuery Scripting wurde in der Beta-Version veröffentlicht, gehen wir also leicht durch](https://medium.com/google-cloud-jp/bigquery-scripting%E3%81%8Cbeta%E3%83" % AA% E3% 83% AA% E3% 83% BC% E3% 82% B9% E3% 81% 95% E3% 82% 8C% E3% 81% 9F% E3% 81% AE% E3% 81% A7 % E8% BB% BD% E3% 81% 8F% E3% 82% A6% E3% 82% A9% E3% 83% BC% E3% 82% AF% E3% 82% B9% E3% 83% AB% E3 % 83% BC% E3% 81% 97% E3% 81% A6% E3% 81% BF% E3% 82% 8B-1408bab2c026) ", aber es ist schwierig zu verwenden.
Nach ein paar Monaten solchen Schmerzes habe ich endlich einen Python-ähnlichen Loop-Prozess bekommen, also werde ich ihn teilen.
Wie Sie wissen, kann BigQuery die SQL-Verarbeitung ausführen, aber es gibt Zeiten, in denen Sie die von einer externen Variablen auszuführende SQL-Bedingung bedingt verzweigen oder schleifen möchten. Normalerweise wird es in einer anderen Sprache wie Python aufgerufen, um den SQL-Prozess zu verzweigen und zu wiederholen, aber Scripting soll ihn in diesem Umfang in BigQuery integrieren. (Vielleicht)
Die verständlichste Verarbeitung, die verwendet werden kann, ist die Referenz "Standard-SQL-Skript". Die folgende Verarbeitung ist jedoch möglich. Es gibt. (Repräsentatives Beispiel)
--DECLARE: Deklaration von Variablen --SET: Wertzuweisung zur Variablen --IF ~ ELSE ~ END IF: Bedingter Zweig --LOOP / WHILE: Schleifenverarbeitung
Wenn Sie beispielsweise SQL für jedes Geschäft aktivieren und den Gesamtumsatz in separaten Tabellen ausgeben möchten, können Sie BigQuery von Python aus wie folgt aufrufen.
for store in stores:
query=f"""
SELECT
store, SUM(Kaufpreis)AS Gesamtbetrag
FROM `myproject.mydataset.transaction_*`
WHERE store = {store_cd}
GROUP BY store
"""
BigQuery Scripting verfügt auch über eine Loop-Verarbeitung, sodass dies problemlos möglich ist. Ich dachte. "[BigQuery Scripting wurde in der Beta veröffentlicht, gehen wir also leicht durch](https://medium.com/google-cloud-jp/bigquery-scripting%E3%81%8Cbeta%E3%83%AA%" E3% 83% AA% E3% 83% v. BB% BD% E3% 81% 8F% E3% 82% A6% E3% 82% A9% E3% 83% BC% E3% 82% AF% E3% 82% B9% E3% 83% AB% E3% 83% BC% E3% 81% 97% E3% 81% A6% E3% 81% BF% E3% 82% 8B-1408bab2c026) " Sie können die Array-Iterationen, die Sie in einer Python-Schleife ausführen würden, nicht ausführen.
Ich wollte es irgendwie machen.
Der nächste Prozess wurde schließlich durch verschiedene Versuche und Versuche durchgeführt, um zu sehen, ob etwas getan werden konnte.
#Deklaration von Variablen
DECLARE stores ARRAY<STRING>; #Erstellen Sie ein Array namens store und führen Sie die Schleife aus
DECLARE x INT64 DEFAULT 1; #In Geschäften verwendete Argumente (Standardwert = 1)
#Zuordnung zu einer Variablen
#Ich wollte automatisch den ARRAY-Wert (Store-Liste) erstellen, also ARRAY_Erstellt mit AGG
SET stores = (
SELECT ARRAY_AGG(store_cd) as list
FROM (SELECT store_cd FROM `myproject.mydataset.mytable` GROUP BY store_cd ORDER BY store_cd)
);
#Schleifenverarbeitung
#Wiederholen Sie dies bis zur Länge der Geschäfte
WHILE x <= array_length(stores) DO
SELECT store_cd, SUM(Kaufpreis)AS Gesamtbetrag
FROM `myproject.mydataset.mytable`
WHERE store_cd=stores [ORDINAL(x)] #Holen Sie sich den X. Wert der Geschäfte
GROUP BY store_cd;
SET x = x + 1;
END WHILE;
Jep. Irgendwie konnte ich eine Schleifenverarbeitung durchführen, die in der alten JAVA verwendet zu werden scheint.
Die Schleifenverarbeitung war vorerst nur während BigQuery möglich. Erstens habe ich geschrieben, ohne ARRAY so oft zu verwenden, daher war es ein Schmerz, diesen Prozess zu verwenden. (Wenn du kannst, scheint es einfach zu sein)
In Zukunft möchte ich mich der Herausforderung der bedingten Verzweigung stellen (IF-Anweisung).
Recommended Posts