BigQuery es una herramienta poderosa, escalable y de bajo mantenimiento, pero a veces su automatización puede jugar en nuestra contra.
Uno de los riesgos menos visibles —pero más peligrosos— es el vencimiento automático de tablas, una configuración que puede llevarte a perder datos sin darte cuenta.
¿Qué es el vencimiento de tablas?
BigQuery permite establecer una duración ilimitada para las tablas, sin embargo podemos encontrarnos con el vencimiento predeterminado. Este puede estar configurado para que una tabla se elimine automáticamente después de cierto tiempo -normalmente 60 días-.
Aunque esta funcionalidad es útil para ahorrar espacio en entornos temporales, si se aplica por error a tablas críticas, los datos desaparecerán sin previo aviso ni posibilidad de recuperación.

Recientemente, configuré un dataset en BigQuery para recibir la exportación diaria de datos desde Google Analytics 4 (GA4).
Como parte de una limpieza inicial, establecí un vencimiento automático de 60 días a nivel de dataset. Pensé que sería suficiente… hasta que empecé a notar algo extraño.
A pesar de haber eliminado el vencimiento a posteriori, las tablas diarias seguían desapareciendo pasados 60 días. ¿Por qué?
BigQuery hereda el vencimiento desde el dataset en el momento exacto en que se crea la tabla. Es decir, aunque cambies el vencimiento por defecto hoy, las tablas que ya han sido creadas siguen con la configuración antigua.
💡 Así que mucho cuidado con modificar las tablas o el dataset porque no es retoractivo.
En mi caso, todas las tablas de exportación diaria de GA4 generadas antes del cambio conservaban el vencimiento original de 60 días.
Resultado: una pérdida continua de datos pasados esos 60 días.
Existen varias maneras de setear el vencimiento de las tablas en nuestro proyecto de BigQuery. Pero primero corrijamos el error y actualicemos el vencimiento predeterminado en BigQuery
Cómo comprobar si tus tablas tienen vencimiento
Lo primero de todo es hacer un check para ver los vencimientos de nuestras tablas
Puedes ejecutar esta consulta para ver si alguna tabla tiene fecha de vencimiento:
SELECT
table_catalog as proyecto,
table_schema as dataset,
table_name as tabla,
TIMESTAMP(REGEXP_EXTRACT(option_value, r'TIMESTAMP "([^"]+)"')) AS fecha_expiracion,
FROM `proyecto.dataset.INFORMATION_SCHEMA.TABLE_OPTIONS`
where option_name='expiration_timestamp'
order by fecha_expiracion desc
Resultado:

Actualizar el vencimiento predeterminado de dataset en BigQuery
Puedes cambiar la fecha de vencimiento predeterminada de las tablas en un dataset usando:
- La consola de Google Cloud
- El comando bq update en la línea de comandos
- La API (datasets.patch)
- SQL. Escogeremos esta para hacerlo más didáctico.
Actualizando el vencimiento con SQL
Con el siguiente código, ajustaremos el vencimiento a nivel dataset:
ALTER SCHEMA proyecto.datashet
SET OPTIONS(
default_table_expiration_days = 3.75);
Se ajustará el vencimiento:


💡 No se modificará el vencimiento de las tablas que sean dependientes de este dataset, solamente se modidficará el dataset principal
Como lo que queremos es que no expire nunca, deberemos poner null en la consulta con lo que obtendremos el siguiente resultado:
El vencimiento se puede establecer a nivel de dataset (para todas las tablas nuevas) o individualmente al crear una tabla (lo que anula el predeterminado). Si no se establece vencimiento, la tabla no expirará y deberá borrarse manualmente.
Aspectos a tener en cuenta
- Cambiar el vencimiento predeterminado en un dataset no afecta las tablas ya existentes; estas conservan su configuración original.
- La nueva configuración solo se aplica a tablas creadas después del cambio, salvo que se especifique otro vencimiento al crearlas.
- El formato del vencimiento varía según la herramienta: en consola se expresa en días, en línea de comandos en segundos y en la API en milisegundos.
Solución: modificar el vencimiento de las tablas
Para actualizar el vencimiento, ligero cambio: en lugar de SCHEMA, pondremos TABLE:
ALTER SCHEMA proyecto.dataset.tabla
SET OPTIONS(
expiration_timestamp = null);
Y indicaremos null en expiration_timestamp:

Y tendremos el vencimiento actualizado:

Ejemplo inverso: declarando el vencimiento de una tabla
En nuestro caso no aplica, pero os dejo un ejemplo del timestamp para el 3 de febrero de 2027. Solamente tendremos que cambiar null por la fecha en la que queremos que se elimine:


El vencimiento automático de tablas en BigQuery es una funcionalidad útil pero peligrosa si se aplica sin entender su alcance.
No basta con cambiar el vencimiento por defecto a nivel de dataset: las tablas ya creadas mantienen su configuración original, y podrías seguir perdiendo datos sin darte cuenta.
Este tipo de detalles —silenciosos, pero letales— son los que iremos viendo en esta serie de artículos.
Suscríbete a la newsletter
Y recibe un resumen mensual de todos los artículos publicados
🔗 Controla el presupuesto de Google Cloud con este artículo: Controla el gasto en Google Cloud: cómo crear alertas de presupuesto