Esportare un file CSV

Questa pagina descrive come esportare i dati dai cluster AlloyDB per PostgreSQL a un bucket Cloud Storage in formato CSV, che è utilizzabile da altri strumenti e ambienti.

Per informazioni su come eseguire la migrazione di un intero database da un database supportato a una nuova istanza AlloyDB, consulta Eseguire la migrazione di un database ad AlloyDB utilizzando Database Migration Service. Se esegui l'esportazione perché vuoi creare una nuova istanza dal file esportato, ti consigliamo di ripristinare un cluster da un backup archiviato.

Puoi annullare l'esportazione dei dati dai cluster AlloyDB per PostgreSQL. Per ulteriori informazioni, consulta Annullare l'esportazione dei dati.

Prima di iniziare

  • Prima di iniziare un'operazione di esportazione, tieni presente che le operazioni di esportazione utilizzano le risorse del database, ma non interferiscono con le operazioni di database standard, a meno che l'istanza non sia sottodimensionata.
  • SELECT_QUERY può contenere commenti o spazi iniziali e finali. I commenti vengono ignorati e gli spazi bianchi vengono eliminati prima di eseguire la query di esportazione.
  • I costi di trasferimento dati tra regioni si applicano quando il bucket di destinazione si trova in una regione diversa rispetto al cluster di origine. Per ulteriori informazioni, consulta Prezzi di AlloyDB per PostgreSQL.
  • È possibile eseguire più operazioni di esportazione in parallelo.
  • La compressione è attivata se il nome dell'oggetto termina con l'estensione .gz. L'oggetto viene poi esportato in formato .gz in Cloud Storage.
  • Per i valori carattere nelle opzioni CSV come field_delimiter, quote_character e escape_character sono consentiti solo caratteri ASCII in codice esadecimale (con o senza il prefisso 0x).

Ruoli e autorizzazioni richiesti per l'esportazione da AlloyDB

Per esportare i dati da AlloyDB in Cloud Storage, l'utente che avvia l'esportazione deve disporre di uno dei seguenti ruoli IAM (Identity and Access Management):

Inoltre, l'account di servizio per il cluster AlloyDB deve avere uno dei seguenti ruoli:

  • Il ruolo IAM storage.objectAdmin
  • Un ruolo personalizzato, che include le seguenti autorizzazioni:
    • storage.objects.create

Per assistenza sui ruoli IAM, consulta Identity and Access Management.

Esportazione di dati in un file CSV

Durante un'esportazione in formato CSV, puoi specificare gli schemi da esportare. Tutti gli schemi a livello di database sono idonei per l'esportazione.

Puoi utilizzare l'interfaccia a riga di comando gcloud o l'API REST per personalizzare il formato del file CSV.

gcloud

  1. Crea un bucket Cloud Storage.
  2. Concedi le autorizzazioni dell'account di servizio al bucket Cloud Storage per l'operazione di esportazione. Utilizza il formato dell'account di servizio per identificare l'account di servizio del progetto da cui stai eseguendo l'esportazione. Il formato dell'account di servizio è il seguente:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM all'account di servizio. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzare le autorizzazioni IAM.

  4. Esporta il database nel tuo bucket Cloud Storage.

    Esegui il comando di esportazione CSV: TODOgcloud alloydb clusters export.

    La tabella seguente elenca le opzioni per l'esportazione dei dati in formato CSV:

    • --select-query (obbligatorio): la query di selezione utilizzata per estrarre i dati.
    • --async (Facoltativo): torna immediatamente senza attendere il completamento dell'operazione in corso.
    • --field-delimiter (facoltativo): specifica il carattere che separa le colonne in ogni riga del file. Il valore predefinito è una virgola. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale.
    • --quote-character (facoltativo): specifica il carattere di virgolette da utilizzare quando un valore di dato è tra virgolette. Il valore predefinito è una virgoletta doppia. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale.
    • --escape-character (facoltativo): specifica il carattere che deve comparire prima di un carattere di dati che deve essere sottoposto a evocazione. Il valore predefinito è uguale a --quote-character. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale.

    Per utilizzare queste funzionalità, includi queste opzioni nel comando gcloud CLI.

    In caso contrario, rimuovi questi parametri dal seguente 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. Se non devi conservare il ruolo IAM impostato in precedenza, revocarlo ora.

REST v1

  1. Crea un bucket per l'esportazione:

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
  2. Utilizza il formato dell'account di servizio per identificare l'account di servizio del progetto da cui stai eseguendo l'esportazione.

    Il formato dell'account di servizio è il seguente:

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

    A questo servizio devono essere concesse le autorizzazioni per il bucket Cloud Storage per l'operazione di esportazione.

  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM all'account di servizio. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzare le autorizzazioni IAM.

  4. Esporta il database.

    Utilizza il seguente metodo e URL HTTP:

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

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: l'ID progetto.
    • REGION: la regione in cui è dipiegato il cluster AlloyDB.
    • CLUSTER_ID: l'ID cluster.
    • BUCKET_NAME: il nome del bucket Cloud Storage.
    • PATH_TO_CSV_FILE: il percorso del file CSV.
    • DATABASE_NAME: il nome di un database all'interno del cluster AlloyDB.
    • SELECT_QUERY: la query SQL per l'esportazione.

    • ESCAPE_CHARACTER (facoltativo): il carattere che deve comparire prima di un carattere di dati che deve essere eseguito l'escape. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale. Ad esempio, 22 rappresenta un apice.

    • QUOTE_CHARACTER (facoltativo): il carattere che racchiude i valori delle colonne con un tipo di dati stringa. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale. Ad esempio, 22 rappresenta un apice.

    • FIELD_DELIMITER (facoltativo): il carattere che suddivide i valori delle colonne. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale. Ad esempio, 2C rappresenta una virgola.

    Corpo JSON della richiesta:

    {
      "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"
      }
    }
    

    Per inviare la richiesta, utilizza una delle seguenti opzioni:

curl (Linux, macOS o Cloud Shell)

Salva il corpo della richiesta in un file denominato request.json quindi esegui il comando seguente:

       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)

Salva il corpo della richiesta in un file denominato request.json esegui il seguente 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
  

Riceverai una risposta JSON simile alla seguente:

Risposta

    {
     "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
    }
  

Se non devi conservare le autorizzazioni IAM impostate in precedenza, rimuovile ora.

Per l'elenco completo dei parametri per la richiesta, consulta clusters:export.

Personalizzare il formato di un file di esportazione CSV

Puoi utilizzare l'interfaccia a riga di comando gcloud o l'API REST per personalizzare il formato del file CSV. Quando esegui un'esportazione, puoi specificare le seguenti opzioni di formattazione:


Opzione CSV

Valore predefinito

Flag gcloud

Proprietà API REST

Descrizione

Fuga

Il valore predefinito è uguale al valore QUOTE.
--escape-character escape_character Carattere visualizzato prima di un carattere di dati che deve essere sottoposto a sfuggita.

Preventivo
"22"
Codice esadecimale ASCII per le virgolette doppie.
--quote-character quote_character Specifica il carattere di virgolette da utilizzare quando un valore di dato è tra virgolette.
Delimitatore di campo "2C"
Codice esadecimale ASCII per la virgola.
--field-delimiter field_delimiter Carattere che suddivide i valori della colonna.

Ad esempio, un comando gcloud CLI che utilizza tutti questi argomenti potrebbe essere simile al seguente:

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

Il corpo della richiesta dell'API REST equivalente è simile al seguente:

{
 "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",
       }
   }
}

Per impostazione predefinita, l'esportazione in formato CSV crea un output CSV standard. Se hai bisogno di più opzioni rispetto a quelle fornite da AlloyDB, puoi utilizzare la seguente dichiarazione in un client 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');

Passaggi successivi