Exportar e importar con archivos CSV

En esta página se describe cómo exportar e importar datos en instancias de Cloud SQL mediante archivos CSV.

Antes de empezar

Antes de iniciar una operación de exportación o importación:

  • Asegúrate de que tu base de datos tenga suficiente espacio libre.
  • Las operaciones de exportación e importación usan recursos de la base de datos, pero no interfieren con las operaciones normales de la base de datos, a menos que la instancia no tenga suficientes recursos.

  • Comprueba que el archivo CSV tenga los datos esperados y que estén en el formato correcto. Los archivos CSV deben tener una línea por cada fila de campos de datos.
  • Sigue las prácticas recomendadas para exportar e importar datos.

Exportar datos de Cloud SQL para PostgreSQL

Roles y permisos necesarios para exportar datos de Cloud SQL para PostgreSQL

Para exportar datos de Cloud SQL a Cloud Storage, el usuario que inicie la exportación debe tener uno de los siguientes roles:

Además, la cuenta de servicio de la instancia de Cloud SQL debe tener uno de los siguientes roles:

  • El rol storage.objectAdmin Gestión de Identidades y Accesos (IAM)
  • Un rol personalizado que incluya los siguientes permisos:
    • storage.objects.create
    • storage.objects.list (solo para exportar archivos en paralelo)
    • storage.objects.delete (solo para exportar archivos en paralelo)

Para obtener ayuda con los roles de gestión de identidades y accesos, consulta Gestión de identidades y accesos.

Exportar datos a un archivo CSV desde Cloud SQL para PostgreSQL

Puede exportar sus datos en formato CSV, que se puede usar en otras herramientas y entornos. Las exportaciones se realizan a nivel de base de datos. Durante una exportación de CSV, puede especificar los esquemas que quiere exportar. Todos los esquemas a nivel de base de datos se pueden exportar.

Para exportar datos de una base de datos de una instancia de Cloud SQL a un archivo CSV de un segmento de Cloud Storage, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
  3. Haz clic en Exportar.
  4. Selecciona Delegar exportación para permitir que se realicen otras operaciones mientras la exportación está en curso.
  5. En la sección Ubicación de exportación de Cloud Storage, añade el nombre del segmento, la carpeta y el archivo que quieras exportar, o haz clic en Examinar para buscar o crear un segmento, una carpeta o un archivo.

    Si haces clic en Examinar:

    1. En la sección Ubicación, selecciona un segmento o una carpeta de Cloud Storage para la exportación.
    2. En el cuadro Nombre, añade un nombre para el archivo CSV o selecciona un archivo de la lista de la sección Ubicación.

      Puedes usar la extensión de archivo .gz (la extensión completa sería .csv.gz) para comprimir el archivo de exportación.

    3. Haz clic en Seleccionar.
  6. En la sección Formato, haz clic en CSV.
  7. En la sección Base de datos para exportar, seleccione el nombre de la base de datos en el menú desplegable.
  8. En Consulta de SQL, introduce una consulta de SQL para especificar la tabla de la que quieres exportar datos.

    Por ejemplo, para exportar todo el contenido de la tabla entries de la base de datos guestbook, introduce

    SELECT * FROM guestbook.entries;
    Tu consulta debe especificar una tabla en la base de datos indicada. No puedes exportar una base de datos completa en formato CSV.

  9. Haz clic en Exportar para iniciar la exportación.
  10. Se abre la casilla ¿Exportar base de datos? con un mensaje que indica que el proceso de exportación puede tardar una hora o más en bases de datos de gran tamaño. Durante la exportación, la única operación que puedes realizar en la instancia es ver información. Una vez que se haya iniciado la exportación, puedes cancelar la operación. Si es un buen momento para iniciar una exportación, haz clic en Exportar. De lo contrario, haz clic en Cancelar.

gcloud

  1. Crea un segmento de Cloud Storage.
  2. Sube el archivo al segmento.

    Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.

  3. Busca la cuenta de servicio de la instancia de Cloud SQL desde la que vas a exportar los datos. Para ello, ejecuta el comando gcloud sql instances describe. Busca el campo serviceAccountEmailAddress en el resultado.
    gcloud sql instances describe INSTANCE_NAME
  4. Usa gcloud storage buckets add-iam-policy-binding para conceder el storage.objectAdmin rol de gestión de identidades y accesos a la cuenta de servicio de la instancia de Cloud SQL. Para obtener ayuda con la configuración de permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  5. Exporta la base de datos:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    Para obtener información sobre el uso del comando export csv, consulta la página de referencia del comando sql export csv.

  6. Si no necesitas conservar el rol de gestión de identidades y accesos que has definido anteriormente, revócalo ahora.

REST v1

  1. Crea un segmento para la exportación:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    Aunque este paso no es obligatorio, se recomienda efectuarlo para no tener que abrir acceso a otros datos.

  2. Asigna a tu instancia el legacyBucketWriter rol de gestión de identidades y accesos de tu segmento. Para obtener ayuda con la configuración de permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  3. Exporta tu base de datos:

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • bucket_name: nombre del segmento de Cloud Storage
    • path_to_csv_file: la ruta al archivo CSV
    • database_name: nombre de una base de datos de la instancia de Cloud SQL
    • offload: habilita la exportación sin servidor. Asigna el valor true para usar la exportación sin servidor.
    • select_query: consulta de SQL para la exportación (opcional)
    • escape_character: el carácter que debe aparecer antes de un carácter de datos que debe escaparse. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character:carácter que encierra los valores de las columnas que tienen un tipo de datos de cadena. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by: carácter que separa los valores de las columnas. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "2C" representa una coma. (opcional)
    • lines_terminated_by: el carácter que separa los registros de líneas. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "0A" representa una línea nueva. (opcional)

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    Cuerpo JSON de la solicitud:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query",
               "escapeCharacter":"escape_character",
               "quoteCharacter":"quote_character",
               "fieldsTerminatedBy":"fields_terminated_by",
               "linesTerminatedBy":"lines_terminated_by"
           }
       }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    Debe especificar exactamente una base de datos con la propiedad databases y, si la consulta de selección especifica una base de datos, debe ser la misma.

  4. Si no necesitas conservar los permisos de gestión de identidades y accesos que has definido anteriormente, elimínalos ahora.
Para ver la lista completa de parámetros de la solicitud, consulta la página instances:export.

REST v1beta4

  1. Crea un segmento para la exportación:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    Aunque este paso no es obligatorio, se recomienda efectuarlo para no tener que abrir acceso a otros datos.

  2. Asigna a tu instancia el storage.objectAdmin rol de gestión de identidades y accesos de tu segmento. Para obtener ayuda con la configuración de permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  3. Exporta tu base de datos:

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • bucket_name: nombre del segmento de Cloud Storage
    • path_to_csv_file: la ruta al archivo CSV
    • database_name: nombre de una base de datos de la instancia de Cloud SQL
    • offload: habilita la exportación sin servidor. Asigna el valor true para usar la exportación sin servidor.
    • select_query: consulta de SQL para la exportación (opcional)
    • escape_character: el carácter que debe aparecer antes de un carácter de datos que debe escaparse. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character: carácter que encierra los valores de las columnas que tienen un tipo de datos de cadena. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by: carácter que separa los valores de las columnas. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "2C" representa una coma. (opcional)
    • lines_terminated_by: el carácter que separa los registros de líneas. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "0A" representa una línea nueva. (opcional)

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    Cuerpo JSON de la solicitud:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery": "select_query",
               "escapeCharacter":  "escape_character",
               "quoteCharacter": "quote_character",
               "fieldsTerminatedBy": "fields_terminated_by",
               "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    Debe especificar exactamente una base de datos con la propiedad databases y, si la consulta de selección especifica una base de datos, debe ser la misma.

  4. Si no necesitas conservar el rol de gestión de identidades y accesos que has definido anteriormente, revócalo ahora.
Para ver la lista completa de parámetros de la solicitud, consulta la página instances:export.

Personalizar el formato de un archivo CSV exportado

Puede usar gcloud o la API REST para personalizar el formato de su archivo CSV. Cuando realiza una exportación, puede especificar las siguientes opciones de formato:

Opción CSV Valor predeterminado Marca de gcloud Propiedad de la API REST Descripción
Escape

"5C"

Código hexadecimal ASCII del separador de archivos.

--escape escapeCharacter

Carácter que aparece antes de un carácter de datos que debe escaparse.

Solo disponible para MySQL y PostgreSQL.

Presupuesto

"22"

Código hexadecimal ASCII de las comillas dobles.

--quote quoteCharacter

Carácter que incluye los valores de las columnas que tienen un tipo de datos de cadena.

Solo disponible para MySQL y PostgreSQL.

Delimitador de campos

"2C"

Código hexadecimal ASCII de la coma.

--fields-terminated-by fieldsTerminatedBy

Carácter que separa los valores de las columnas.

Solo disponible para MySQL y PostgreSQL.

Carácter de salto de línea

"0A"

Código hexadecimal ASCII de salto de línea.

--lines-terminated-by linesTerminatedBy

Carácter que divide los registros de línea.

Solo disponible para MySQL.

Por ejemplo, un comando gcloud que use todos estos argumentos podría ser como el siguiente:

gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--offload \
--query=SELECT_QUERY \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

El cuerpo de la solicitud de la API REST equivalente sería así:

{
 "exportContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "databases": ["DATABASE_NAME"],
      "offload": true,
      "csvExportOptions":
       {
           "selectQuery": "SELECT_QUERY",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

La exportación a CSV crea un archivo CSV estándar de forma predeterminada. Si necesitas aún más opciones de las que ofrece Cloud SQL, puedes usar la siguiente instrucción en un cliente psql:

      \copy [table_name] TO '[csv_file_name].csv' WITH
          (FORMAT csv, ESCAPE '[escape_character]', QUOTE '[quote_character]',
          DELIMITER '[delimiter_character]', ENCODING 'UTF8', NULL '[null_marker_string]');

Importar datos en Cloud SQL para PostgreSQL

Roles y permisos necesarios para importar datos a Cloud SQL para PostgreSQL

Para importar datos de Cloud Storage a Cloud SQL, el usuario que inicie la importación debe tener uno de los siguientes roles:

Además, la cuenta de servicio de la instancia de Cloud SQL debe tener uno de los siguientes roles:

  • Rol de gestión de identidades y accesos storage.objectAdmin
  • Un rol personalizado que incluya los siguientes permisos:
    • storage.objects.get
    • storage.objects.list (solo para importar archivos en paralelo)

Para obtener ayuda con los roles de gestión de identidades y accesos, consulta Gestión de identidades y accesos.

Importar datos de un archivo CSV a Cloud SQL para PostgreSQL

Requisitos de formato de archivos CSV

Los archivos CSV deben tener una línea por cada fila de datos y usar campos separados por comas.

Para importar datos a una instancia de Cloud SQL mediante un archivo CSV, haz lo siguiente:

Consola

  1. En la Google Cloud consola, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
  3. Haz clic en Importar.
  4. En la sección Seleccionar archivo de origen, introduce la ruta al archivo CSV y al bucket, o sube un archivo CSV local para usarlo en la importación. Para ir al archivo, sigue estos pasos:
    1. Haz clic en Explorar.
    2. En la sección Ubicación, haz doble clic en el nombre del contenedor de la lista.
    3. Selecciona el archivo de la lista.
    4. Haz clic en Seleccionar.

    Puedes importar un archivo comprimido (.gz) o sin comprimir (.csv).

  5. En la sección Formato, selecciona CSV.
  6. Especifica la base de datos y la tabla de tu instancia de Cloud SQL en las que quieras importar el archivo CSV.
  7. También puedes especificar un usuario para la operación de importación.
  8. Haz clic en Importar para iniciar la importación.

gcloud

  1. Crea un segmento de Cloud Storage.
  2. Sube el archivo al segmento.

    Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.

  3. Sube los datos del archivo CSV al segmento.
  4. Identifica la cuenta de servicio de la instancia de Cloud SQL desde la que vas a exportar los datos. Para ello, ejecuta el comando gcloud sql instances describe con el nombre de la instancia. Busca el campo serviceAccountEmailAddress en el resultado.
    gcloud sql instances describe INSTANCE_NAME
  5. Copia el campo serviceAccountEmailAddress.
  6. Usa gcloud storage buckets add-iam-policy-binding para conceder el storage.objectAdmin rol de gestión de identidades y accesos a la cuenta de servicio de la instancia de Cloud SQL del segmento. Para obtener ayuda con la configuración de los permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  7. Importa el archivo:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

    Para obtener información sobre el uso del comando import csv, consulta la página de referencia del comando sql import csv.

  8. Si no necesitas conservar los permisos de gestión de identidades y accesos que hayas definido anteriormente, quítalos con gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Crea un segmento de Cloud Storage.
  2. Sube el archivo al segmento.

    Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.

  3. Proporciona a tu instancia los roles de legacyBucketWriter y objectViewer gestión de identidades y accesos de tu segmento. Para obtener ayuda sobre cómo definir permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  4. Importa el archivo:

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • bucket_name: nombre del segmento de Cloud Storage
    • path_to_csv_file: la ruta al archivo CSV
    • database_name: nombre de una base de datos de la instancia de Cloud SQL
    • table_name: el nombre de la tabla de la base de datos
    • escape_character: el carácter que debe aparecer antes de un carácter de datos que debe escaparse. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character: carácter que encierra los valores de las columnas que tienen un tipo de datos de cadena. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by: carácter que separa los valores de las columnas. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "2C" representa una coma. (opcional)
    • lines_terminated_by: el carácter que separa los registros de líneas. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "0A" representa una línea nueva. (opcional)

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    Cuerpo JSON de la solicitud:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    Para ver la lista completa de parámetros de la solicitud, consulte la página instances:import.
  5. Si no necesitas conservar los permisos de gestión de identidades y accesos que has definido anteriormente, quítalos.

REST v1beta4

  1. Crea un segmento de Cloud Storage.
  2. Sube el archivo al segmento.

    Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.

  3. Proporcione a su instancia el storage.objectAdmin rol de gestión de identidades y accesos de su segmento. Para obtener ayuda sobre cómo definir permisos de gestión de identidades y accesos, consulta Usar permisos de gestión de identidades y accesos.
  4. Importa el archivo:

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • project-id: el ID del proyecto
    • instance-id: el ID de instancia.
    • bucket_name: nombre del segmento de Cloud Storage
    • path_to_csv_file: la ruta al archivo CSV
    • database_name: nombre de una base de datos de la instancia de Cloud SQL
    • table_name: el nombre de la tabla de la base de datos
    • escape_character: el carácter que debe aparecer antes de un carácter de datos que debe escaparse. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo,"22" representa comillas dobles. (opcional)
    • quote_character: carácter que encierra los valores de las columnas que tienen un tipo de datos de cadena. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by: carácter que separa los valores de las columnas. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "2C" representa una coma. (opcional)
    • lines_terminated_by: el carácter que separa los registros de líneas. El valor de este argumento debe estar en formato hexadecimal ASCII. Por ejemplo, "0A" representa una línea nueva. (opcional)

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    Cuerpo JSON de la solicitud:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    Para ver la lista completa de parámetros de la solicitud, consulte la página instances:import.
  5. Si no necesitas conservar los permisos de gestión de identidades y accesos que has definido anteriormente, quítalos.

Personalizar el formato de un archivo CSV para Cloud SQL para PostgreSQL

Puede usar gcloud o la API REST para personalizar el formato de su archivo CSV.

A continuación, se muestra un ejemplo de comando gcloud:

gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--table=TABLE_NAME \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

El cuerpo de la solicitud de la API REST equivalente sería así:

{
 "importContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "database": ["DATABASE_NAME"],
      "csvImportOptions":
       {
           "table": "TABLE_NAME",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

Si aparece un error como ERROR_RDBMS, comprueba que la tabla exista. Si la tabla existe, comprueba que tienes los permisos correctos en el contenedor. Para obtener ayuda sobre cómo configurar el control de acceso en Cloud Storage, consulta el artículo Crear y gestionar listas de control de acceso.

Para ver cómo se construye la solicitud de la API REST subyacente para esta tarea, consulta el Explorador de APIs en la página instances:import.

Siguientes pasos