J'ai essayé le traitement de boucle de type Python avec BigQuery Scripting

introduction

BigQuery Scripting est sorti en version bêta le 3 octobre de l'année dernière (2019). Si vous l'utilisez bien, vous pouvez le remplacer par un traitement Python, non? J'étais enthousiaste, mais moi (+ équipe) qui n'est pas si douée en programmation ne sais pas comment m'en servir.

Vous utilisez actuellement "[BigQuery Scripting a été publié en version bêta, alors allons-y doucement](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) ", mais il est difficile à utiliser.

Après quelques mois d'une telle douleur, j'ai finalement eu un processus de boucle de type Python, donc je vais le partager.

Qu'est-ce que le script BigQuery?

Comme vous le savez, BigQuery peut exécuter un traitement SQL, mais il arrive parfois que vous souhaitiez créer une branche conditionnelle ou une boucle du SQL pour qu'il soit exécuté par une variable externe. Normalement, il est appelé dans un autre langage tel que Python pour créer des branches et répéter le processus SQL, mais le script doit l'intégrer dans BigQuery dans cette mesure. (Peut-être)

Le traitement le plus compréhensible pouvant être utilisé est la référence "Script SQL standard", mais le traitement suivant est possible. Il y a. (Exemple représentatif)

--DECLARE: Déclaration des variables --SET: affectation de valeur à une variable --IF ~ ELSE ~ END IF: branche conditionnelle --LOOP / WHILE: traitement en boucle

Chose que tu veux faire

Par exemple, si vous souhaitez activer SQL pour chaque magasin et afficher le total des ventes dans des tables distinctes, vous pouvez appeler BigQuery à partir de Python comme suit.

for store in stores:
  query=f"""
  SELECT
   store, SUM(Prix d'achat)AS montant total
   FROM `myproject.mydataset.transaction_*`
   WHERE store = {store_cd}
   GROUP BY store
  """

Les scripts BigQuery disposent également d'un traitement en boucle, ce qui permet de le faire facilement de cette manière. Je pensais. Cependant, "[BigQuery Scripting a été publié en version bêta, alors allons-y légèrement](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) » Vous ne pouvez pas faire quelque chose comme une itération de tableau comme vous le feriez dans une boucle Python.

Je voulais le faire d'une manière ou d'une autre.

Ce que j'ai fait

Le processus suivant a finalement été fait à travers divers essais et essais pour voir si quelque chose pouvait être fait.

#Déclaration des variables
DECLARE stores ARRAY<STRING>; #Créez un tableau appelé stores et exécutez la boucle
DECLARE x INT64 DEFAULT 1; #Arguments utilisés dans les magasins (valeur par défaut = 1)

#Affectation à une variable
#Je voulais créer automatiquement la valeur ARRAY (liste de magasins), donc ARRAY_Créé avec 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)
);

#Traitement en boucle
#Répétez jusqu'à la longueur des magasins

WHILE x <= array_length(stores) DO
  SELECT store_cd, SUM(Prix d'achat)AS montant total
  FROM `myproject.mydataset.mytable`
  WHERE store_cd=stores [ORDINAL(x)] #Récupérer la Xème valeur des magasins
  GROUP BY store_cd;

  SET x = x + 1;
END WHILE;

Ouaip. D'une manière ou d'une autre, j'ai pu effectuer un traitement en boucle qui semble être utilisé dans l'ancien JAVA.

en conclusion

Pour le moment, le traitement en boucle n'était possible que pendant BigQuery. En premier lieu, j'ai écrit sans trop utiliser ARRAY, donc c'était pénible d'utiliser ce processus. (Si tu peux, ça semble facile)

À l'avenir, j'aimerais relever le défi du branchement conditionnel (instruction IF).

Recommended Posts

J'ai essayé le traitement de boucle de type Python avec BigQuery Scripting
J'ai essayé le traitement du langage naturel avec des transformateurs.
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé d'utiliser BigQuery ML
J'ai essayé 100 traitements linguistiques Knock 2020
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé la détection de visage avec MTCNN
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé l'expression des nombres naturels et le traitement arithmétique uniquement avec le traitement de liste
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'envoyer un SMS avec Twilio
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé de créer le téléchargement CSV, le traitement des données, la fonction de téléchargement avec Django
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé d'utiliser l'API BigQuery Storage
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-