En esta página, se describe cómo exportar bases de datos de Spanner con la Google Cloud consola.
Para exportar una base de datos de Spanner con la API de REST o Google Cloud CLI, completa los pasos en la Antes de comenzar sección en esta página y, luego, consulta las instrucciones detalladas en Spanner a Cloud Storage Avro en la documentación de Dataflow. En el proceso de exportación, se usa Dataflow y se escriben datos en una carpeta en un bucket de Cloud Storage. La carpeta resultante contiene un conjunto de archivos Avro y archivos de manifiesto JSON.
Antes de comenzar
Para exportar una base de datos de Spanner, primero debes habilitar las API de Spanner, Cloud Storage, Compute Engine y Dataflow:
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar
roles.
También necesitas una cuota suficiente y los permisos necesarios de IAM.
Requisitos de cuota
Los requisitos de cuota para los trabajos de exportación son los siguientes:
- Spanner: no se requiere capacidad de procesamiento adicional para exportar una base de datos, aunque es posible que debas agregar más capacidad de procesamiento a fin de que el trabajo finalice en un tiempo razonable. Consulta Optimiza trabajos para obtener más detalles.
- Cloud Storage: para exportar, debes crear un bucket para los archivos exportados si aún no tienes uno. Puedes hacerlo en la Google Cloud consola, ya sea a través de la página de Cloud Storage o mientras crees la exportación en la página de Spanner. No es necesario que establezcas un tamaño para tu bucket.
- Dataflow: los trabajos de exportación están sujetos a las mismas cuotas de Compute Engine de direcciones IP, uso del disco y CPU que otros trabajos de Dataflow.
Compute Engine: antes de ejecutar el trabajo de exportación, debes configurar las cuotas iniciales para Compute Engine, que Dataflow usa. Estas cuotas representan la cantidad máxima de recursos que permites que Dataflow use para tu trabajo. Los valores iniciales recomendados son los siguientes:
- CPU: 200
- Direcciones IP en uso: 200
- Disco persistente estándar: 50 TB
Por lo general, no es necesario realizar ningún otro ajuste. Dataflow proporciona el ajuste de escala automático para que solo pagues por los recursos reales que se usaron durante la exportación. Si tu trabajo puede utilizar más recursos, la IU de Dataflow muestra un ícono de advertencia. El trabajo debería completarse incluso si hay un ícono de advertencia.
Roles obligatorios
Para obtener los permisos que necesitas para exportar una base de datos, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu cuenta de servicio de trabajador de Dataflow:
-
Visualizador de Cloud Spanner (
roles/spanner.viewer) -
Trabajador de Dataflow (
roles/dataflow.worker) -
Administrador de almacenamiento (
roles/storage.admin) -
Lector de base de datos de Spanner (
roles/spanner.databaseReader) -
Administrador de base de datos (
roles/spanner.databaseAdmin)
Para usar los recursos de procesamiento independientes de Data Boost de Spanner durante una exportación, también necesitas el permiso de IAM spanner.databases.useDataBoost. Para obtener más información, consulta
Descripción general de Data Boost.
Exporta una base de datos
Una vez que cumplas con los requisitos de cuota y de IAM descritos anteriormente, puedes exportar una base de datos de Spanner existente.
Para exportar tu base de datos de Spanner a un bucket de Cloud Storage, sigue estos pasos:
Ve a la página Instancias de Spanner.
Haz clic en el nombre de la instancia que contiene tu base de datos.
Haz clic en el elemento de menú Importar/Exportar en el panel izquierdo y, luego, en el botón Exportar.
En Elegir dónde almacenar la exportación, haz clic en Explorar.
Si aún no tienes un bucket de Cloud Storage para tu exportación, sigue estos pasos:
- Haz clic en Nuevo bucket
. - Ingresa un nombre para tu bucket. Los nombres de depósito deben ser únicos en Cloud Storage.
- Selecciona una clase y una ubicación de almacenamiento predeterminadas y, a continuación, haz clic en Crear.
- Haz clic en tu bucket para seleccionarlo.
Si ya tienes un depósito, selecciona el depósito de la lista inicial o haz clic en Buscar
para filtrar la lista y, luego, haz clic en tu depósito a fin de seleccionarlo.- Haz clic en Nuevo bucket
Haz clic en Seleccionar.
En el menú desplegable Elegir una base de datos para exportar , selecciona la base de datos que deseas exportar.
Opcional: Para exportar tu base de datos desde un punto anterior en el tiempo, marca la casilla y, luego, ingresa una marca de tiempo.
En el menú desplegable Elegir una región para el trabajo de exportación , selecciona una región.
Opcional: Para encriptar el estado de la canalización de Dataflow con una clave de encriptación administrada por el cliente, haz lo siguiente:
- Haz clic en Mostrar opciones de encriptación.
- Selecciona Usar una clave de encriptación administrada por el cliente (CMEK).
- Selecciona tu clave en la lista desplegable.
Esta opción no afecta la encriptación a nivel del bucket de Cloud Storage de destino. Para habilitar CMEK en tu bucket de Cloud Storage, consulta Usa CMEK con Cloud Storage.
Opcional: Para exportar con Data Boost de Spanner, selecciona la casilla de verificación Usar Data Boost de Spanner. Para obtener más información, consulta Descripción general de Data Boost.
Selecciona la casilla de verificación en Confirmar cargos para confirmar que existen cargos adicionales a los incurridos por tu instancia actual de Spanner.
Haz clic en Exportar.
La Google Cloud consola muestra la página Importar/Exportar de la base de datos, que ahora muestra un elemento de línea para tu trabajo de exportación en la lista de trabajos de importación o exportación, incluido el tiempo transcurrido del trabajo:

Cuando el trabajo finaliza o se termina, el estado se actualiza en la lista Importar/Exportar. Si el trabajo se realizó de forma correcta, se muestra el estado Se realizó correctamente:

Si el trabajo falló, se muestra el estado Con errores:

Para ver los detalles de la operación de Dataflow de tu trabajo, haz clic en el nombre del trabajo en la columna Nombre del trabajo de Dataflow.
Si tu trabajo falla, revisa los registros de Dataflow del trabajo para ver los detalles del error.
Para evitar que Cloud Storage cobre cargos por los archivos que creó el trabajo de exportación con errores, borra la carpeta y sus archivos. Consulta Visualiza la exportación para obtener información sobre cómo encontrar la carpeta.
Nota sobre la exportación de columnas generadas y flujos de cambios
Los valores de una columna generada almacenada no se exportan. La definición de columna se exporta al esquema Avro como un campo de registro de tipo nulo, con la definición de columna como propiedades personalizadas del campo. Hasta que se complete la operación de relleno de una columna generada recién agregada, la columna generada se ignora como si no existiera en el esquema.
Las transmisiones de cambios exportadas como archivos Avro solo contienen el esquema de las flujos de cambios y no los registros de cambios de datos.
Nota sobre la exportación de secuencias
Las secuencias (GoogleSQL,
PostgreSQL)
son objetos de esquema que se usan para generar valores enteros únicos.
Spanner exporta cada uno de los objetos de esquema al esquema Avro como un campo de registro, con su tipo de secuencia, rango omitido y contador como propiedades del campo. Ten en cuenta que, para evitar que se restablezca una secuencia y se generen
valores duplicados después de la importación, durante la exportación del esquema, la
función
GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL,
PostgreSQL)
captura el contador de secuencia. Spanner agrega un búfer de 1, 000 al contador y escribe el nuevo valor del contador en el campo de registro. Este enfoque evita los errores de valores duplicados que pueden ocurrir después de la importación.
Si hay más escrituras en la base de datos de origen durante la exportación de datos, debes
ajustar el contador de secuencia real con la instrucción ALTER SEQUENCE
(GoogleSQL,
PostgreSQL)
.
Durante la importación, la secuencia comienza desde este nuevo contador en lugar del contador que se encuentra en el esquema. Como alternativa, puedes usar la instrucción ALTER SEQUENCE
(GoogleSQL,
PostgreSQL)
para actualizar la secuencia con un contador nuevo.
Visualiza la exportación en Cloud Storage
Para ver la carpeta que contiene tu base de datos exportada en la Google Cloud consola, dirígete al navegador de Cloud Storage y elige el bucket que seleccionaste anteriormente:
Ir al explorador de almacenamiento
El bucket ahora contiene una carpeta con la base de datos exportada dentro. El nombre de la carpeta comienza con el ID de la instancia, el nombre de la base de datos y la marca de tiempo de tu trabajo de exportación. La carpeta contiene estos archivos:
- Un archivo
spanner-export.json - Un archivo
TableName-manifest.jsonpara cada tabla de la base de datos que exportaste Uno o más archivos
TableName.avro-#####-of-#####El primer número de la extensión.avro-#####-of-#####representa el índice del archivo Avro, comenzando en cero, y el segundo representa la cantidad de archivos Avro generados para cada tabla.Por ejemplo,
Songs.avro-00001-of-00002es el segundo de dos archivos que contienen los datos de la tablaSongs.Un archivo
ChangeStreamName-manifest.jsonpara cada transmisión de cambios en la base de datos que exportaste.Un
ChangeStreamName.avro-00000-of-00001archivo para cada transmisión de cambios Este archivo contiene datos vacíos con solo el esquema Avro de la transmisión de cambios.
Elige una región para tu trabajo de importación
Se recomienda elegir una región diferente en función de la ubicación del bucket de Cloud Storage. Para evitar los cargos de transferencia de datos salientes, elige una región que coincida con la ubicación del bucket de Cloud Storage.
Si la ubicación del bucket de Cloud Storage es una región, puedes aprovechar el uso gratuito de la red si eliges la misma región para tu trabajo de importación, siempre que esa región esté disponible.
Si la ubicación del bucket de Cloud Storage es una región doble, puedes aprovechar el uso gratuito de la red si eliges una de las dos regiones que conforman la región doble para tu trabajo de importación, siempre que una de las regiones esté disponible.
- Si no hay una región ubicada en el mismo lugar disponible para tu trabajo de importación o si la ubicación del bucket de Cloud Storage es una región múltiple, se aplican cargos de transferencia de datos salientes. Consulta los precios de transferencia de datos de Cloud Storage para elegir una región que incurra en los cargos de transferencia de datos más bajos.
Exporta un subconjunto de tablas
Si deseas exportar solo los datos de ciertas tablas y no toda la base de datos, puedes especificar esas tablas durante la exportación. En este caso, Spanner exporta todo el esquema de la base de datos, incluidos los datos de las tablas que especificas, y deja todas las demás tablas presentes, pero vacías en el archivo exportado.
Puedes especificar un subconjunto de tablas para exportar con la página de Dataflow en la Google Cloud consola o la gcloud CLI. (La página de Spanner no proporciona esta acción).
Si exportas los datos de una tabla que es hija de otra tabla, también debes exportar los datos de su tabla superior. Si no se exportan las tablas superiores, el trabajo de exportación falla.
Para exportar un subconjunto de tablas, inicia la exportación con la plantilla de Spanner a Cloud Storage Avro de Dataflow y especifica las tablas con la página de Dataflow en la Google Cloud consola o con gcloud CLI, como se describe a continuación:
Console
Si usas la página de Dataflow en la Google Cloud consola, el Nombre(s) de la tabla de Cloud Spanner parámetro se encuentra en la Parámetros opcionales sección de la Crear trabajo desde plantilla página. Se pueden especificar varias tablas en un formato separado por comas.
gcloud
Ejecuta el gcloud dataflow jobs run
comando y especifica el tableNames argumento. Por ejemplo:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=table1,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Para especificar varias tablas en gcloud, se requiere el escape de argumentos de tipo diccionario.
En el siguiente ejemplo, se usa "|" como carácter de escape:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='^|^instanceId=test-instance|databaseId=example-db|tableNames=table1,table2|outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
El parámetro shouldExportRelatedTables es una opción conveniente para
exportar automáticamente todas las tablas superiores
de las tablas elegidas. Por ejemplo, en esta jerarquía de esquema
con las tablas Singers, Albums y Songs, solo debes especificar
Songs. La opción shouldExportRelatedTables también exportará Singers y Albums, ya que Songs es un descendiente de ambas.
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=Songs,shouldExportRelatedTables=true,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Visualiza o soluciona problemas de trabajos en la IU de Dataflow
Después de iniciar un trabajo de exportación, puedes ver los detalles del trabajo, incluidos los registros, en la sección de Dataflow de la Google Cloud consola.
Cómo ver los detalles del trabajo de Dataflow
Para ver los detalles de cualquier trabajo de importación o exportación que ejecutes durante la última semana, incluidos los trabajos que se estén ejecutando, haz lo siguiente:
- Navega hasta la página Descripción general de la base de datos de la base de datos.
- Haz clic en el elemento de menú del panel izquierdo Importar/Exportar. En la página Importar/Exportar de la base de datos, se muestra una lista de trabajos recientes.
En la página Importar/Exportar de la base de datos, haz clic en el nombre del trabajo en la columna Nombre del trabajo de Dataflow:

La Google Cloud consola muestra los detalles del trabajo de Dataflow.
Para ver un trabajo que ejecutaste hace más de una semana, sigue estos pasos:
Ve a la página Trabajos de Dataflow en la Google Cloud consola.
Busca tu trabajo en la lista y haz clic sobre su nombre.
La Google Cloud consola muestra los detalles del trabajo de Dataflow.
Visualiza registros de Dataflow para tu trabajo
Para ver los registros de un trabajo de Dataflow, navega hasta la página de detalles del trabajo y, luego, haz clic en Registros a la derecha del nombre del trabajo.
Si un trabajo falla, busca errores en los registros. Si hay errores, el recuento de errores se muestra junto a Registros (Logs):

Para ver los errores del trabajo, sigue estos pasos:
Haz clic en el recuento de errores junto a Registros.
La Google Cloud consola muestra los registros del trabajo. Es posible que debas desplazarte para ver los errores.
Identifica las entradas con el ícono de error
.Haz clic en una entrada de registro individual para expandir su contenido.
Para obtener más información sobre cómo solucionar problemas de trabajos de Dataflow, consulta Soluciona problemas de tu canalización.
Soluciona problemas de trabajos de exportación que fallaron
Si ves los siguientes errores en tus registros de trabajos, haz lo siguiente:
com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found --or-- com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.
Verifica la latencia de lectura del 99% en la pestaña Supervisión de tu base de datos de Spanner en la Google Cloud consola. Si se muestran valores altos (de varios segundos), eso indica que la instancia está sobrecargada, lo que hace que las lecturas agoten el tiempo de espera y fallen.
Una de las causas de la latencia alta es que el trabajo de Dataflow se ejecuta con demasiados trabajadores, lo que pone demasiada carga en la instancia de Spanner.
Para especificar un límite en la cantidad de trabajadores de Dataflow, en lugar de usar la pestaña Importar/Exportar en la página de detalles de la instancia de Spanner en la Google Cloud consola, debes iniciar la exportación con la plantilla de Spanner a Cloud Storage Avro de Dataflow y especificar la cantidad máxima de trabajadores como se describe a continuación:Console
Si usas la consola de Dataflow, el parámetro Cantidad máxima de trabajadores se encuentra en la sección Parámetros opcionales de la página Crear trabajo desde plantilla.
gcloud
Ejecuta el gcloud dataflow jobs run
comando y especifica el max-workers argumento. Por ejemplo:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Soluciona problemas de errores de red
El siguiente error puede ocurrir cuando exportas tus bases de datos de Spanner:
Workflow failed. Causes: Error: Message: Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface must specify a subnet if the network resource is in custom subnet mode. HTTP Code: 400
Este error se produce porque Spanner supone que quieres usar una red de VPC de modo automático llamada default en el mismo proyecto que el trabajo de Dataflow. Si no tienes una red de VPC predeterminada en el
proyecto o si esta es de modo personalizado, debes
crear un trabajo de Dataflow y
especificar una red o subred alternativa.
Optimiza trabajos de exportación de ejecución lenta
Si seguiste las sugerencias de la configuración inicial, por general, no se debe realizar ningún otro ajuste. Si tu trabajo se ejecuta a poca velocidad, existen otras optimizaciones que puedes probar:
Optimiza el trabajo y la ubicación de los datos: Ejecuta tu trabajo de Dataflow en la misma región donde se encuentran tu instancia de Spanner y el bucket de Cloud Storage.
Garantiza recursos suficientes de Dataflow: Si las cuotas relevantes de Compute Engine limitan los recursos de tu trabajo de Dataflow, la página de Dataflow del trabajo en la Google Cloud consola muestra un ícono de advertencia
y mensajes de registro:
En esta situación, aumentar las cuotas para CPU, direcciones IP en uso y el disco persistente estándar podría acortar el tiempo de ejecución del trabajo, pero se podrían generar más cargos de Compute Engine.
Comprueba el uso de CPU de Spanner: Si ves que el uso de CPU de la instancia supera el 65%, puedes aumentar la capacidad de procesamiento en esa instancia. La capacidad agrega más recursos de Spanner y el trabajo debería acelerarse, pero se te cobrarán más cargos de Spanner.
Factores que afectan el rendimiento del trabajo de exportación
Varios factores influyen en el tiempo que lleva completar un trabajo de exportación.
Tamaño de la base de datos de Spanner: Procesar más datos requiere más tiempo y recursos.
Esquema de la base de datos de Spanner, incluidos los siguientes:
- Cantidad de tablas
- Tamaño de las filas
- Cantidad de índices secundarios
- Cantidad de claves externas
- Cantidad de flujos de cambios
Ubicación de los datos: Los datos se transfieren entre Spanner y Cloud Storage mediante Dataflow. Lo ideal es que los tres componentes se ubiquen en la misma región. Si los componentes no están en la misma región, mover los datos entre las regiones hace que la ejecución del trabajo sea más lenta.
Cantidad de trabajadores de Dataflow: Los trabajadores óptimos de Dataflow son necesarios para un buen rendimiento. Mediante el ajuste de escala automático, Dataflow elige la cantidad de trabajadores en función de la cantidad de trabajo que se debe realizar. Sin embargo, la cantidad de trabajadores estará limitada por las cuotas de las CPU, las direcciones IP en uso y el disco persistente estándar. La IU de Dataflow muestra un ícono de advertencia si se alcanzan los límites de cuota. En esta situación, el progreso es más lento, pero el trabajo se completará de todos modos.
Carga existente en Spanner: Por lo general, un trabajo de exportación agrega una carga ligera en una instancia de Spanner. Si la instancia ya tiene una carga sustancial existente, el trabajo se ejecutará más lento.
Cantidad de capacidad de procesamiento de Spanner: Si el uso de CPU de la instancia supera el 65%, el trabajo se ejecutará más lento.