Comment faire une requete sur une table BigQuery depuis une Google Cloud Function en Python ?

Avec les Google Cloud Functions, il est conseillé parfois de faire appel à des tables BigQuery temporaires pour gérer l’import de données et gérer d’eventuels imprévus (interruption, etc).

Pour cela, des requetes SQL sont utilisées pour faire des ajouts (INSERT) ou des nettoyages (DELETE) dans les tables temporaires BigQuery.

Pour envoyer des requêtes aux tables BigQuery en Python, il faut :

  • Récupérer les infos d’authentification du secret manager
  • Créer la connexion à BigQuery (avec la creation de client)
  • Puis envoyer la requete (avec client.query) incluant la requete SQL

Code d’exemple :

import functions_framework

from google.cloud import bigquery
from google.oauth2 import service_account
from google.cloud import secretmanager

#print('-- Preparation des info pour secret manager de google' )
f = open("info_google_secretmanager.json", "r")
info_gsm = json.load(f)
info_secret_projetId = info_gsm["PROJECT_ID"]
info_secret_id = info_gsm["SECRET_ID"]
info_secret_version = info_gsm["VERSION_ID"]

#print('-- Secret Manager client')
client = secretmanager.SecretManagerServiceClient()
response = client.access_secret_version(request={"name": "projects/" + info_secret_projetId + "/secrets/" + info_secret_id + "/versions/" + info_secret_version })

#print('-- Credentials pour info de connexion au compte bouygues-telecom de BigQuery')
credentials = service_account.Credentials.from_service_account_info(json.loads(response.payload.data.decode("UTF-8")))

#print('-- Client pour la connexion a BigQuery')
client = bigquery.Client(credentials= credentials,project=info_projet)

#print('-- Commencer par supprimer les donnees de la table temporaire qui est censee etre vide')
sql = """
    DELETE FROM `""" + table_bq_temp + """`
    WHERE 1=1 
"""

#print('-- Execution de la requete')
query_job = client.query(sql)
	
0.00 avg. rating (0% score) - 0 votes

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *