Importazione di un file CSV

Questa pagina descrive come importare i dati da un file CSV archiviato in un bucket Cloud Storage in un cluster AlloyDB per PostgreSQL.

Puoi annullare l'importazione dei dati nei cluster AlloyDB. Per ulteriori informazioni, vedi Annullare un'operazione di importazione.

Prima di iniziare

Prima di iniziare un'operazione di importazione:

  • Assicurati che il database disponga di spazio libero sufficiente.
  • Le operazioni di importazione utilizzano le risorse del database, ma non interferiscono con le normali operazioni del database, a meno che il cluster non sia sottoposto a provisioning insufficiente.

Ruoli e autorizzazioni richiesti per l'importazione nei cluster AlloyDB

Per importare i dati da Cloud Storage in AlloyDB, l'utente che avvia l'importazione deve disporre di uno dei seguenti ruoli:

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

  • Ruolo IAM storage.objectViewer
  • Un ruolo personalizzato, incluse le seguenti autorizzazioni:
    • storage.objects.get

Per assistenza con i ruoli IAM, consulta Identity and Access Management.

Importare dati da un file CSV nei cluster AlloyDB

  • Il database e la tabella in cui esegui l'importazione devono esistere nel tuo cluster AlloyDB. Per assistenza nella creazione di un database, vedi Creare un database.
  • I file CSV devono avere una riga per ogni riga di dati e utilizzare campi separati da virgole.

Per importare dati in un cluster AlloyDB utilizzando un file CSV, segui questi passaggi:

gcloud

  1. Crea un bucket Cloud Storage.
  2. Carica il file CSV nel bucket. Per assistenza con il caricamento di file nei bucket, consulta Caricamento di oggetti.
  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectViewer ruolo IAM al account di servizio AlloyDB per il bucket.

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

    Per assistenza con la configurazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.

  4. Importa il file:

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --gcs-uri=gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --user=USER --csv --table=TABLE_NAME

    Effettua le seguenti sostituzioni:

    • CLUSTER_NAME: il nome del cluster.
    • REGION: la regione in cui è stato eseguito il deployment del cluster AlloyDB.
    • BUCKET_NAME: il nome del bucket Cloud Storage.
    • FILE_NAME: il nome del file CSV.
    • DATABASE_NAME: il nome di un database all'interno del cluster.
    • USER: l'utente per l'operazione di importazione.
    • TABLE_NAME: la tabella all'interno del database.

    Per saperne di più sull'utilizzo del comando import, consulta la pagina di riferimento del comando alloydb import.

  5. Se non hai bisogno di conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile utilizzando gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Crea un bucket Cloud Storage.
  2. Carica il file CSV nel bucket. Per assistenza con il caricamento di file nei bucket, consulta Caricamento di oggetti.
  3. Concedi al account di servizio le autorizzazioni per il bucket Cloud Storage per l'operazione di importazione. Utilizza il formato del account di servizio per identificare il account di servizio per il progetto in cui stai importando. Il formato del account di servizio è il seguente:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectViewer ruolo IAM al account di servizio del cluster AlloyDB per il bucket. Per assistenza per l'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.

  5. Importa il file.

    Utilizza il seguente metodo HTTP e URL:

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

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

    • PROJECT_ID: l'ID progetto
    • LOCATION_ID: 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.
    • USER: l'utente per l'operazione di importazione.
    • DATABASE_NAME: il nome di un database all'interno del cluster AlloyDB.
    • TABLE_NAME: la tabella all'interno del database.
    • COLUMNS (facoltativo): le colonne da importare.
    • ESCAPE_CHARACTER (facoltativo): il carattere che deve precedere un carattere di dati che deve essere sottoposto a 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 nel codice ASCII esadecimale. Ad esempio, 22 rappresenta le virgolette doppie.
    • FIELD_DELIMITER (facoltativo): il carattere che divide 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:

    {
      "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      "database": "DATABASE_NAME",
      "user": "USER",
      "csvImportOptions": {
        "table": "TABLE_NAME",
        "columns": ["COLUMN1", "COLUMN2"],
        "fieldDelimiter": "FIELD_DELIMITER",
        "quoteCharacter": "QUOTE_CHARACTER",
        "escapeCharacter": "ESCAPE_CHARACTER"
      }
    }
    

    Per inviare la richiesta, espandi 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/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    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/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    Ricevi una risposta JSON simile alla seguente:

    Risposta

    {
     "name": "projects/PROJECT_ID/locations/LOCATION_ID/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/location-id/clusters/target-cluster",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    
  6. Se non hai bisogno di conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile ora.

    Per l'elenco completo dei parametri per la richiesta, vedi clusters:import.

Personalizzare il formato CSV e importare il file

Puoi personalizzare il formato CSV e importare il file quando il file CSV contiene delimitatori di campo, virgolette o caratteri di escape non predefiniti. Per importare un file CSV con un formato non predefinito, devi fornire le stesse opzioni di formattazione nella richiesta.

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

gcloud

gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' --user=USERNAME --table=TABLE_NAME --columns=COLUMNS --field-delimiter='2C' --quote-character='22' --escape-character='5C' --csv

REST v1

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

{
 "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
 "database": "DATABASE_NAME",
 "user": "USER",
 "csvImportOptions": {
     "table": "TABLE_NAME",
     "columns": ["COLUMN1", "COLUMN2"],
     "escapeCharacter": "5C",
     "quoteCharacter": "22",
     "fieldDelimiter": "2C",
 }
}

Per vedere come viene creata la richiesta API REST sottostante per questa attività, consulta Explorer API nella pagina clusters:import.

Se ricevi un errore come INVALID_ARGUMENT, assicurati che la tabella esista. Se la tabella esiste, verifica di disporre delle autorizzazioni corrette per il bucket. Per assistenza nella configurazione del controllo dell'accesso in Cloud Storage, consulta Creazione e gestione degli elenchi di controllo dell'accesso.

Controllare lo stato di un'operazione di importazione

Per controllare lo stato di un'operazione di importazione:

gcloud

Esegui il seguente comando utilizzando gcloud alloydb operations describe:

gcloud alloydb operations describe OPERATION_ID --region=REGION

Lo stato di queste operazioni è indicato nel campo STATUS.

Puoi anche elencare i dettagli di un'operazione specifica o annullarla. Per ulteriori informazioni su questo comando, consulta la pagina di riferimento del comando gcloud alloydb operations.

REST v1

Utilizza il metodo GET e il seguente URL:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

Per ulteriori informazioni, vedi get.

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

  • REGION: la regione in cui è stato eseguito il deployment del cluster AlloyDB.
  • PROJECT_ID: l'ID progetto
  • OPERATION_ID: l'ID dell'operazione di importazione. Per maggiori informazioni, consulta Prima di iniziare.

Per inviare la richiesta, espandi una di queste opzioni:

curl (Linux, macOS o Cloud Shell)

Esegui questo comando:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell (Windows)

Esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

Ricevi una risposta JSON simile alla seguente:

In caso di esito positivo, il corpo della risposta contiene un'istanza di Operation.

Passaggi successivi