feat: add BigQuery Python functions and BQClient type

Funciones CRUD completas para BigQuery: auth, datasets, tables, queries,
jobs, routines, load/export. Tipo BQClient como wrapper del SDK oficial.
This commit is contained in:
2026-04-07 18:45:02 +02:00
parent c311623a76
commit 690e68a542
33 changed files with 2720 additions and 0 deletions
@@ -0,0 +1,65 @@
---
name: bq_update_table
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def bq_update_table(client: BQClient, dataset_id: str, table_id: str, schema: list[dict] | None = None, description: str | None = None, labels: dict | None = None) -> dict"
description: "Actualiza metadatos de una tabla BigQuery: schema (solo adicion de columnas), descripcion y etiquetas. Usa client._client.update_table() del SDK oficial."
tags: [bigquery, gcp, table, update, google-cloud, python]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [google-cloud-bigquery]
params:
- name: client
desc: "cliente autenticado BQClient obtenido con bq_auth"
- name: dataset_id
desc: "ID del dataset que contiene la tabla"
- name: table_id
desc: "nombre (ID) de la tabla a actualizar"
- name: schema
desc: "schema completo nuevo (columnas existentes + nuevas al final). BigQuery SOLO permite agregar columnas, no eliminar ni renombrar. None = no modificar"
- name: description
desc: "nueva descripcion de la tabla. None = no modificar"
- name: labels
desc: "nuevas etiquetas clave-valor (reemplaza las existentes). None = no modificar"
output: "dict con la metadata actualizada de la tabla (misma estructura que bq_get_table)"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/bigquery/tables.py"
---
## Ejemplo
```python
from bigquery import bq_auth, bq_update_table
client = bq_auth("mi-proyecto")
# Actualizar descripcion y etiquetas
tabla = bq_update_table(
client, "ventas_ds", "transacciones",
description="Transacciones de ventas — actualizado",
labels={"env": "prod", "team": "data", "version": "2"},
)
# Agregar columna nueva al schema existente
tabla = bq_update_table(
client, "ventas_ds", "transacciones",
schema=[
{"name": "id", "type": "INTEGER", "mode": "REQUIRED"},
{"name": "fecha", "type": "DATE", "mode": "NULLABLE"},
{"name": "monto", "type": "FLOAT", "mode": "NULLABLE"},
{"name": "nueva_col", "type": "STRING", "mode": "NULLABLE"}, # nueva
],
)
```
## Notas
BigQuery tiene restricciones estrictas sobre modificacion de schema: se pueden agregar columnas NULLABLE o REPEATED al final, pero NO se pueden eliminar columnas, renombrar columnas ni cambiar el tipo de una columna existente. Si se necesita ese tipo de cambio, la alternativa es crear una tabla nueva con `CREATE TABLE AS SELECT`. Los campos `None` no generan actualizacion — solo se envian al API los campos que cambian.