Estoy diseñando un trabajo de BigQuery en Python que se actualiza y se inserta en varias tablas. Pensé en dos formas de lograrlo:
ejecute un trabajo de consulta y guarde el resultado en una tabla temporal con un indicador de actualización/inserción y procéselos después. Pero no está claro cómo actualizar con bibliotecas de Python.
cargue todos los datos en una nueva tabla particionada y omita las actualizaciones/inserciones. Ocupa más espacio del que me gustaría, pero la partición caduca en unos días de todos modos.
¿Me estoy perdiendo de algo? ¿Hay otra manera de lograr esto?
Simplemente puede usar declaraciones delenguaje de manipulación de datos (DML) en lugar de consultas SQL cuando usa la API de Google BigQuery .
Por ejemplo, para actualizar filas específicas en la siguiente tabla:
Inventory +-------------------+----------+--------------------+ | product | quantity | supply_constrained | +-------------------+----------+--------------------+ | dishwasher | 30 | NULL | | dryer | 30 | NULL | | front load washer | 30 | NULL | | microwave | 30 | NULL | +-------------------+----------+--------------------+podrías usar el siguiente código:
from google.cloud import bigquery client = bigquery.Client() dml_statement = ( "UPDATE dataset.Inventory " "SET quantity = quantity - 10 " "WHERE product like '%washer%'") query_job = client.query(dml_statement) # API request query_job.result() # Waits for statement to finishobteniendo los siguientes resultados:
Inventory +-------------------+----------+--------------------+ | product | quantity | supply_constrained | +-------------------+----------+--------------------+ | dishwasher | 20 | NULL | | dryer | 30 | NULL | | front load washer | 20 | NULL | | microwave | 30 | NULL | +-------------------+----------+--------------------+Me tomó un tiempo encontrarlo entre los muchos documentos de Google en la web, así que vale la pena tenerlo aquí, como referencia. La información está aquí .
Y este es un ejemplo mínimo que debería ser fácil de adaptar a cualquier caso de uso:
import google.cloud.bigquery.dbapi as bq try: con = bq.connect() cursor = con.cursor() query = "<your sql command goes here>" cursor.execute(query) con.commit() con.close() except Exception as e: str(e)El método para actualizar campos en python se implementa en la biblioteca idiomática, se llama update_table() . Llama al método de parche de la API de BigQuery.