Importa y exporta datos

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 No
Cómo importar tablas exportadas previamente
Exporta en una marca de tiempo anterior
Importa o exporta con Spanner
Importa datos de otras bases de datos No

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.import
  • spanner.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:PutObject
  • s3:AbortMultipartUpload
  • s3: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.json

  • Un archivo ENTITY_NAME-manifest.json para 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:

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, BYTES y JSON.

  • 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 de NULL. El valor predeterminado es \N.

  • --csv-has-trailing-delimiters: Especifica si los archivos CSV tienen delimitadores finales. El valor predeterminado es false.

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.