Exporta bases de datos de Spanner a Avro

En esta página, se describe cómo exportar bases de datos de Spanner con la consola deGoogle Cloud .

Para exportar una base de datos de Spanner con la API de REST o Google Cloud CLI, completa los pasos de la sección Antes de comenzar 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 de 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 APIs de Spanner, Cloud Storage, Compute Engine y Dataflow:

Roles necesarios para habilitar las APIs

Para habilitar APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

Habilitar las API

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 la sección Optimiza los 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 hacer 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:

Para usar los recursos de procesamiento independientes de Spanner Data Boost durante una exportación, también necesitas el permiso de IAM spanner.databases.useDataBoost. Para obtener más información, consulta la Descripción general de Data Boost.

Cómo exportar 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:

  1. Ve a la página Instancias de Spanner.

    Ir a Instancias

  2. Haz clic en el nombre de la instancia que contiene tu base de datos.

  3. Haz clic en el elemento de menú Importar/Exportar en el panel izquierdo y, luego, en el botón Exportar.

  4. En Elegir dónde almacenar la exportación, haz clic en Explorar.

  5. Si aún no tienes un bucket de Cloud Storage para tu exportación, sigue estos pasos:

    1. Haz clic en Nuevo bucketCaptura de pantalla del elemento de la IU del bucket nuevo.
    2. Ingresa un nombre para tu bucket. Los nombres de bucket deben ser únicos en Cloud Storage.
    3. Selecciona una clase y una ubicación de almacenamiento predeterminadas y, a continuación, haz clic en Crear.
    4. 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 Captura de pantalla del elemento de la IU de búsqueda para filtrar la lista y, luego, haz clic en tu depósito a fin de seleccionarlo.

  6. Haz clic en Seleccionar.

  7. En el menú desplegable Elegir una base de datos para exportar, selecciona la base de datos que deseas exportar.

  8. Opcional: Para exportar tu base de datos desde un punto anterior en el tiempo, marca la casilla y, luego, ingresa una marca de tiempo.

  9. En el menú desplegable Elegir una región para el trabajo de exportación, selecciona una región.

  10. Opcional: Para encriptar el estado de la canalización de Dataflow con una clave de encriptación administrada por el cliente, haz lo siguiente:

    1. Haz clic en Mostrar opciones de encriptación.
    2. Selecciona Usar una clave de encriptación administrada por el cliente (CMEK).
    3. 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 la CMEK en tu bucket de Cloud Storage, consulta Usa la CMEK con Cloud Storage.

  11. 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 la Descripción general de Data Boost.

  12. Selecciona la casilla de verificación en Confirmar cargos para confirmar que existen cargos adicionales a los incurridos por tu instancia actual de Spanner.

  13. Haz clic en Exportar.

    La consola Google Cloud muestra la página Importar/Exportar base de datos, que ahora muestra una línea de pedido para tu trabajo de exportación en la lista de trabajos de Importar/Exportar, incluido el tiempo transcurrido del trabajo:

    Captura de pantalla del trabajo en curso

Cuando el trabajo finaliza o se detiene, el estado se actualiza en la lista de importación/exportación. Si el trabajo se realizó correctamente, se mostrará el estado Succeeded:

Mensaje de confirmación sobre la exportación de trabajo

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

Mensaje de error sobre la exportación del trabajo

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

No se exportan los valores de una columna generada almacenada. La definición de la columna se exporta al esquema de Avro como un campo de registro de tipo nulo, con la definición de la columna como propiedades personalizadas del campo. Hasta que se complete la operación de relleno de una columna generada recién agregada, se ignorará la columna generada como si no existiera en el esquema.

Los flujos de cambios exportados como archivos Avro solo contienen el esquema de los flujos de cambios y no incluyen 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 objeto del esquema al esquema de 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 podrían 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 nuevo contador.

Visualiza la exportación en Cloud Storage

Para ver la carpeta que contiene tu base de datos exportada en laGoogle 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.json para 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-00002 es el segundo de dos archivos que contiene los datos de la tabla Songs.

  • Un archivo ChangeStreamName-manifest.json para cada flujo de cambios en la base de datos que exportaste.

  • Un archivo ChangeStreamName.avro-00000-of-00001 para cada flujo de cambios. Este archivo contiene datos vacíos solo con el esquema de 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 de tu bucket de Cloud Storage. Para evitar los cargos por transferencia de datos salientes, elige una región que coincida con la ubicación de tu bucket de Cloud Storage.

  • Si la ubicación de tu bucket de Cloud Storage es una región, puedes aprovechar el uso gratuito de la red eligiendo la misma región para tu trabajo de importación, siempre que esa región esté disponible.

  • Si la ubicación de tu bucket de Cloud Storage es de región doble, puedes aprovechar el uso gratuito de red eligiendo 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 de tu bucket de Cloud Storage es una multirregión, se aplican cargos por 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.

Cómo exportar un subconjunto de tablas

Si solo deseas exportar los datos de ciertas tablas y no de 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 especifiques, 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 consola de Google Cloud o gcloud CLI. (La página de Spanner no proporciona esta acción).

Si exportas los datos de una tabla secundaria de otra tabla, también debes exportar los datos de la tabla principal. Si no se exportan los elementos superiores, el trabajo de exportación fallará.

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 consola de Google Cloud o con la gcloud CLI, como se describe a continuación:

Console

Si usas la página de Dataflow en la consola de Google Cloud , el parámetro Nombres de tablas de Cloud Spanner se encuentra en la sección Parámetros opcionales de la página Crear trabajo a partir de una plantilla. Se pueden especificar varias tablas en un formato separado por comas.

Ir a Dataflow

gcloud

Ejecuta el comando gcloud dataflow jobs run y especifica el argumento tableNames. 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 \