Exportar e importar mediante archivos CSV

Esta página describe cómo exportar e importar datos a instancias de Cloud SQL mediante archivos CSV.

Antes de empezar

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

  • Asegúrese de que su base de datos tenga suficiente espacio libre.
  • Las operaciones de exportación e importación utilizan recursos de la base de datos, pero no interfieren con las operaciones normales de la base de datos a menos que la instancia tenga un suministro insuficiente.

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

Exportar datos de Cloud SQL para PostgreSQL

Roles y permisos necesarios para exportar desde Cloud SQL para PostgreSQL

Para exportar datos de Cloud SQL a Cloud Storage, el usuario que inicia 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:

  • La función de administración de identidades y accesos (IAM) storage.objectAdmin
  • Un rol personalizado, que incluye 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 IAM, consulte Administración de identidad y acceso .

Exportar datos a un archivo CSV desde Cloud SQL para PostgreSQL

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

Para exportar datos de una base de datos en una instancia de Cloud SQL a un archivo CSV en un depósito de Cloud Storage:

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Exportar .
  4. Seleccione Descargar 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, agregue el nombre del depósito, la carpeta y el archivo que desea exportar, o haga clic en Explorar para buscar o crear un depósito, una carpeta o un archivo.

    Si hace clic en Explorar :

    1. En la sección Ubicación , seleccione un depósito o carpeta de almacenamiento en la nube para su exportación.
    2. En el cuadro Nombre , agregue un nombre para el archivo CSV o seleccione un archivo existente de la lista en la sección Ubicación .

      Puede utilizar una extensión de archivo .gz (la extensión completa sería .csv.gz ) para comprimir su archivo de exportación.

    3. Haga clic en Seleccionar .
  6. En la sección Formato , haga 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. Para la consulta SQL , ingrese una consulta SQL para especificar la tabla desde la cual exportar datos.

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

    SELECT * FROM guestbook.entries;
    Su consulta debe especificar una tabla en la base de datos especificada. No se puede exportar una base de datos completa en formato CSV.

  9. Haga clic en Exportar para iniciar la exportación.
  10. Se abre el cuadro "¿ 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 grandes. Durante la exportación, la única operación que puede realizar en la instancia es ver información. Una vez iniciada la exportación, puede cancelarla . Si es un buen momento para iniciar una exportación, haga clic en Exportar . De lo contrario, haga clic en Cancelar .

nube g

  1. Crear un depósito de almacenamiento en la nube.
  2. Sube el archivo a tu bucket.

    Para obtener ayuda con la carga de archivos a los depósitos, consulte Cargar objetos .

  3. Busca la cuenta de servicio de la instancia de Cloud SQL desde la que estás exportando. Puedes hacerlo ejecutando el comando gcloud sql instances describe . Busca el campo serviceAccountEmailAddress en la salida.
    gcloud sql instances describe INSTANCE_NAME
  4. Use gcloud storage buckets add-iam-policy-binding para otorgar el rol de IAM storage.objectAdmin a la cuenta de servicio de la instancia de Cloud SQL. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  5. Exportar 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 , consulte la página de referencia del comando sql export csv .

  6. Si no necesita conservar la función de IAM que configuró anteriormente, revocarla ahora.

REST versión 1

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

    Este paso no es obligatorio, pero es muy recomendable, para no abrir el acceso a ningún otro dato.

  2. Asigne a su instancia el rol de IAM legacyBucketWriter para su bucket. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  3. Exportar su base de datos:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • bucket_name : El nombre del depósito de almacenamiento en la nube
    • path_to_csv_file : La ruta al archivo CSV
    • database_name : El nombre de una base de datos dentro de la instancia de Cloud SQL
    • offload : Habilita la exportación sin servidor. Establézcalo en true para usar la exportación sin servidor.
    • select_query : consulta SQL para exportación (opcional)
    • escape_character : El carácter que debe aparecer antes de un carácter de datos que se debe escapar. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character : El carácter que encierra los valores de las columnas de tipo 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 : El carácter que divide 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 divide los registros de línea. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "0A" representa una nueva línea. (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 su solicitud, expanda una de estas opciones:

    Debería 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 necesita conservar los permisos de IAM que configuró anteriormente, elimínelos ahora.
Para obtener la lista completa de parámetros para la solicitud, consulte la página instancias:export .

REST v1beta4

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

    Este paso no es obligatorio, pero es muy recomendable, para no abrir el acceso a ningún otro dato.

  2. Asigne a su instancia el rol de IAM storage.objectAdmin para su bucket. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  3. Exportar su base de datos:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • bucket_name : El nombre del depósito de almacenamiento en la nube
    • path_to_csv_file : La ruta al archivo CSV
    • database_name : El nombre de una base de datos dentro de la instancia de Cloud SQL
    • offload : Habilita la exportación sin servidor. Establézcalo en true para usar la exportación sin servidor.
    • select_query : consulta SQL para exportación (opcional)
    • escape_character : El carácter que debe aparecer antes de un carácter de datos que se debe escapar. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character : El carácter que encierra los valores de las columnas de tipo cadena. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by : El carácter que divide 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 divide los registros de línea. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "0A" representa una nueva línea. (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 su solicitud, expanda una de estas opciones:

    Debería 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 necesita conservar la función de IAM que configuró anteriormente, revocarla ahora.
Para obtener la lista completa de parámetros para la solicitud, consulte la página instancias:export .

Personalizar el formato de un archivo de exportación CSV

Puedes usar gcloud o la API REST para personalizar el formato de tu archivo CSV. Al exportar, puedes especificar las siguientes opciones de formato:

Opción CSV Valor predeterminado bandera de gcloud Propiedad de la API REST Descripción
Escapar

"5C"

Código hexadecimal ASCII para separador de archivos.

--escape escapeCharacter

Carácter que aparece antes de un carácter de datos que necesita ser escapado.

Disponible sólo para MySQL y PostgreSQL.

Cita

"22"

Código hexadecimal ASCII para comillas dobles.

--quote quoteCharacter

Carácter que encierra valores de columnas que tienen un tipo de datos de cadena.

Disponible sólo para MySQL y PostgreSQL.

Delimitador de campo

"2C"

Código hexadecimal ASCII para coma.

--fields-terminated-by fieldsTerminatedBy

Carácter que divide los valores de las columnas.

Disponible sólo para MySQL y PostgreSQL.

Carácter de nueva línea

"0A"

Código hexadecimal ASCII para nueva línea.

--lines-terminated-by linesTerminatedBy

Carácter que divide registros de línea.

Disponible sólo para MySQL.

Por ejemplo, un comando gcloud que utilice 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 API REST equivalente se verí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 CSV crea una salida CSV estándar por defecto. Si necesita más opciones que las que ofrece Cloud SQL, puede 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 a Cloud SQL para PostgreSQL

Roles y permisos necesarios para importar a Cloud SQL para PostgreSQL

Para importar datos de Cloud Storage a Cloud SQL, el usuario que inicia 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:

  • La función de IAM storage.objectAdmin
  • Un rol personalizado, que incluye los siguientes permisos:
    • storage.objects.get
    • storage.objects.list (solo para importar archivos en paralelo)

Para obtener ayuda con los roles de IAM, consulte Administración de identidad y acceso .

Importar datos desde un archivo CSV a Cloud SQL para PostgreSQL

Requisitos del formato de archivo CSV

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

Para importar datos a una instancia de Cloud SQL mediante un archivo CSV:

Consola

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

    Ir a Instancias de Cloud SQL

  2. Para abrir la página Descripción general de una instancia, haga clic en el nombre de la instancia.
  3. Haga clic en Importar .
  4. En la sección "Elija el archivo del que desea importar datos" , introduzca la ruta del depósito y el archivo CSV que se usará para la importación. O bien, para buscar el archivo:
    1. Haga clic en Explorar .
    2. En la sección Ubicación , haga doble clic en el nombre del depósito en la lista.
    3. Seleccione el archivo en la lista.
    4. Haga clic en Seleccionar .

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

  5. En la sección Formato , seleccione CSV .
  6. Especifique la base de datos y la tabla en su instancia de Cloud SQL donde desea importar el archivo CSV.
  7. Opcionalmente, puede especificar un usuario para la operación de importación.
  8. Haga clic en Importar para iniciar la importación.

nube g

  1. Crear un depósito de almacenamiento en la nube.
  2. Sube el archivo a tu bucket.

    Para obtener ayuda con la carga de archivos a los depósitos, consulte Cargar objetos .

  3. Subir datos del archivo CSV al depósito.
  4. Identifique la cuenta de servicio de la instancia de Cloud SQL desde la que va a exportar. Puede hacerlo ejecutando el comando gcloud sql instances describe con el nombre de la instancia. Busque el campo serviceAccountEmailAddress en la salida.
    gcloud sql instances describe INSTANCE_NAME
  5. Copie el campo serviceAccountEmailAddress.
  6. Use gcloud storage buckets add-iam-policy-binding para otorgar el rol de IAM storage.objectAdmin a la cuenta de servicio de la instancia de Cloud SQL del bucket. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  7. Importar 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 , consulte la página de referencia del comando sql import csv .

  8. Si no necesita conservar los permisos de IAM que configuró anteriormente, elimínelos utilizando gcloud storage buckets remove-iam-policy-binding .

REST versión 1

  1. Crear un depósito de almacenamiento en la nube.
  2. Sube el archivo a tu bucket.

    Para obtener ayuda con la carga de archivos a los depósitos, consulte Cargar objetos .

  3. Proporcione a su instancia los roles de IAM legacyBucketWriter y objectViewer para su bucket. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  4. Importar el archivo:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • bucket_name : El nombre del depósito de almacenamiento en la nube
    • path_to_csv_file : La ruta al archivo CSV
    • database_name : El nombre de una base de datos dentro 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 se debe escapar. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character : El carácter que encierra los valores de las columnas de tipo 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 : El carácter que divide 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 divide los registros de línea. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo, "0A" representa una nueva línea. (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 su solicitud, expanda una de estas opciones:

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

    Para obtener la lista completa de parámetros para la solicitud, consulte la página instancias:import .
  5. Si no necesita conservar los permisos de IAM que configuró anteriormente, elimine los permisos.

REST v1beta4

  1. Crear un depósito de almacenamiento en la nube.
  2. Sube el archivo a tu bucket.

    Para obtener ayuda con la carga de archivos a los depósitos, consulte Cargar objetos .

  3. Asigne a su instancia el rol de IAM storage.objectAdmin para su bucket. Para obtener ayuda con la configuración de permisos de IAM, consulte Uso de permisos de IAM .
  4. Importar el archivo:

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • project-id : El ID del proyecto
    • instance-id : El ID de la instancia
    • bucket_name : El nombre del depósito de almacenamiento en la nube
    • path_to_csv_file : La ruta al archivo CSV
    • database_name : El nombre de una base de datos dentro 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 se debe escapar. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "22" representa comillas dobles. (opcional)
    • quote_character : El carácter que encierra los valores de las columnas de tipo cadena. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "22" representa comillas dobles. (opcional)
    • fields_terminated_by : El carácter que divide 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 divide los registros de línea. El valor de este argumento debe estar en formato hexadecimal ASCII . Por ejemplo, "0A" representa una nueva línea. (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 su solicitud, expanda una de estas opciones:

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

    Para obtener la lista completa de parámetros para la solicitud, consulte la página instancias:import .
  5. Si no necesita conservar los permisos de IAM que configuró anteriormente, elimine los permisos.

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

Puede utilizar gcloud o la API REST para personalizar su formato de 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 API REST equivalente se verí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 recibe un error como ERROR_RDBMS , asegúrese de que la tabla exista. Si la tabla existe, confirme que tiene los permisos correctos en el bucket. Para obtener ayuda sobre cómo configurar el control de acceso en Cloud Storage, consulte Crear y administrar listas de control de acceso .

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

¿Qué sigue?