Cómo exportar un archivo CSV

En esta página, se describe cómo exportar datos de clústeres de AlloyDB para PostgreSQL a un bucket de Cloud Storage en formato CSV, que otras herramientas y otros entornos pueden usar.

Para obtener información sobre cómo migrar una base de datos completa desde un servidor de base de datos compatible a una instancia nueva de AlloyDB, consulta Cómo migrar una base de datos a AlloyDB con Database Migration Service. Si exportas porque quieres crear una instancia nueva desde el archivo exportado, considera restablecer un clúster desde una copia de seguridad almacenada.

Puedes cancelar la exportación de datos de los clústeres de AlloyDB para PostgreSQL. Para obtener más información, consulta Cómo cancelar la exportación de datos.

Antes de comenzar

  • Antes de comenzar una operación de exportación, ten en cuenta que las operaciones de exportación usan recursos de bases de datos, pero no interfieren en las operaciones estándar de bases de datos, a menos que la instancia no cuente con el aprovisionamiento suficiente.
  • SELECT_QUERY puede contener comentarios o espacios en blanco iniciales y finales. Los comentarios se ignoran y los espacios en blanco se quitan antes de ejecutar la consulta de exportación.
  • Los cargos por transferencia de datos entre regiones se aplican cuando el bucket 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. Luego, 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 opciones de CSV, como field_delimiter, quote_character y escape_character.

Roles y permisos necesarios para exportar desde AlloyDB

Para exportar datos de AlloyDB a Cloud Storage, el usuario que inicia la exportación debe tener uno de los siguientes roles de Identity and Access Management (IAM):

Además, la cuenta de servicio del clúster de AlloyDB debe tener uno de los siguientes roles:

  • El rol de IAM storage.objectAdmin
  • Un rol personalizado que incluya los siguientes permisos:
    • storage.objects.create

Si deseas obtener ayuda con los roles de IAM, consulta Administración de identidades y accesos.

Exportar datos a un archivo CSV

Durante una exportación de CSV, puedes especificar los esquemas que se exportarán. Todos los esquemas en el nivel de la base de datos son aptos para la exportación.

Puedes usar gcloud CLI o la API de REST para personalizar el formato de archivo CSV.

gcloud

  1. Crea buckets de Cloud Storage.
  2. Otorga permisos a la cuenta de servicio para el bucket de Cloud Storage para la operación de exportación. Usa el formato de cuenta de servicio para identificar la cuenta de servicio del proyecto desde el que exportas. El formato de la cuenta de servicio es el siguiente:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  3. Usa gcloud storage buckets add-iam-policy-binding para otorgar el rol de IAM storage.objectAdmin a la cuenta de servicio. Para obtener ayuda con la configuración de permisos de IAM, consulta Usa permisos de IAM.

  4. Exporta la base de datos a tu bucket de Cloud Storage.

    Ejecuta el comando de exportación de CSV: TODOgcloud alloydb clusters export.

    En la siguiente tabla, se enumeran las opciones para exportar datos en formato CSV:

    • --select-query (obligatorio): Es la consulta de selección que se usa para extraer los datos.
    • --async (opcional): Se muestra de inmediato, sin necesidad de esperar a que se complete la operación en curso.
    • --field-delimiter (opcional): Especifica el carácter que separa las columnas en 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 usará cuando se entrecomille un valor de datos. El valor predeterminado es una comilla doble. 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 se debe escapar. 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, quita 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
  5. Si no necesitas retener el rol de IAM que configuraste antes, revócalo ahora.

REST v1

  1. Crea un bucket para la exportación:

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
  2. Usa el formato de cuenta de servicio para identificar la cuenta de servicio del proyecto desde el que exportas.

    El formato de la cuenta de servicio es el siguiente:

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Se deben otorgar permisos al bucket de Cloud Storage para la operación de exportación.

  3. Usa gcloud storage buckets add-iam-policy-binding para otorgar el storage.objectAdmin rol de IAM a la cuenta de servicio. Para obtener ayuda con la configuración de permisos de IAM, consulta Usa permisos de IAM.

  4. Exporta tu base de datos.

    Usa el siguiente método y URL HTTP:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

    Antes de usar cualquiera de los datos de solicitud, realiza los siguientes reemplazos:

    • PROJECT_ID: El ID del proyecto.
    • REGION: Es la región en la que se implementa el clúster de AlloyDB.
    • CLUSTER_ID: El ID del clúster.
    • BUCKET_NAME: el nombre del bucket de Cloud Storage.
    • PATH_TO_CSV_FILE: Es la ruta de acceso al archivo CSV.
    • DATABASE_NAME: Es el nombre de una base de datos dentro del clúster de AlloyDB.
    • SELECT_QUERY: Es la consulta en SQL para la exportación.

    • ESCAPE_CHARACTER (opcional): Es 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.

    • QUOTE_CHARACTER (opcional): Es el carácter que encierra valores de 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): Es el carácter que divide los valores de la columna. El valor de este argumento debe ser un carácter en el 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, usa 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 IAM que configuraste antes, quítalos ahora.

Si quieres obtener la lista completa de los parámetros de esta solicitud, consulta clusters:export.

Personaliza el formato de un archivo de exportación CSV

Puedes usar gcloud CLI o la API de REST para personalizar el formato de archivo CSV. Cuando realizas una exportación, puedes especificar las siguientes opciones de formato:


Opción CSV

Valor predeterminado

Marca de gcloud

Propiedad de la API de 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 se debe escapar.

Cotización
"22"
Código hexadecimal ASCII para comillas dobles.
--quote-character quote_character Especifica el carácter de comillas que se usará cuando se incluyan comillas en un valor de datos.
Delimitador de campos "2C"
Código hexadecimal ASCII para coma.
--field-delimiter field_delimiter Carácter que divide los valores de la columna.

Por ejemplo, un comando de gcloud CLI 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 a la API de REST equivalente se vería 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 una salida CSV estándar. Si necesitas más opciones que las que proporciona AlloyDB, puedes usar la siguiente sentencia 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');

¿Qué sigue?