Importa archivos Avro de Spanner

En esta página, se describe cómo importar bases de datos de Spanner a Spanner con la consola de Google Cloud . Para importar archivos Avro desde otra fuente, consulta la página sobre cómo importar datos de bases de datos que no sean de Spanner.

En el proceso, se usa Dataflow; importa datos desde una carpeta de depósito de Cloud Storage que contiene un conjunto de archivos Avro y archivos de manifiesto JSON. Para el proceso de importación solo se admiten archivos Avro exportados desde Spanner.

Para importar una base de datos de Spanner con la API de REST o gcloud CLI, completa los pasos de la sección Antes de comenzar en esta página y, luego, consulta las instrucciones detalladas en Cloud Storage Avro a Spanner.

Antes de comenzar

Para importar una base de datos de Spanner, primero debes habilitar las APIs de Spanner, Cloud Storage, Compute Engine y Dataflow:

Enable the APIs

También necesitas una cuota suficiente y los permisos necesarios de IAM.

Requisitos de cuota

Los requisitos de cuota para los trabajos de importación son los siguientes:

  • Spanner: Debes tener capacidad de procesamiento suficiente para admitir la cantidad de datos que deseas importar. No se requiere capacidad de procesamiento adicional para importar una base de datos, aunque es posible que debas agregar más capacidad de procesamiento a fin de que el trabajo se complete en un tiempo razonable. Consulta la sección Optimiza los trabajos para obtener más detalles.
  • Cloud Storage: Para importar, debes tener un depósito que contenga los archivos exportados con anterioridad. No es necesario que establezcas un tamaño para tu bucket.
  • Dataflow: Los trabajos de importació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 importación, debes establecer 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 ajuste de escala automático para que solo pagues por los recursos que sí se usan durante la importación. Si tu trabajo puede hacer uso de 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 la cuenta de servicio del trabajador de Dataflow:

Opcional: Encuentra la carpeta de tu base de datos en Cloud Storage

Para encontrar la carpeta que contiene tu base de datos exportada en la consola deGoogle Cloud , dirígete al navegador de Cloud Storage y haz clic en el bucket que contiene la carpeta exportada.

Ir al navegador de Cloud Storage

El nombre de la carpeta que contiene los datos exportados 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 y comienza en cero; 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 con solo el esquema Avro del flujo de cambios.

Importa una base de datos

Para importar tu base de datos de Spanner desde Cloud Storage hasta tu instancia, 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 contendrá la base de datos importada.

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

  4. En Elegir una carpeta fuente, haz clic en Explorar.

  5. Busca el bucket que contiene tu exportación en la lista inicial o haz clic en Buscar Captura de pantalla del elemento de IU de búsqueda para filtrar la lista y encontrar el bucket. Haz doble clic en el bucket para ver las carpetas que contiene.

  6. Busca la carpeta con tus archivos exportados y haz clic en ella para seleccionarla.

  7. Haz clic en Seleccionar.

  8. Ingresa un nombre para la base de datos nueva, que Spanner crea durante el proceso de importación. El nombre de la base de datos no puede existir en tu instancia.

  9. Elige el dialecto de la base de datos nueva (Google SQL o PostgreSQL).

  10. Opcional: Para proteger la base de datos nueva con una clave de encriptación administrada por el cliente, haz clic en Mostrar opciones de encriptación y selecciona Usar una clave de encriptación administrada por el cliente (CMEK). Luego, selecciona una clave de la lista desplegable.

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

  12. Opcional: Para encriptar el estado de la canalización de Dataflow con una clave de encriptación administrada por el cliente, haz clic en Mostrar opciones de encriptación y selecciona Usar una clave de encriptación administrada por el cliente (CMEK). Luego, selecciona una clave de la lista desplegable.

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

  14. Haga clic en Import.

    La consola de Google Cloud muestra la página Detalles de la base de datos, que ahora muestra un cuadro que describe tu trabajo de importación, incluido el tiempo transcurrido del trabajo:

    Captura de pantalla del trabajo en curso

Cuando el trabajo finaliza, la consola de Google Cloud muestra un mensaje en la página Detalles de la base de datos. Si el trabajo se realiza de forma correcta, aparecerá un mensaje de confirmación como el siguiente:

Mensaje de éxito del trabajo de importación

Si el trabajo no se realiza correctamente, aparece un mensaje de error:

Mensaje de error sobre el trabajo de importación

Si tu trabajo falla, revisa los registros de Dataflow del trabajo para ver los detalles del error y consulta Solución de problemas de trabajos de importación con errores.

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

Spanner usa la definición de cada columna generada en el esquema Avro para volver a crear esa columna. Spanner calcula los valores de las columnas generadas automáticamente durante la importación.

Del mismo modo, Spanner usa la definición de cada flujo de cambios en el esquema Avro para volver a crearlo durante la importación. Los datos del flujo de cambios no se exportan ni se importan a través de Avro, por lo que todos los flujos de cambios asociados con una base de datos recién importada no tendrán registros de datos de cambios.

Nota sobre la importación de secuencias

Cada secuencia (GoogleSQL, PostgreSQL) que exporta Spanner usa la función GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) para capturar su estado actual. Spanner agrega un búfer de 1, 000 al contador y escribe el valor del contador nuevo en las propiedades del campo de registro. Ten en cuenta que este es solo un enfoque de esfuerzo óptimo para evitar errores de valores duplicados que puedan ocurrir después de la importación. Ajusta el contador de secuencia real si hay más operaciones de escritura en la base de datos de origen durante la exportación de datos.

Durante la importación, la secuencia comienza desde este contador nuevo en lugar del contador que se encuentra en el esquema. Si es necesario, puedes usar la sentencia ALTER SEQUENCE (GoogleSQL, PostgreSQL) para actualizar a un contador nuevo.

Nota sobre la importación de tablas intercaladas y claves externas

El trabajo de Dataflow puede importar tablas intercaladas, lo que te permite retener las relaciones de superior y secundario de tu archivo fuente. Sin embargo, las restricciones de clave externa no se aplican durante la carga de datos. El trabajo de Dataflow crea todas las claves externas necesarias después de que se completa la carga de datos.

Si tienes restricciones de clave externa en la base de datos de Spanner antes de que comience la importación, es posible que encuentres errores de escritura debido a incumplimientos de integridad referencial. Para evitar errores de escritura, considera descartar las claves externas existentes antes de iniciar el proceso de importación.

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 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 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 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 con la misma ubicación para tu trabajo de importación o si la ubicación de tu bucket de Cloud Storage es multirregional, se aplicarán cargos de transferencia de datos salientes. Consulta los precios de transferencia de datos de Cloud Storage para elegir una región que incumpla los cargos de transferencia de datos más bajos.

Visualiza o soluciona problemas de trabajos en la IU de Dataflow

Después de iniciar un trabajo de importación, podrás ver los detalles del trabajo, incluidos los registros, en la sección de Dataflow de la consola de Google Cloud .

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:

  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

    La consola de Google Cloud muestra los detalles del trabajo de Dataflow.

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 Trabajos

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

    La consola de Google Cloud muestra los detalles del trabajo de Dataflow.

Visualiza los registros de Dataflow de 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):

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).

    La consola de Google Cloud muestra 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.

Para obtener más información sobre cómo solucionar problemas de trabajos de Dataflow, consulta Solución de problemas y depuración.

Soluciona problemas de trabajos de importació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 escritura del 99% en la pestaña Supervisión de tu base de datos de Spanner en la consola deGoogle Cloud . Si se muestran valores altos (de varios segundos), eso indica que la instancia está sobrecargada, lo que hace que las escrituras 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 tu base de datos de Spanner en la consola de Google Cloud , debes iniciar la importación con la plantilla de Cloud Storage Avro a Spanner 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.

Ir a Dataflow

gcloud

Ejecuta el comando gcloud dataflow jobs run y especifica el argumento max-workers. Por ejemplo:

  gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Avro_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10 \
    --network=network-123

Cómo solucionar problemas 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 ocurre 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 los trabajos de importació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 consola de Google Cloud muestra un ícono de advertencia Ícono de advertencia y mensajes de registro:

    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.

  • 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 importación

Varios factores influyen en el tiempo que tarda en completarse un trabajo de importació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, que incluye lo siguiente:

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

Ten en cuenta que la creación del índice y de la clave externa continúa después de que se completa el trabajo de importación de Dataflow. Los flujos de cambios se crean antes de que se complete el trabajo de importación, pero después de que se importen todos los datos.

  • 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. El ajuste de escala automático puede sobrecargar Spanner y generar errores cuando hay una gran cantidad de datos que se pueden importar.

  • Carga existente en Spanner: Un trabajo de importación agrega una carga de CPU significativa 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.

Ajusta los trabajadores para obtener un buen rendimiento de importación

Cuando se inicia un trabajo de importación de Spanner, los trabajadores de Dataflow deben configurarse en un valor óptimo para un buen rendimiento. Hay demasiados trabajadores que sobrecargan Spanner y muy pocos causan un rendimiento de importación insuficiente.

La cantidad máxima de trabajadores depende en gran medida del tamaño de los datos, pero lo ideal es que el uso total de CPU de Spanner esté entre el 70% y el 90%. Esto proporciona un buen balance entre la eficiencia de Spanner y la finalización de trabajos sin errores.

Para lograr ese objetivo de uso en la mayoría de los esquemas y situaciones, recomendamos una cantidad máxima de CPU virtuales de trabajador de entre 4 y 6 veces la cantidad de nodos de Spanner.

Por ejemplo, para una instancia de Spanner de 10 nodos, con trabajadores n1-standard-2, deberías establecer el máximo de trabajadores en 25, lo que daría 50 CPU virtuales.