En esta página, se describe cómo preparar los archivos Avro que exportaste desde bases de datos que no son de Spanner y, luego, importarlos a Spanner. Si deseas importar una base de datos de Spanner que ya exportaste, consulta Importa archivos Avro de Spanner.
El proceso usa Dataflow, que importa datos de un bucket de Cloud Storage que contiene un conjunto de archivos Avro y un archivo de manifiesto JSON que especifica las tablas de destino y los archivos Avro que propagan cada tabla.
Antes de comenzar
Para importar una base de datos de Spanner, primero debes habilitar las APIs de Spanner, Cloud Storage, Compute Engine y Dataflow:
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 suficiente capacidad de procesamiento para admitir la cantidad de datos que importas. 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 Optimiza trabajos para obtener más detalles.
- Cloud Storage: Para importar, debes tener un bucket 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.
Requisitos de IAM
Para importar una base de datos, también necesitas tener funciones de IAM con permisos suficientes para usar todos los servicios involucrados en un trabajo de importación. Para obtener información sobre cómo otorgar funciones y permisos, consulta Aplica funciones de IAM.
Para importar una base de datos, necesitas las funciones mencionadas a continuación:
- En el nivel de proyecto de Google Cloud, haz lo siguiente:
- Visualizador de Spanner (
roles/spanner.viewer
) - Administrador de Dataflow (
roles/dataflow.admin
) - Administrador de almacenamiento (
roles/storage.admin
)
- Visualizador de Spanner (
- A nivel de la base de datos de Spanner o de la instancia, o a nivel de proyecto de Google Cloud, haz lo siguiente:
- Lector de base de datos de Spanner (
roles/spanner.databaseReader
) - Administrador de base de datos de Spanner (
roles/spanner.databaseAdmin
)
- Lector de base de datos de Spanner (
Exporta datos de una base de datos que no sea de Spanner a archivos Avro
El proceso de importación incluye datos de archivos Avro ubicados en un bucket de Cloud Storage. Puedes exportar datos en formato Avro desde cualquier fuente y puedes usar cualquier método disponible para hacerlo.
Para exportar datos de una base de datos que no es de Spanner a archivos Avro, sigue estos pasos:
Cuando exportes tus datos, ten en cuenta lo siguiente:
- Puedes exportar mediante el uso de cualquiera de los tipos primitivos de Avro y el tipo de arreglo complejo.
Cada columna de tus archivos Avro debe usar uno de los siguientes tipos de columnas:
ARRAY
BOOL
BYTES
*DOUBLE
FLOAT
INT
LONG
†STRING
‡
* Se usa una columna de tipo
BYTES
para importar unNUMERIC
de Spanner. Consulta asignaciones recomendadas a continuación para obtener más detalles.†,‡ Puedes importar una
LONG
con una marca de tiempo o unaSTRING
que almacene una marca de tiempo comoTIMESTAMP
de Spanner. Consulta las asignaciones recomendadas a continuación para obtener más información.No es necesario incluir ni generar metadatos cuando se exportan los archivos Avro.
No es necesario que sigas ninguna convención de nombres específica para tus archivos.
Si no exportas tus archivos directamente a Cloud Storage, debes subir los archivos Avro a un bucket de Cloud Storage. Para obtener instrucciones detalladas, consulta Sube objetos a Cloud Storage.
Importa archivos Avro desde bases de datos que no sean de Spanner a Spanner
Para importar archivos Avro de una base de datos que no es de Spanner a Spanner, sigue estos pasos:
- Crear tablas de destino y definir el esquema para tu base de datos de Spanner
- Crea un archivo
spanner-export.json
en tu bucket de Cloud Storage. - Ejecutar un trabajo de importación de Dataflow con gcloud CLI
Paso 1: Crea el esquema para la base de datos de Spanner
Antes de ejecutar la importación, debes crear la tabla de destino en Spanner y definir su esquema.
Debes crear un esquema que use el tipo de columna adecuado para cada columna en los archivos Avro.
Asignaciones recomendadas
GoogleSQL
Tipo de columna Avro | Tipo de columna de Spanner |
---|---|
ARRAY |
ARRAY |
BOOL |
BOOL |
BYTES |
|
DOUBLE |
FLOAT64 |
FLOAT |
FLOAT64 |
INT |
INT64 |
LONG |
|
STRING |
|
PostgreSQL
Tipo de columna Avro | Tipo de columna de Spanner |
---|---|
ARRAY |
ARRAY |
BOOL |
BOOLEAN |
BYTES |
|
DOUBLE |
DOUBLE PRECISION |
FLOAT |
DOUBLE PRECISION |
INT |
BIGINT |
LONG |
|
STRING |
|
Paso 2: Crea un archivo spanner-export.json
También debes crear un archivo llamado spanner-export.json
en tu depósito de Cloud Storage. Este archivo especifica el dialecto de la base de datos y contiene un array tables
que enumera el nombre y las ubicaciones de los archivos de datos para cada tabla.
El contenido del archivo tiene el formato que se menciona a continuación:
{ "tables": [ { "name": "TABLE1", "dataFiles": [ "RELATIVE/PATH/TO/TABLE1_FILE1", "RELATIVE/PATH/TO/TABLE1_FILE2" ] }, { "name": "TABLE2", "dataFiles": ["RELATIVE/PATH/TO/TABLE2_FILE1"] } ], "dialect":"DATABASE_DIALECT" }
Donde DATABASE_DIALECT = {GOOGLE_STANDARD_SQL
| POSTGRESQL
}
Si se omite el elemento de dialecto, el dialecto predeterminado es GOOGLE_STANDARD_SQL
.
Paso 3: Ejecuta un trabajo de importación de Dataflow con gcloud CLI
Si quieres iniciar el trabajo de importación, sigue las instrucciones para usar Google Cloud CLI a fin de ejecutar un trabajo con la plantilla de Avro a Spanner.
Después de iniciar un trabajo de importación, puedes ver los detalles del trabajo en la consola de Google Cloud.
Cuando finalice el trabajo de importación, agrega las claves externas y los índices secundarios necesarios.
Elige una región para tu trabajo de importación
Se recomienda elegir una región diferente según la ubicación de tu bucket de Cloud Storage. Para evitar los cargos de transferencia de datos saliente, 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 red si eliges la misma región para tu trabajo de importación, suponiendo que esa región esté disponible.
Si la ubicación de tu bucket de Cloud Storage es una región doble, puedes aprovechar el uso de red gratuito si eliges una de las dos regiones que conforman la región doble para tu trabajo de importación, suponiendo que una de las regiones está disponible.
Si una región de ubicación compartida no está 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 de transferencia de datos saliente. Consulta los precios de transferencia de datos de Cloud Storage para elegir una región que genere 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, puedes ver los detalles del trabajo, incluidos los registros, en la sección de 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:
- 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:
En la consola de Google Cloud, se muestran 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 de trabajos de Dataflow en la consola de Google Cloud.
Busca tu trabajo en la lista y haz clic sobre su nombre.
En la consola de Google Cloud, se muestran los detalles del trabajo de Dataflow.
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):
Para ver los errores del trabajo, sigue estos pasos:
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.
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 la solución de problemas de trabajos de Dataflow, consulta Soluciona problemas de tu canalización.
Soluciona problemas relacionados con los trabajos de importació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 escritura del 99% en la pestaña Supervisión de la 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 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 genera 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 comenzar la importación con la plantilla Cloud Storage Avro a Cloud Spanner de Dataflow y especificar 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-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
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 en la que se encuentran la instancia de Spanner y el bucket de Cloud Storage.
Garantiza recursos suficientes de Dataflow: Si las cuotas relevantes de Compute Engine limitan los recursos del trabajo de Dataflow, la página de Dataflow del trabajo en la consola de Google Cloud 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.
Verifica 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 de esa instancia. La capacidad agrega más recursos de Spanner, y el trabajo debería acelerarse, pero se generan 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
- 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 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 para 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 la importación
Cuando inicias un trabajo de importación de Spanner, los trabajadores de Dataflow deben configurarse en un valor óptimo para un buen rendimiento. Si hay demasiados trabajadores, se sobrecarga Spanner y pocos trabajadores generan 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 sea de entre el 70% y el 90%. Esto proporciona un buen equilibrio 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 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 una cantidad máxima de trabajadores en 25, es decir, 50 CPU virtuales.