En este documento, se describe cómo migrar, crear copias de seguridad y transferir datos en Spanner Omni con los formatos Avro y CSV. Usa la CLI de Spanner Omni para mover contenido de la base de datos entre Spanner Omni y soluciones de almacenamiento, como Cloud Storage, Amazon Simple Storage Service (Amazon S3), almacenamiento local compatible con S3 o sistemas de archivos locales (NFS). Los flujos de datos de importación y exportación en Spanner Omni no admiten modelos, grupos de localidad ni posiciones.
Las operaciones de importación y exportación se ejecutan en servidores de Spanner Omni y comparten los recursos disponibles del sistema. La importación requiere muchos recursos y puede causar un uso elevado de RAM, CPU y disco, lo que podría afectar las cargas de trabajo activas. Si bien estas tareas suelen ejecutarse con una prioridad más baja que el tráfico normal, debes supervisar tu implementación para detectar posibles impactos en el rendimiento.
Comparación de formatos de archivo
En la siguiente tabla, se comparan las capacidades de los formatos de archivo Avro y CSV para importar y exportar datos de Spanner.
| Función | Avro | CSV |
|---|---|---|
| Importa o exporta una base de datos completa | Sí | No |
| Cómo importar tablas exportadas previamente | Sí | Sí |
| Exporta en una marca de tiempo anterior | Sí | Sí |
| Importa o exporta con Spanner | Sí | Sí |
| Importa datos de otras bases de datos | No | Sí |
Los formatos Avro y CSV exportan todas las tablas de la base de datos. El formato Avro también exporta el esquema para que puedas volver a importarlo. El formato CSV no exporta el esquema.
Antes de comenzar
Antes de iniciar una operación de importación o exportación, verifica tus permisos y configura el acceso a la ubicación de almacenamiento de datos.
Permisos
Antes de comenzar, asegúrate de tener los siguientes permisos:
spanner.databases.importspanner.databases.export
Para obtener más información sobre Identity and Access Management (IAM) en Spanner Omni, consulta Descripción general de IAM. Para obtener información sobre cómo actualizar los roles de un usuario, consulta Actualiza usuarios.
Fuente y destino de los datos
Puedes almacenar datos en un bucket de Amazon Simple Storage Service (Amazon S3), un bucket de Cloud Storage, un almacenamiento local compatible con Amazon S3 (como MinIO) o un sistema de archivos local (NFS). Si usas un sistema de archivos local, asegúrate de que los datos estén disponibles en la misma ruta de acceso en todos los servidores de la implementación.
Puedes proporcionar acceso al almacén de datos de dos maneras:
Agrega almacenamiento externo a la implementación: Este es el método preferido si planeas reutilizar un bucket.
Crea credenciales únicas: Asegúrate de que estas credenciales duren más que la operación de importación o exportación (por ejemplo, 48 horas).
Las credenciales deben proporcionar permisos para enumerar y leer objetos en el bucket para las importaciones. Para las exportaciones a Amazon S3, necesitas los siguientes permisos adicionales de Amazon S3:
s3:PutObjects3:AbortMultipartUploads3:ListBucketMultipartUploads
Para obtener más información, consulta Permisos de IAM.
Importa archivos Avro de Spanner
Para importar datos que ya exportaste desde otra base de datos de Spanner (Spanner o Spanner Omni) en formato Avro, sigue estos pasos.
Requisitos previos para la importación de Avro
Antes de comenzar la importación de Avro, asegúrate de que tu entorno cumpla con los siguientes requisitos:
Creaste la base de datos de destino.
Los objetos de esquema que importas no existen aún en la base de datos. El proceso de importación de Avro crea estas tablas antes de importar los datos.
Instrucciones para importar archivos Avro
Identifica la ruta de acceso a la carpeta que contiene los datos exportados. La carpeta contiene lo siguiente:
Un archivo
spanner-export.jsonUn archivo
ENTITY_NAME-manifest.jsonpara cada entidad exportada (como una tabla, una secuencia o un esquema).Todos los archivos Avro que se indican en los archivos de manifiesto
Si ya agregaste el almacén de datos como almacenamiento externo, no es necesario que incluyas credenciales en la ruta de acceso. Puedes proporcionar la ruta directamente. Si usas credenciales de un solo uso, usa los siguientes formatos de URL:
Cloud Storage:
gs://BUCKET_NAME/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY]. Usa credenciales HMAC. Para obtener más información, consulta Claves HMAC.Amazon S3:
s3://S3_BUCKET/BASE_FOLDER[?accesskey=ACCESS_KEY&secret=SECRET_KEY[&sessiontoken=SESSION_TOKEN]]Carpeta de archivos locales*:
file:///PATH_TO_DIR
Para iniciar la importación, ejecuta el siguiente comando:
spanner databases import DATABASE_ID --url="URL" --format=avro [--avro-skip-wait-for-index-creation]
Notas adicionales
Ten en cuenta la siguiente información cuando importes archivos Avro:
Nota sobre la importación de columnas generadas y flujos de cambios en la documentación de Spanner
Nota sobre la importación de secuencias en la documentación de Spanner
Nota sobre la importación de tablas intercaladas y claves externas en la documentación de Spanner
Para omitir la importación de entidades específicas, quítalas del archivo
spanner-export.json.La creación del índice puede tardar bastante en el caso de conjuntos de datos grandes. Para omitir la espera de la creación del índice, usa la marca opcional
--avro-skip-wait-for-index-creation.
Cuando la operación de importación se inicia correctamente, devuelve un ID de operación de larga duración. Usa este ID para hacer un seguimiento del estado de la operación.
Importa archivos CSV
Para importar datos de texto que exportaste desde otra base de datos, sigue estos pasos.
Requisitos previos para la importación de CSV
Antes de comenzar la importación de CSV, asegúrate de hacer lo siguiente:
Asegúrate de que tus tablas tengan uno de los siguientes tipos de datos admitidos:
BOOL,INT64,FLOAT64,NUMERIC,STRING,DATE,TIMESTAMP,BYTESyJSON.Crea la base de datos de destino.
Crea todas las tablas en las que deseas importar datos. El proceso de importación de CSV no crea tablas.
Asegúrate de que el archivo CSV no contenga una fila de encabezado.
Instrucciones para importar archivos CSV
Para importar archivos CSV, crea un archivo de manifiesto que describa los datos que se importarán. El archivo de manifiesto usa la siguiente estructura, que se define aquí en formato de protobuf:
message ImportManifest {
// The per-table import manifest.
message TableManifest {
// Required. The name of the destination table.
string table_name = 1;
// Required. The CSV files to import. This value can be either a path or a glob pattern.
repeated string file_patterns = 2;
// The schema for a table column.
message Column {
// Required for each column that you specify. The name of the column in the
// destination table.
string column_name = 1;
// Required for each column that you specify. The type of the column.
string type_name = 2;
}
// Optional. The schema for the table columns.
repeated Column columns = 3;
}
// Required. The TableManifest of the tables to be imported.
repeated TableManifest tables = 1;
enum ProtoDialect {
GOOGLE_STANDARD_SQL = 0;
POSTGRESQL = 1;
}
// Optional. The dialect of the receiving database. Defaults to GOOGLE_STANDARD_SQL.
ProtoDialect dialect = 2;
}
El siguiente es un manifiesto de ejemplo:
{
"tables": [
{
"table_name": "Albums",
"file_patterns": [
"gs://bucket1/Albums_1.csv",
"gs://bucket1/Albums_2.csv"
]
},
{
"table_name": "Singers",
"file_patterns": [
"gs://bucket1/Singers*.csv"
],
"columns": [
{"column_name": "SingerId", "type_name": "INT64"},
{"column_name": "FirstName", "type_name": "STRING"},
{"column_name": "LastName", "type_name": "STRING"}
]
}
]
}
La URL del siguiente comando de importación debe apuntar a la carpeta que contiene un archivo de manifiesto en formato JSON, como se describe en el manifiesto de ejemplo. Este archivo puede ubicarse en Cloud Storage, Amazon S3 o una carpeta de archivos local, con el mismo formato de URL para las credenciales que se describe en las instrucciones de importación de Avro. Para iniciar la importación, ejecuta el siguiente comando:
spanner databases import DATABASE_ID --url="URL" --format=csv
Opciones de importación de CSV
Usa las siguientes marcas para personalizar la forma en que Spanner Omni controla los archivos de texto:
--csv-date-format: Anula el formato de las columnas de fecha. El valor predeterminado es%Y-%m-%d. Ejemplo:%d/%m/%Y.--csv-timestamp-format: Anula el formato de las columnas de marca de tiempo. Usa esta opción solo si Spanner Omni no admite el formato en el CSV. Ejemplo:%d/%m/%Y %H:%M:%S%Ez.--csv-delimiter: Anula el carácter delimitador. El valor predeterminado es una coma.--csv-quote-char: Anula el carácter de comillas. El valor predeterminado es una comilla doble.--csv-escape-char: Anula el carácter de escape. El valor predeterminado es una comilla doble.--csv-null-string: Anula la cadena que representa los valores deNULL. El valor predeterminado es\N.--csv-has-trailing-delimiters: Especifica si los archivos CSV tienen delimitadores finales. El valor predeterminado esfalse.
Exporta a archivos Avro
Para exportar datos a archivos Avro, sigue las instrucciones de formato de URL que se indican en las instrucciones de importación de Avro.
Cualquier servidor de la implementación puede escribir datos en el almacén de datos proporcionado. Si usas una carpeta de archivos local como destino, asegúrate de que todos los servidores tengan acceso a la misma ruta y puedan escribir en ella de forma paralela.
El sistema exporta todas las tablas y entidades de la base de datos. Asegúrate de proporcionar una ruta de acceso a una carpeta nueva y vacía para los datos exportados.
Para iniciar la exportación, ejecuta el siguiente comando:
spanner databases export DATABASE_ID --url="URL" --format=avro
Las exportaciones de CSV solo admiten tablas y no exportan el esquema de la base de datos.
Exportar a archivos CSV
Las exportaciones de CSV no exportan el esquema de la base de datos y solo admiten tablas. Para exportar datos a archivos CSV, ejecuta el siguiente comando:
spanner databases export DATABASE_ID --url="URL" --format=csv
Soluciona problemas
Si falla una importación, las actualizaciones del esquema y los datos importados no se revierten automáticamente. Limpia la base de datos de forma manual antes de reintentar la operación.
La velocidad de una operación de importación depende de varios factores, como la cantidad de archivos en la carpeta, los recursos de procesamiento disponibles en la implementación y la velocidad del disco. Si hay suficientes recursos disponibles, el sistema importa los archivos en paralelo.