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 de Google Cloud. Exportar una base de datos de Spanner con la API de REST o gcloud spanner de herramienta de línea de comandos, completa los pasos Antes de comenzar de esta página, y luego consulta instrucciones detalladas en Spanner a Cloud Storage Avro en la Documentación de Dataflow. El proceso de exportación usa Dataflow y escribe los datos en una carpeta de 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 la conexión de Spanner, Cloud Storage, Compute Engine y las API de Dataflow:

Habilita 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: Sin datos adicionales se requiere capacidad de procesamiento para exportar una base de datos, aunque podrías necesitar agregar más capacidad de procesamiento para que el trabajo termine en una cantidad razonable un plazo determinado. 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 consola de Google Cloud ya sea a través de la página de Cloud Storage o mientras creas tu exportación a través de 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.

Requisitos de IAM

Para exportar una base de datos, también necesitas tener funciones de IAM con permisos suficientes para usar todos los servicios involucrados en un trabajo de exportación. Para obtener información sobre cómo otorgar roles y permisos, consulta Aplica roles de IAM.

Para exportar una base de datos, necesitas las siguientes funciones:

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

Exporta una base de datos

Después de satisfacer los requisitos de cuota y de IAM descritos anteriormente, puedes exportar una base de datos existente de Spanner,

Para exportar tu base de datos de Spanner a un bucket de Cloud Storage, sigue estos pasos: sigue estos pasos.

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

    Ir a la página 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 del 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 depósito 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 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 momento anterior, marca la casilla y escribe una marca de tiempo.

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

  10. Encriptar el estado de la canalización de Dataflow con una Clave de encriptación administrada por el cliente:

    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 de la lista desplegable.

    Esta opción no afecta el bucket de destino de Cloud Storage encriptación. Para habilitar CMEK en tu bucket de Cloud Storage, consulta Usa 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 Descripción general de Data Boost.

  12. Selecciona la casilla de verificación en Confirmar cargos para confirmar que hay además de los que genera tu instancia de Spanner existente.

  13. Haz clic en Exportar.

    En la consola de Google Cloud, se muestra la página Importación/exportación de bases de datos. que ahora muestra un elemento de una sola línea para tu trabajo de exportación en los trabajos de importación y exportación. que incluye el tiempo transcurrido del trabajo:

    Captura de pantalla del trabajo en curso

Cuando el trabajo finaliza, el estado se actualiza en el repositorio lista. Si el trabajo se ejecutó correctamente, se muestra 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 para tu trabajo, haz clic en del 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 Ver tus export para obtener información sobre cómo encontrarla.

Nota sobre la exportación de columnas generadas y flujos de cambios

Los valores en una columna generada almacenada no se exportan. La columna al esquema de Avro como un campo de registro de tipo nulo, con el definición de columna como propiedades personalizadas del campo. Hasta que se complete el de una columna recién agregada se completa, la columna generada se ignorada como si no existiera en el esquema.

Las transmisiones de cambios exportadas como archivos Avro contienen solo el esquema del flujos de cambios y no registros de cambios de datos.

Nota sobre la exportación de secuencias

Secuencias (GoogleSQL, PostgreSQL). son objetos de esquema que se usan para generar valores de número entero únicos. Spanner exporta cada uno de los objetos de esquema al esquema de Avro como un campo de registro, con su tipo de secuencia, rango omitido y contador como propiedades del campo. Para evitar que una secuencia se restablezca y genere los valores duplicados después de la importación, durante la exportación del esquema, GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) captura el contador de secuencias. Spanner agrega un búfer de 1, 000 en el contador y escribe el valor nuevo del contador en el campo de registro. Esta 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, deberías ajustar el contador de secuencias real con ALTER SEQUENCE (GoogleSQL, PostgreSQL).

En la importación, la secuencia comienza desde este nuevo contador en lugar del contador que se encuentran en el esquema. Como alternativa, puedes usar ALTER SEQUENCE. (GoogleSQL, PostgreSQL) para actualizar la secuencia con un contador nuevo.

Consulta tu exportación en Cloud Storage

Para ver la carpeta que contiene tu base de datos exportada en la En la consola de Google Cloud, navega al navegador de Cloud Storage y elige el bucket que seleccionaste anteriormente:

Ir al navegador de Cloud Storage

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 y exportarse.

  • Un ChangeStreamName.avro-00000-of-00001 para cada flujo de cambios. Este archivo contiene datos vacíos solo con el esquema de Avro del flujo de cambios.

Elige una región para tu trabajo de importación

Puedes elegir una región diferente según la ubicación de tu bucket de Cloud Storage. Para evitar cargos de 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 puedes aprovechar el uso gratuito de la red eligiendo misma región para el trabajo de importación, suponiendo que la región esté disponible.

  • Si la ubicación de tu bucket de Cloud Storage es una región doble, puedes aprovechar el uso gratuito de la red si eliges es una de las dos regiones que conforman la región doble para el trabajo de importación siempre que una de las regiones esté disponible.

  • Si una región con ubicación compartida no está disponible para tu trabajo de importación o si tu La ubicación del bucket de Cloud Storage es una multirregión, se aplican cargos de transferencia de datos salientes. Consulta Cloud Storage transferencia de datos para elegir una región que incurra los costos de transferencia de datos más bajos.

Cómo exportar un subconjunto de tablas

Si quieres exportar solo los datos de ciertas tablas y no los en toda la base de datos, podrás especificar esas tablas durante la exportación. En en este caso, Spanner exporta todo el esquema de la base de datos, incluidas los datos de las tablas que especifiques y dejando todas las demás tablas presentes, pero vacío en el archivo exportado.

Puedes especificar un subconjunto de tablas para exportar con el Página de Dataflow en la consola de Google Cloud o en la línea de comandos. (El La página de Spanner no proporciona esta acción).

Si exportas los datos de una tabla que es secundaria de otra tabla, debería exportar su elemento superior datos de una tabla específica. Si los elementos superiores no se exportan, el trabajo de exportación falla.

Para exportar un subconjunto de tablas, inicia la exportación con Dataflow Plantilla de Spanner a Cloud Storage en Avro y especificar las tablas con la página de Dataflow en la consola de Google Cloud o Google Cloud CLI, como se describe a continuación:

Consola de Google Cloud

Si estás usando la página de Dataflow en la consola de Google Cloud, El parámetro Nombres de la tabla de Cloud Spanner se encuentra en Sección Parámetros opcionales de la página Crea un trabajo a partir de una plantilla. Se pueden especificar varias tablas en formato separado por comas.

gcloud CLI

Si usas Google Cloud CLI, usa el argumento tableNames para especificar la tabla. 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

Especificar varias tablas en gcloud requiere escapa de argumentos de tipo de 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

El parámetro shouldExportRelatedTables es una opción conveniente para exportar automáticamente todas las tablas superiores de las tablas deseadas. Por ejemplo, en esta jerarquía de esquema Con las tablas Singers, Albums y Songs, solo debemos especificar Songs. El La opción shouldExportRelatedTables también exportará Singers y Albums porque Songs es un descendiente de ambos.

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

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, incluido lo siguiente: en la sección Dataflow de la consola de Google Cloud.

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:

  1. Navega hasta la página Descripción general de la base de datos de la base de datos.
  2. 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.
  3. 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:

    Mensaje de estado del trabajo en curso

    En la consola de Google Cloud, se muestran los detalles del el trabajo.

Para ver un trabajo que ejecutaste hace más de una semana, sigue estos pasos:

  1. Ve a la página de trabajos de Dataflow en la consola de Google Cloud.

    Ir a la página Trabajos

  2. Busca tu trabajo en la lista y haz clic sobre su nombre.

    En la consola de Google Cloud, se muestran los detalles del el trabajo.

Ver los registros de Dataflow para tu trabajo

Para ver los registros de un trabajo de Dataflow, navega hasta la página de detalles del trabajo como se describió con anterioridad 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):

Ejemplo de recuento de errores junto al botón Registros (Logs)

Para ver los errores del trabajo, sigue estos pasos:

  1. Haz clic en el recuento de errores junto a Registros (Logs).

    En la consola de Google Cloud, se muestran los registros del trabajo. Es posible que debas desplazarte para ver los errores.

  2. Identifica las entradas con el ícono de error Ícono de error.

  3. Haz clic en una entrada de registro individual para expandir su contenido.

Si necesitas más información para solucionar problemas de trabajos de Dataflow, consulta Soluciona problemas de tu canalización.

Soluciona problemas de trabajos de exportación con errores

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 el Pestaña Monitoring de tu base de datos de Spanner en la Consola de Google Cloud 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 y usa demasiados lo que genera demasiada carga en la instancia de Spanner.

Especificar un límite en la cantidad de trabajadores de Dataflow, en lugar de usar el Pestaña Import/Export en la página de detalles de la instancia de Spanner en la consola de Google Cloud, debes iniciar exportar con Dataflow Plantilla de Cloud Spanner a Avro de Cloud Storage y especifica la cantidad máxima de trabajadores como se describe a continuación:
  • 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 un trabajo a partir de una plantilla.

  • Si usas gcloud, especifica el argumento max-workers. 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
    

Optimiza los 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 encuentra la instancia bucket de Cloud Storage.

  • Garantizar recursos suficientes de Dataflow: Si la cuotas relevantes de Compute Engine limitar los recursos de tu trabajo de Dataflow, Página de Dataflow en la consola de Google Cloud muestra un ícono de advertencia Ícono de advertencia y registro mensajes:

    Captura de pantalla de la advertencia de límite de cuota

    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.

  • Verifica el uso de CPU de Spanner: si ves que la CPU de procesamiento de la instancia supera el 65%, puedes aumentar la capacidad de procesamiento de esa instancia. La capacidad agrega más Los recursos de Spanner y el trabajo deberían acelerarse, pero incurrirás en 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 lleva más tiempo. y recursos.

  • Esquema de la base de datos de Spanner, que incluye lo siguiente:

    • La cantidad de tablas
    • El tamaño de las filas
    • La cantidad de índices secundarios
    • El número de claves externas
    • La cantidad de flujos de cambios

  • Ubicación de los datos: Los datos se transfieren entre Spanner y Cloud Storage con 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 a una instancia instancia. 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 para la instancia supera el 65%, entonces el trabajo se ejecuta más lento.