Introducció

En aquest tema, aprendrem com automatitzar fluxos de treball a BigQuery utilitzant Google Cloud Functions. Les Cloud Functions són funcions de codi que s'executen en resposta a esdeveniments, permetent-nos crear solucions escalables i sense servidor per a diverses tasques, incloent-hi l'automatització de processos a BigQuery.

Objectius

  • Comprendre què són les Cloud Functions i com funcionen.
  • Aprendre a crear i desplegar una Cloud Function.
  • Integrar Cloud Functions amb BigQuery per automatitzar fluxos de treball.
  • Veure exemples pràctics d'automatització.

Què són les Cloud Functions?

Google Cloud Functions és un servei de computació sense servidor que permet executar codi en resposta a esdeveniments sense gestionar servidors. Les funcions poden ser desencadenades per diversos esdeveniments, com ara canvis en un bucket de Cloud Storage, missatges en una cua de Pub/Sub, o fins i tot peticions HTTP.

Característiques clau

  • Sense servidor: No cal gestionar ni escalar servidors.
  • Desencadenadors basats en esdeveniments: Les funcions s'executen en resposta a esdeveniments específics.
  • Escalabilitat automàtica: Les funcions s'escalen automàticament segons la demanda.
  • Integració amb altres serveis de Google Cloud: Facilita la creació de solucions integrades.

Crear i desplegar una Cloud Function

Pas 1: Configurar l'entorn

Abans de crear una Cloud Function, assegura't de tenir el SDK de Google Cloud instal·lat i configurat al teu entorn. Pots seguir les instruccions oficials de Google per a la instal·lació i configuració.

Pas 2: Escriure la funció

A continuació, escriurem una funció simple que s'executa en resposta a una petició HTTP i executa una consulta a BigQuery.

import google.cloud.bigquery as bigquery
from flask import escape

def bigquery_query(request):
    client = bigquery.Client()
    query = """
        SELECT name, COUNT(*) as name_count
        FROM `project_id.dataset.table`
        GROUP BY name
        ORDER BY name_count DESC
        LIMIT 10
    """
    query_job = client.query(query)
    results = query_job.result()
    
    output = []
    for row in results:
        output.append(f"{row.name}: {row.name_count}")
    
    return escape("\n".join(output))

Pas 3: Desplegar la funció

Per desplegar la funció, utilitza la següent comanda del SDK de Google Cloud:

gcloud functions deploy bigquery_query \
--runtime python39 \
--trigger-http \
--allow-unauthenticated

Pas 4: Provar la funció

Un cop desplegada, pots provar la funció fent una petició HTTP a l'URL proporcionat per Google Cloud Functions.

Integració amb BigQuery

Exemple pràctic: Automatització de l'actualització de taules

Suposem que volem automatitzar l'actualització d'una taula a BigQuery cada vegada que es carrega un nou fitxer CSV a un bucket de Cloud Storage. Podem crear una Cloud Function que s'executi en resposta a aquest esdeveniment.

Pas 1: Escriure la funció

import google.cloud.bigquery as bigquery
import google.cloud.storage as storage

def update_table(event, context):
    client = bigquery.Client()
    bucket_name = event['bucket']
    file_name = event['name']
    
    dataset_id = 'your_dataset_id'
    table_id = 'your_table_id'
    
    uri = f"gs://{bucket_name}/{file_name}"
    
    job_config = bigquery.LoadJobConfig(
        source_format=bigquery.SourceFormat.CSV,
        skip_leading_rows=1,
        autodetect=True,
    )
    
    load_job = client.load_table_from_uri(
        uri, f"{dataset_id}.{table_id}", job_config=job_config
    )
    
    load_job.result()
    print(f"Loaded {file_name} into {dataset_id}.{table_id}")

Pas 2: Desplegar la funció

gcloud functions deploy update_table \
--runtime python39 \
--trigger-resource your-bucket-name \
--trigger-event google.storage.object.finalize

Exercici pràctic

Descripció

Crea una Cloud Function que s'executi en resposta a un missatge Pub/Sub i executi una consulta a BigQuery per obtenir les 5 primeres files d'una taula específica. La funció ha de retornar els resultats com una resposta HTTP.

Solució

import google.cloud.bigquery as bigquery
from google.cloud import pubsub_v1
from flask import escape

def query_bigquery(event, context):
    client = bigquery.Client()
    query = """
        SELECT *
        FROM `project_id.dataset.table`
        LIMIT 5
    """
    query_job = client.query(query)
    results = query_job.result()
    
    output = []
    for row in results:
        output.append(dict(row))
    
    return escape(str(output))

Desplega la funció amb:

gcloud functions deploy query_bigquery \
--runtime python39 \
--trigger-topic your-topic-name

Conclusió

En aquest tema, hem après com utilitzar Google Cloud Functions per automatitzar fluxos de treball a BigQuery. Hem vist com crear i desplegar funcions que s'executen en resposta a esdeveniments i com integrar-les amb BigQuery per executar consultes automàticament. Aquestes habilitats són essencials per crear solucions escalables i eficients en entorns de dades moderns.

Curs de BigQuery

Mòdul 1: Introducció a BigQuery

Mòdul 2: SQL bàsic a BigQuery

Mòdul 3: SQL intermedi a BigQuery

Mòdul 4: SQL avançat a BigQuery

Mòdul 5: Gestió de dades a BigQuery

Mòdul 6: Optimització del rendiment de BigQuery

Mòdul 7: Seguretat i compliment de BigQuery

Mòdul 8: Integració i automatització de BigQuery

Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)

Mòdul 10: Casos d'ús de BigQuery en el món real

© Copyright 2024. Tots els drets reservats