Esportare un file CSV

Per estrarre i dati di tabelle o query da utilizzare in strumenti e ambienti esterni, puoi esportare i dati dai cluster AlloyDB per PostgreSQL in un bucket Cloud Storage in formato CSV.

Per informazioni sulla migrazione di un intero database da un server di database supportato a una nuova istanza AlloyDB, consulta Esegui la migrazione di un database ad AlloyDB utilizzando Database Migration Service. Se stai eseguendo l'esportazione perché vuoi creare una nuova istanza dal file esportato, valuta la possibilità di ripristinare un cluster da un backup archiviato.

Puoi annullare l'esportazione dei dati dai cluster AlloyDB per PostgreSQL. Per saperne di più, consulta Annulla un'operazione di esportazione.

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 standard del database, a meno che l'istanza non sia sottoposta a provisioning insufficiente.
  • SELECT_QUERY può contenere commenti o spazi vuoti iniziali e finali. I commenti vengono ignorati e gli spazi vuoti vengono rimossi prima di eseguire la query di esportazione.
  • I costi di trasferimento di 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 è abilitata se il nome dell'oggetto termina con l'estensione .gz. L'oggetto viene quindi esportato in formato .gz in Cloud Storage.
  • Per i valori dei caratteri 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 Identity and Access Management (IAM):

Inoltre, il account di servizio del cluster AlloyDB deve avere uno dei seguenti ruoli:

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

Per assistenza con i 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 gcloud CLI o l'API REST per personalizzare il formato file CSV.

gcloud

  1. Crea un bucket Cloud Storage.
  2. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il ruolo IAM storage.objectAdmin al account di servizio AlloyDB per il bucket. Il formato del account di servizio è il seguente:

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

    Per assistenza sulla configurazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.

  3. Esporta il database nel bucket Cloud Storage.

    Esegui il comando di esportazione in CSV: gcloud alloydb clusters export.

    Il seguente elenco descrive le opzioni per l'esportazione dei dati in formato CSV:

    • --select-query (obbligatorio): la query di selezione utilizzata per estrarre i dati.
    • --async (facoltativo): termina 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 dei dati è racchiuso tra virgolette. Il valore predefinito sono le virgolette doppie. Il valore di questo argomento deve essere un carattere in codice ASCII esadecimale.
    • --escape-character (facoltativo): specifica il carattere che deve apparire prima di un carattere di dati di cui deve essere eseguito l'escape. Il valore predefinito è lo stesso di --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
  4. Se non hai bisogno di conservare il ruolo IAM impostato in precedenza, revocalo.

REST v1

  1. Crea un bucket per l'esportazione:

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
  2. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM al account di servizio AlloyDB per il bucket. Il formato del account di servizio è il seguente:

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

    Per assistenza sulla configurazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.

  3. Esporta il database.

    Utilizza il seguente metodo HTTP e URL:

    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 è stato eseguito il deployment del 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 apparire prima di un carattere di dati di cui deve essere eseguito l'escape. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, 22 rappresenta le virgolette doppie.

    • 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 le virgolette doppie.

    • FIELD_DELIMITER (facoltativo): il carattere che suddivide i valori delle colonne. Il valore di questo argomento deve essere un carattere nel 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 di queste opzioni:

curl (Linux, macOS o Cloud Shell)

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

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

Ricevi 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 hai bisogno di conservare le autorizzazioni IAM impostate in precedenza, rimuovile.

Per l'elenco completo dei parametri della richiesta, consulta clusters.export.

Personalizza il formato di un file di esportazione CSV

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

Opzione CSV Valore predefinito gcloud flag Proprietà API REST Descrizione
Esc Il valore predefinito è lo stesso del valore QUOTE. --escape-character escape_character Carattere che appare prima di un carattere di dati di cui deve essere eseguito l'escape.
Citazione "22"
Codice esadecimale ASCII per le virgolette doppie.
--quote-character quote_character Specifica il carattere di citazione da utilizzare quando un valore dei dati è tra virgolette.
Delimitatore di campo "2C"
Codice esadecimale ASCII per la virgola.
--field-delimiter field_delimiter Carattere che suddivide i valori delle colonne.

Utilizza i seguenti esempi di gcloud CLI e API REST per personalizzare il formato file di esportazione CSV:

gcloud

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

REST v1

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

{
  "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 CSV crea un output CSV standard. Se hai bisogno di più opzioni rispetto a quelle fornite da AlloyDB, puoi utilizzare la seguente istruzione 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