Tema 6 de 10
La segunda mitad del apartado 3.2 del temario trata del día a día de los datos: consultar cada base de datos, estimar el coste, hacer copias de seguridad y restaurarlas, revisar el estado de los trabajos de BigQuery y Dataflow y vigilar toda la flota con Database Center. La elección del servicio está en el dominio D2.
Contenido
Casi todas las bases de datos tienen un editor integrado en la consola, así que no hace falta instalar un cliente de terceros para lanzar una consulta.
| Servicio | En la consola | Desde la línea de comandos |
|---|---|---|
| Cloud SQL | Cloud SQL Studio: explorador, editor de consultas y tabla de resultados; admite DDL, DML y DQL | gcloud sql connect abre el cliente de la base de datos (mysql, psql…) |
| AlloyDB | AlloyDB Studio: interfaz SQL interactiva en la consola | Cliente de PostgreSQL |
| Spanner | Spanner Studio: explorador, editor de consultas y resultados | gcloud spanner databases execute-sql |
| Bigtable | Bigtable Studio: generador de consultas sin código y editor SQL | CLI cbt (componente de gcloud) |
| Firestore | Firestore Studio: ver, consultar (pestaña Query Builder), añadir, editar y borrar datos | Bibliotecas cliente |
| BigQuery | Editor de consultas de BigQuery Studio | bq query --use_legacy_sql=false |
gcloud sql connect my-instance --user=root gcloud spanner databases execute-sql example-database \ --instance=example-instance --sql='SELECT * FROM MyTable WHERE MyKey = 1' bq query --use_legacy_sql=false 'SELECT COUNT(*) FROM `my-project.sales.orders`' gcloud components install cbt cbt listinstances
La CLI cbt no implementa reintentos inteligentes ni gestión de errores; para producción Google recomienda las bibliotecas cliente de Bigtable o la consola. Sus opciones (proyecto, instancia…) se pueden guardar en un archivo .cbtrc.
Un dry run valida la consulta sin ejecutarla y devuelve una estimación de los bytes que procesaría (el coste en modo bajo demanda). No usa slots y no se cobra. La estimación se puede llevar a la calculadora de precios.
bq query --use_legacy_sql=false --dry_run \ 'SELECT name FROM `my-project.sales.customers` WHERE country = "ES"'
Cuándo no es fiable
En consultas federadas sobre fuentes externas puede indicar 0 bytes aunque la consulta real sí se cobre. En tablas con seguridad a nivel de fila siempre devuelve 0 bytes.
Las copias de Cloud SQL son incrementales y se cifran con claves de Google o con CMEK. Al crear una instancia nueva hay que elegir entre dos opciones de copia:
Copias mejoradas
Gestionadas por Backup and DR Service en una bóveda de copias centralizada, con un plan de copias. Retención de hasta 10 años.
Copias estándar
Gestionadas por Cloud SQL. Las copias bajo demanda se guardan hasta que se borran a mano.
| Tipo | Cómo funciona |
|---|---|
| Bajo demanda | Se crea en cualquier momento, por ejemplo antes de una operación arriesgada |
| Automática | Programada. Google recomienda no borrarlas a mano porque las necesita la recuperación a un momento dado |
| Final | Se toma al borrar la instancia (se puede activar para que sea automática). Por defecto se conserva 30 días; de 1 a 365 días en copias estándar o hasta 10 años en mejoradas. Solo en instancias principales, no en réplicas |
gcloud sql backups create --async --instance=my-instance gcloud sql backups list --instance=my-instance gcloud sql backups restore BACKUP_ID --restore-instance=target-instance
PITR restaura una instancia principal al estado de un instante concreto, esté activa o borrada. Siempre crea una instancia nueva: no se puede aplicar sobre una instancia existente. En MySQL necesita el registro binario y las copias activados, con registros continuos desde la última copia anterior al incidente. El método recomendado es indicar una marca de tiempo; en la consola se hace con Create clone y Clone from an earlier point in time.
gcloud sql instances clone SOURCE_INSTANCE NEW_INSTANCE \ --point-in-time='2026-10-24T08:15:00.000Z'
Los cambios que ocurren en esa marca de tiempo o después no aparecen en la instancia nueva.
versionTime es el instante cuyos datos contiene la copia; createTime, cuándo se creó. Las programadas empiezan en las 4 horas siguientes a versionTime.gcloud spanner backups create my-backup --instance=my-instance \ --database=my-db --retention-period=2w
roles/datastore.backupsAdmin, roles/datastore.backupSchedulesAdmin, roles/datastore.restoreAdmin…gcloud firestore backups schedules create --database='(default)' \ --recurrence=daily --retention=4w gcloud firestore databases restore \ --source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \ --destination-database=restored-db
15d).gcloud bigtable backups create my-backup --instance=my-instance \ --cluster=my-cluster --table=my-table --retention-period=7d
Todos los datos de Google Cloud se cifran en reposo con AES-256 y claves de Google, sin configurar nada. Con CMEK las claves las creas tú en Cloud KMS: controlas su rotación, su acceso y su estado, ves sus registros de uso y cumples normativas que exigen claves propias. El cifrado y descifrado lo hace el agente de servicio del recurso de forma transparente.
roles/cloudkms.cryptoKeyEncrypterDecrypter sobre la clave.Cada carga, exportación, consulta o copia crea un trabajo asíncrono. Sus estados son PENDING, RUNNING y DONE; si un trabajo terminado falló, incluye errorResult. El coste se factura al proyecto que ejecuta el trabajo.
bq ls --jobs --filter="states:RUNNING,PENDING" bq show --jobs JOB_ID bq cancel JOB_ID bq wait JOB_ID
| Rol | Sobre los trabajos |
|---|---|
roles/bigquery.jobUser | Ejecutar, listar, ver y cancelar los suyos |
roles/bigquery.user | Lo mismo, pero es más permisivo |
roles/bigquery.resourceAdmin | Listar todos y ver sus metadatos |
roles/bigquery.admin | Listar todos, ver sus metadatos y cancelar cualquiera |
La interfaz de supervisión de la consola muestra la lista de trabajos (en ejecución y los de los últimos 30 días), el grafo del trabajo con cada paso, los detalles de ejecución, métricas, coste estimado, recomendaciones, gráficos de autoescalado, alertas preconfiguradas para streaming, los registros del pipeline y muestreo de datos.
Cancel
Batch y streaming. Para de inmediato, incluidos los datos en búfer: se pueden perder los datos que se están procesando. Un trabajo cancelado no se reinicia.
Drain
Solo streaming. Deja de leer datos nuevos y termina de procesar los que tiene en búfer.
Force cancel
Para trabajos atascados en la cancelación normal; antes hay que intentar un cancel.
gcloud dataflow jobs list --region=europe-west1 gcloud dataflow jobs describe JOB_ID --region=europe-west1 gcloud dataflow jobs drain JOB_ID --region=europe-west1 gcloud dataflow jobs cancel JOB_ID --region=europe-west1
Los trabajos de Dataflow no se pueden borrar, solo archivar; los terminados se eliminan a los 30 días. Antes de parar un pipeline de streaming conviene hacer un snapshot para conservar su estado.
Panel con asistencia de IA que ofrece una vista centralizada de toda la flota de bases de datos, de todos los proyectos. Usa datos de los proyectos y de Security Command Center para mostrar problemas de salud y recomendaciones, y tiene un chat de Gemini para preguntar por ellos.
| Situación | Respuesta | Por qué |
|---|---|---|
| Recuperar una base de Cloud SQL al estado de hace 2 horas, antes de un DELETE erróneo | PITR con gcloud sql instances clone --point-in-time | Siempre crea una instancia nueva. |
| Saber cuántos bytes procesará una consulta de BigQuery sin pagar | Dry run (--dry_run) | No usa slots ni se cobra. |
| Conservar los datos de una instancia de Cloud SQL que se va a borrar | Copia final al borrar la instancia | Por defecto se conserva 30 días. |
| Parar un pipeline de streaming sin perder los datos que ya está procesando | Drain del trabajo de Dataflow | Deja de leer y termina lo que tiene en búfer. |
| Ver qué bases de datos de toda la organización no tienen copias de seguridad | Database Center | Vista centralizada de la salud de la flota. |
| Copias diarias automáticas de una base de Firestore con retención de 4 semanas | gcloud firestore backups schedules create | Retención máxima de 14 semanas. |
| Restaurar una copia de Spanner en otra región | Copiar la copia de seguridad a una instancia de la otra región | La copia vive en la misma instancia que la base. |
| Ejecutar una consulta SQL en Spanner desde la consola sin instalar nada | Spanner Studio | Editor de consultas integrado en la consola. |
❓ ¿Se puede hacer PITR de Cloud SQL sobre la misma instancia?
No. La recuperación a un momento dado siempre crea una instancia nueva (un clon).
❓ ¿Restaurar una copia sobre una instancia existente conserva sus datos actuales?
No. Sobrescribe todos los datos de la instancia de destino.
❓ ¿Un dry run de BigQuery cuesta dinero?
No. Valida la consulta y estima los bytes sin usar slots ni cobrar.
❓ ¿Drain sirve para un trabajo batch de Dataflow?
No. Drain es solo para streaming; en batch se usa cancel.
❓ ¿Database Center muestra los datos en tiempo real?
No. Suele actualizarse en minutos, pero puede tardar hasta 24 horas.
❓ ¿Se puede restaurar una copia de Firestore sobre la base original?
No. Siempre se restaura en una base de datos nueva.
¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
A las 10:40 alguien ejecutó un DELETE sin WHERE en una base de Cloud SQL para MySQL que tiene copias automáticas y registro binario activados. Hay que recuperar los datos tal como estaban a las 10:39 sin perder los cambios de primera hora de la mañana. ¿Qué haces?
Preguntas originales, cada una con su explicación.
Empezar un simulacro