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.
- 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.
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.
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:
- El rol Editor de Cloud SQL
- Un rol personalizado,
que incluya los siguientes permisos:
cloudsql.instances.get
cloudsql.instances.export
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
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
- Haz clic en Exportar.
- Selecciona Delegar exportación para permitir que se realicen otras operaciones mientras la exportación está en curso.
-
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:
- En la sección Ubicación, selecciona un segmento o una carpeta de Cloud Storage para la exportación.
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.- Haz clic en Seleccionar.
- En la sección Formato, haz clic en CSV.
- En la sección Base de datos para exportar, seleccione el nombre de la base de datos en el menú desplegable.
-
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 datosguestbook
, introduce Tu consulta debe especificar una tabla en la base de datos indicada. No puedes exportar una base de datos completa en formato CSV.SELECT * FROM guestbook.entries;
- Haz clic en Exportar para iniciar la exportación.
- 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
- Crea un segmento de Cloud Storage.
Sube el archivo al segmento.
Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.
- 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 camposerviceAccountEmailAddress
en el resultado.gcloud sql instances describe INSTANCE_NAME
- Usa
gcloud storage buckets add-iam-policy-binding
para conceder elstorage.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. - 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 comandosql export csv
. - Si no necesitas conservar el rol de gestión de identidades y accesos que has definido anteriormente, revócalo ahora.
REST v1
- 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.
- 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. -
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. - Si no necesitas conservar los permisos de gestión de identidades y accesos que has definido anteriormente, elimínalos ahora.
REST v1beta4
- 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.
- 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. -
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. - Si no necesitas conservar el rol de gestión de identidades y accesos que has definido anteriormente, revócalo ahora.
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 |
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 |
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 |
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 |
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:
- El rol Administrador de Cloud SQL
- Un rol personalizado,
que incluya los siguientes permisos:
cloudsql.instances.get
cloudsql.instances.import
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
- La base de datos y la tabla en las que vas a importar los datos deben existir en tu instancia de Cloud SQL. Para obtener ayuda sobre cómo crear una base de datos, consulta el artículo Crear una base de datos.
- El archivo CSV debe cumplir los requisitos de formato de archivo CSV.
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
-
En la Google Cloud consola, ve a la página Instancias de Cloud SQL.
- Para abrir la página Overview (Resumen) de una instancia, haz clic en su nombre.
- Haz clic en Importar.
- 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:
- Haz clic en Explorar.
- En la sección Ubicación, haz doble clic en el nombre del contenedor de la lista.
- Selecciona el archivo de la lista.
- Haz clic en Seleccionar.
Puedes importar un archivo comprimido (
.gz
) o sin comprimir (.csv
). - En la sección Formato, selecciona CSV.
- Especifica la base de datos y la tabla de tu instancia de Cloud SQL en las que quieras importar el archivo CSV.
- También puedes especificar un usuario para la operación de importación.
- Haz clic en Importar para iniciar la importación.
gcloud
- Crea un segmento de Cloud Storage.
Sube el archivo al segmento.
Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.
- Sube los datos del archivo CSV al segmento.
- 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 camposerviceAccountEmailAddress
en el resultado.gcloud sql instances describe INSTANCE_NAME
- Copia el campo serviceAccountEmailAddress.
- Usa
gcloud storage buckets add-iam-policy-binding
para conceder elstorage.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. - 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 comandosql import csv
. - 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
- Crea un segmento de Cloud Storage.
Sube el archivo al segmento.
Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.
- Proporciona a tu instancia los roles de
legacyBucketWriter
yobjectViewer
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. - 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. - Si no necesitas conservar los permisos de gestión de identidades y accesos que has definido anteriormente, quítalos.
REST v1beta4
- Crea un segmento de Cloud Storage.
Sube el archivo al segmento.
Para obtener ayuda sobre cómo subir archivos a los contenedores, consulta el artículo Subir objetos.
- 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. - 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. - 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.
Siguientes pasos
- Obtén más información sobre cómo comprobar el estado de las operaciones de importación y exportación.
- Consulta más información sobre las prácticas recomendadas para importar y exportar datos.
- Problemas conocidos de importación y exportación