En esta página se describe cómo exportar datos de clústeres de AlloyDB para PostgreSQL a un segmento de Cloud Storage en formato CSV, que se puede usar en otras herramientas y entornos.
Para obtener información sobre cómo migrar una base de datos completa desde un servidor de bases de datos compatible a una instancia de AlloyDB nueva, consulta Migrar una base de datos a AlloyDB con Database Migration Service. Si vas a exportar un archivo porque quieres crear una instancia a partir de él, te recomendamos que restaures un clúster a partir de una copia de seguridad almacenada.
Puedes cancelar la exportación de datos de clústeres de AlloyDB para PostgreSQL. Para obtener más información, consulta Cancelar la exportación de datos.
Antes de empezar
- Antes de iniciar una operación de exportación, ten en cuenta que estas operaciones usan recursos de la base de datos, pero no interfieren con las operaciones estándar de la base de datos a menos que la instancia tenga pocos recursos.
SELECT_QUERY
puede contener comentarios o espacios iniciales y finales. Los comentarios se ignoran y los espacios en blanco se eliminan antes de ejecutar la consulta de exportación.- Se aplican cargos por transferencia de datos entre regiones cuando el segmento de destino se encuentra en una región distinta a la del clúster de origen. Para obtener más información, consulta los precios de AlloyDB para PostgreSQL.
- Se pueden ejecutar varias operaciones de exportación en paralelo.
- La compresión se habilita si el nombre del objeto termina con la extensión
.gz
. El objeto se exporta en formato.gz
a Cloud Storage. - Solo se permiten caracteres ASCII en código hexadecimal (con o sin el prefijo
0x
) para los valores de caracteres en las opciones de CSV, comofield_delimiter
,quote_character
yescape_character
.
Roles y permisos necesarios para exportar datos de AlloyDB
Para exportar datos de AlloyDB a Cloud Storage, el usuario que inicie la exportación debe tener uno de los siguientes roles de Identity and Access Management (IAM):
- Rol Administrador de AlloyDB en Cloud
(
roles/alloydb.admin
) - Un rol personalizado,
que incluya los siguientes permisos:
alloydb.clusters.get
alloydb.clusters.export
Además, la cuenta de servicio del clúster de AlloyDB 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.create
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
Durante una exportación CSV, puede especificar los esquemas que quiere exportar. Todos los esquemas a nivel de base de datos se pueden exportar.
Puedes usar la CLI de gcloud o la API REST para personalizar el formato de tu archivo CSV.
gcloud
- Crea un segmento de Cloud Storage.
Concede permisos a la cuenta de servicio para que acceda al segmento de Cloud Storage de la operación de exportación. Usa el formato de cuenta de servicio para identificar la cuenta de servicio del proyecto del que vas a exportar datos. El formato de la cuenta de servicio es el siguiente:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Usa
gcloud storage buckets add-iam-policy-binding
para asignar elstorage.objectAdmin
rol de gestión de identidades y accesos a la cuenta de servicio. 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 a tu segmento de Cloud Storage.
Ejecuta el comando de exportación de CSV:
gcloud alloydb clusters export
.En la siguiente tabla se muestran las opciones para exportar datos en formato CSV:
--select-query
(obligatorio): consulta de selección que se usa para extraer los datos.
--async
(Opcional): devuelve el valor inmediatamente, sin esperar a que se complete la operación en curso.--field-delimiter
(opcional): especifica el carácter que separa las columnas de cada fila (línea) del archivo. El valor predeterminado es una coma. El valor de este argumento debe ser un carácter en código ASCII hexadecimal.--quote-character
(opcional): especifica el carácter de comillas que se debe usar cuando se cita un valor de datos. El valor predeterminado son comillas dobles. El valor de este argumento debe ser un carácter en código ASCII hexadecimal.--escape-character
(Opcional): especifica el carácter que debe aparecer antes de un carácter de datos que deba escaparse. El valor predeterminado es el mismo que--quote-character
. El valor de este argumento debe ser un carácter en código ASCII hexadecimal.
Para usar estas funciones, incluye estas opciones en el comando de gcloud CLI.
De lo contrario, elimina estos parámetros del siguiente comando:
gcloud alloydb clusters export CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" --select-query=SELECT_QUERY --field-delimiter=FIELD_DELIMITER --quote-character=QUOTE_CHARACTER --escape-character=ESCAPE_CHARACTER --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>
Usa el formato de cuenta de servicio para identificar la cuenta de servicio del proyecto del que vas a exportar datos.
El formato de la cuenta de servicio es el siguiente:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Se deben conceder permisos a este para el segmento de Cloud Storage de la operación de exportación.
Usa gcloud storage buckets add-iam-policy-binding para asignar el
storage.objectAdmin
rol de gestión de identidades y accesos a la cuenta de servicio. 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.
Usa el siguiente método HTTP y la siguiente URL:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto.
- REGION: la región en la que se despliega el clúster de AlloyDB.
- CLUSTER_ID: el ID del clúster.
- BUCKET_NAME: el nombre del segmento de Cloud Storage.
- PATH_TO_CSV_FILE: la ruta al archivo CSV.
- DATABASE_NAME: nombre de una base de datos del clúster de AlloyDB.
SELECT_QUERY: la consulta de SQL para la exportación.
ESCAPE_CHARACTER (opcional): el carácter que debe aparecer antes de un carácter de datos que deba escaparse. El valor de este argumento debe ser un carácter en código ASCII hexadecimal. Por ejemplo,
22
representa una comilla doble.QUOTE_CHARACTER (Opcional): el 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.FIELD_DELIMITER (opcional): el 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.
Cuerpo JSON de la solicitud:
{ "gcs_destination": { "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE" }, "database": "DATABASE_NAME", "csv_export_options": { "select_query": "SELECT_QUERY", "escape_character": "ESCAPE_CHARACTER", "quote_character": "QUOTE_CHARACTER", "field_delimiter": "FIELD_DELIMITER" } }
Para enviar tu solicitud, utiliza una de estas opciones:
curl (Linux, macOS o Cloud Shell)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
PowerShell (Windows)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
Recibirás una respuesta JSON similar a la siguiente:
Respuesta
{ "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata", "createTime": "2024-09-17T06:05:31.244428646Z", "target": "projects/PROJECT_ID/locations/REGION/clusters/TARGET_CLUSTER", "verb": "export", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Si no necesitas conservar los permisos de gestión de identidades y accesos que has configurado anteriormente, elimínalos ahora.
Para ver la lista completa de parámetros de la solicitud, consulta clusters:export
.
Personalizar el formato de un archivo CSV exportado
Puedes usar la CLI de gcloud o la API REST para personalizar el formato de tu archivo CSV. Cuando realice una exportación, podrá especificar las siguientes opciones de formato:
Opción CSV |
Valor predeterminado |
gcloud flag |
Propiedad de la API REST |
Descripción |
---|---|---|---|---|
Escape |
El valor predeterminado es el mismo que el valor de QUOTE . |
--escape-character
|
escape_character |
Carácter que aparece antes de un carácter de datos que debe escaparse. |
Cita |
"22" Código hexadecimal ASCII de las comillas dobles. |
--quote-character
|
quote_character |
Especifica el carácter de comillas que se debe usar cuando se incluye entre comillas un valor de datos. |
Delimitador de campos | "2C" Código hexadecimal ASCII de la coma. |
--field-delimiter |
field_delimiter |
Carácter que separa los valores de las columnas. |
Por ejemplo, un comando de la CLI de gcloud que use todos estos argumentos podría ser similar al siguiente:
gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C'
--csv
El cuerpo de la solicitud de la API REST equivalente tiene un aspecto similar al siguiente:
{
"exportContext":
{
"gcs_destination": {
"uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
},
"database": "DATABASE_NAME",
"csv_export_options":
{
"select_query": "SELECT_QUERY",
"escape_character": "5C",
"quote_character": "22",
"field_delimiter": "2C",
}
}
}
De forma predeterminada, la exportación a CSV crea un archivo CSV estándar. Si necesitas más opciones que las que ofrece AlloyDB, puedes usar la siguiente instrucción en un psql
cliente:
\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');