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, consulta la sezione Annullare un'operazione di importazione.

Prima di iniziare

Prima di iniziare un'operazione di importazione:

  • Assicurati che il database abbia spazio libero sufficiente.
  • Le operazioni di importazione utilizzano le risorse del database, ma non interferendo con le normali operazioni del database, a meno che il cluster non sia sottodimensionato.

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, l'account di servizio per il cluster AlloyDB deve avere uno dei seguenti ruoli:

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

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

Importare dati da un file CSV nei cluster AlloyDB

  • Il database e la tabella in cui stai eseguendo l'importazione devono esistere nel cluster AlloyDB. Per assistenza sulla creazione di un database, consulta 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 tuo bucket. Per assistenza sul caricamento di file nei bucket, consulta Caricare oggetti.
  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectViewer ruolo IAM all'account di servizio AlloyDB per il bucket.

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

    Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzare le 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

    Esegui le seguenti sostituzioni:

    • CLUSTER_NAME: il nome del cluster.
    • REGION: la regione in cui è dipiegato il 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 ulteriori informazioni sull'utilizzo del comando import, consulta la pagina di riferimento del comando alloydb import.

  5. Se non devi conservare le autorizzazioni IAM impostate 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 tuo bucket. Per assistenza sul caricamento di file nei bucket, consulta Caricare oggetti.
  3. Concedi le autorizzazioni dell'account di servizio al bucket Cloud Storage per l'operazione di importazione. Utilizza il formato dell'account di servizio per identificare l'account di servizio per il progetto in cui stai eseguendo l'importazione. Il formato del service account è il seguente:

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

  5. Importa il file.

    Utilizza il seguente metodo e URL HTTP:

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

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

    • PROJECT_ID: l'ID progetto.
    • LOCATION_ID: 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.
    • 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 comparire prima di un carattere di dati che deve essere eseguito l'escapismo. 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:

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

    Riceverai 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 devi conservare le autorizzazioni IAM impostate in precedenza, rimuovile ora.

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

Personalizza il formato CSV e importa il file

Puoi personalizzare il formato CSV e importare il file quando contiene un delimitatore di campo non predefinito o caratteri di a capo o di escape. Per importare un file CSV con un formato diverso da quello predefinito, devi fornire le stesse opzioni di formattazione nella richiesta.

Utilizza i seguenti esempi dell'interfaccia a riga di comando gcloud e dell'API REST 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 dell'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 scoprire come viene costruita la richiesta dell'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 sulla configurazione del controllo dell'accesso in Cloud Storage, consulta Creare e gestire gli elenchi di controllo dell'accesso.

Controllare lo stato di un'operazione di importazione

Per controllare lo stato di un'operazione di importazione:

gcloud

Esegui quanto segue utilizzando il comando gcloud alloydb operations describe:

gcloud alloydb operations describe OPERATION_ID --region=REGION

Lo stato di queste operazioni è nel campo STATUS.

Puoi anche elencare i dettagli di un'operazione specifica o annullarne una. 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, apporta le seguenti sostituzioni:

  • REGION: la regione in cui è dipiegato il 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

Riceverai una risposta JSON simile alla seguente:

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

Passaggi successivi