Importazione ed esportazione di dati in formato CSV

Questa pagina descrive come esportare i dati da Spanner a file CSV o importare dati da file CSV in un database Spanner.

Il processo utilizza Dataflow. Puoi esportare i dati da Spanner in un bucket Cloud Storage oppure importare i dati in Spanner da un bucket Cloud Storage contenente un file manifest JSON e un insieme di file CSV.

Prima di iniziare

Per importare o esportare un database Spanner, innanzitutto devi attivare le API Spanner, Cloud Storage, Compute Engine e Dataflow:

Enable the APIs

Devi anche avere una quota sufficiente e le autorizzazioni IAM richieste.

Requisiti per le quote

I requisiti di quota per i job di importazione o esportazione sono i seguenti:

  • Spanner: devi disporre di capacità di calcolo sufficiente per supportare la quantità di dati che stai importando. Nessun altro capacità di calcolo necessaria per importare o esportare un database, anche se potresti aver bisogno per aggiungere più capacità di calcolo in modo che il job venga completato in una quantità ragionevole del tempo. Per ulteriori dettagli, consulta la sezione Job di ottimizzazione.
  • Cloud Storage: per eseguire l'importazione, devi avere un bucket contenenti i file esportati in precedenza. Per eseguire l'esportazione, devi creare un bucket per i file esportati, se non ne hai già uno. Puoi farlo nella console Google Cloud, tramite la pagina Cloud Storage o durante la creazione dell'esportazione tramite la pagina Spanner. Non è necessario impostare una dimensione per il bucket.
  • Dataflow: i job di importazione o esportazione sono soggetti alla stessa CPU, utilizzo del disco e indirizzo IP quote di Compute Engine come e altri job Dataflow.
  • Compute Engine: prima di eseguire il job di importazione o esportazione, devi configurare le quote iniziali per Compute Engine, utilizzato da Dataflow. Queste quote rappresentano il numero massimo di risorse consentite Dataflow da utilizzare per il tuo job. I valori iniziali consigliati sono:

    • CPU: 200
    • Indirizzi IP in uso: 200
    • Disco permanente standard: 50 TB

    In genere, non è necessario apportare altre modifiche. Dataflow offre scalabilità automatica, in modo da pagare solo e le risorse effettive utilizzate durante l'importazione o l'esportazione. Se il job può utilizzare più risorse, l'interfaccia utente di Dataflow mostra un'icona di avviso. La il job dovrebbe terminare anche se è presente un'icona di avviso.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per esportare un database, chiedi all'amministratore di concederti seguenti ruoli IAM sull'account di servizio worker Dataflow:

Esporta i dati di Spanner in file CSV

Per esportare i dati da Spanner a file CSV in Cloud Storage: segui le istruzioni per utilizzare Google Cloud CLI ed eseguire un job con Testo di Cloud Storage nel modello Spanner.

Puoi anche fare riferimento alle informazioni riportate in questo documento su come visualizzare o risolvere i problemi relativi ai job, ottimizzare i job lenti e i fattori che influiscono sul rendimento dei job.

Importare i dati dai file CSV in Spanner

La procedura per importare i dati dai file CSV include i seguenti passaggi:

  1. Esporta i dati in file CSV e archiviali in Cloud Storage. Non includere una riga di intestazione.
  2. Crea un file manifest JSON e archivialo insieme ai file CSV.
  3. Crea tabelle di destinazione vuote nel database Spanner o assicurati che i tipi di dati delle colonne nei file CSV corrispondano alle colonne corrispondenti nelle tabelle esistenti.
  4. Esegui il job di importazione.
di Gemini Advanced.

Passaggio 1: esporta i dati da un database non Spanner in file CSV

Il processo di importazione importa i dati da file CSV che si trovano in un nel bucket Cloud Storage. Puoi esportare i dati in formato CSV da qualsiasi fonte.

Quando esporti i dati, tieni presente quanto segue:

  • I file di testo da importare devono essere in formato CSV.
  • I dati devono corrispondere a uno dei seguenti tipi:

GoogleSQL

BOOL
INT64
FLOAT64
NUMERIC
STRING
DATE
TIMESTAMP
BYTES
JSON

PostgreSQL

boolean
bigint
double precision
numeric
character varying, text
date
timestamp with time zone
bytea
  • Non è necessario includere o generare metadati quando esporti il file CSV .

  • Non è necessario seguire una particolare convenzione di denominazione per i file.

Se non esporti i file direttamente in Cloud Storage, devi: carica i file CSV in un bucket Cloud Storage.

Passaggio 2: crea un file manifest JSON

Devi anche creare un file manifest con una descrizione JSON dei file da importare e inserirlo nello stesso bucket Cloud Storage in cui hai archiviato il file CSV . Questo file manifest contiene un array tables che elenca il nome e i dati le posizioni dei file per ogni tabella. Il file specifica anche il dialetto del database di destinazione. Se il dialetto viene omesso, il valore predefinito è GoogleSQL.

Il formato del file manifest corrisponde al seguente tipo di messaggio, mostrato qui in formato del buffer di protocollo:

message ImportManifest {
  // The per-table import manifest.
  message TableManifest {
    // Required. The name of the destination table.
    string table_name = 1;
    // Required. The CSV files to import. This value can be either a filepath or a glob pattern.
    repeated string file_patterns = 2;
    // The schema for a table column.
    message Column {
      // Required for each Column that you specify. The name of the column in the
      // destination table.
      string column_name = 1;
      // Required for each Column that you specify. The type of the column.
      string type_name = 2;
    }
    // Optional. The schema for the table columns.
    repeated Column columns = 3;
  }
  // Required. The TableManifest of the tables to be imported.
  repeated TableManifest tables = 1;

  enum ProtoDialect {
    GOOGLE_STANDARD_SQL = 0;
    POSTGRESQL = 1;
  }
  // Optional. The dialect of the receiving database. Defaults to GOOGLE_STANDARD_SQL.
  ProtoDialect dialect = 2;
}

L'esempio seguente mostra un file manifest per l'importazione delle tabelle Albums e Singers in un database in dialetto GoogleSQL. La tabella Albums utilizza lo schema delle colonne recuperato dal job dal database e la tabella Singers utilizza lo schema utilizzato dal file manifest specifica:

{
  "tables": [
    {
      "table_name": "Albums",
      "file_patterns": [
        "gs://bucket1/Albums_1.csv",
        "gs://bucket1/Albums_2.csv"
      ]
    },
    {
      "table_name": "Singers",
      "file_patterns": [
        "gs://bucket1/Singers*.csv"
      ],
      "columns": [
        {"column_name": "SingerId", "type_name": "INT64"},
        {"column_name": "FirstName", "type_name": "STRING"},
        {"column_name": "LastName", "type_name": "STRING"}
      ]
    }
  ]
}

Passaggio 3: crea la tabella per il database Spanner

Prima di eseguire l'importazione, devi creare le tabelle di destinazione nel il database Spanner. Se la tabella Spanner di destinazione ha già un tutte le colonne specificate nel file manifest devono avere gli stessi dati come colonne corrispondenti nello schema della tabella di destinazione.

Ti consigliamo di creare indici secondari, chiavi esterne e stream di modifiche dopo aver importato i dati in Spanner, non al momento della creazione iniziale della tabella. Se la tabella contiene già queste strutture, ti consigliamo di eliminarle e ricrearle dopo aver importato i dati.

Passaggio 4: esegui un job di importazione di Dataflow utilizzando gcloud

Per avviare il job di importazione, segui le istruzioni per l'utilizzo di Google Cloud CLI per eseguire un job con il modello di testo di Cloud Storage in Spanner.

Dopo aver avviato un job di importazione, puoi visualizzarne i dettagli nella console Google Cloud.

Al termine del job di importazione, aggiungi eventuali indici secondari necessari, chiavi esterne e flussi di modifiche.

Scegli una regione per il job di importazione

Ti consigliamo di scegliere una regione diversa in base alla posizione del tuo bucket Cloud Storage. Per evitare addebiti per il trasferimento di dati in uscita, scegli una regione che corrisponda alla località del bucket Cloud Storage.

  • Se la posizione del bucket Cloud Storage è una regione, puoi usufruire dell'utilizzo gratuito della rete scegliendo la stessa regione per il job di importazione, a condizione che sia disponibile.

  • Se la località del bucket Cloud Storage è due regioni, puoi sfruttare l'utilizzo gratuito della rete scegliendo una delle due regioni che compongono la doppia regione per il job di importazione, supponendo che una delle regioni sia disponibile.

  • Se per il job di importazione non è disponibile una regione in co-locazione o se la località del bucket Cloud Storage è una regione multipla, si applicano gli addebiti per il trasferimento di dati in uscita. Fai riferimento a Cloud Storage Data Transfer per scegliere una regione che prevede il i costi più bassi per il trasferimento di dati.

Visualizzare o risolvere i problemi relativi ai job nell'interfaccia utente di Dataflow

Dopo aver avviato un job di importazione o esportazione, puoi visualizzare i dettagli del job, tra cui nella sezione Dataflow della console Google Cloud.

Visualizza i dettagli del job Dataflow

Per visualizzare i dettagli di eventuali job di importazione o esportazione eseguiti nell'ultima settimana, inclusi eventuali job in esecuzione ora:

  1. Vai alla pagina Panoramica del database per il database.
  2. Fai clic sulla voce di menu Importa/Esporta nel riquadro a sinistra. La pagina database Importa/Esporta mostra un elenco di job recenti.
  3. Nella pagina Importazione/esportazione del database, fai clic sul nome del job nella colonna Nome job Dataflow:

    Messaggio di stato del job in corso

    La console Google Cloud mostra i dettagli di Dataflow un lavoro.

Per visualizzare un job eseguito più di una settimana fa:

  1. Vai alla pagina dei job Dataflow nella console Google Cloud.

    Vai a Job

  2. Trova il lavoro nell'elenco, quindi fai clic sul suo nome.

    La console Google Cloud mostra i dettagli di Dataflow un lavoro.

Visualizza i log di Dataflow per il tuo job

Per visualizzare i log di un job Dataflow, vai ai dettagli del job quindi fai clic su Log a destra del nome del job.

Se un job non va a buon fine, cerca gli errori nei log. Se ci sono errori, l'errore il conteggio delle voci viene visualizzato accanto a Log:

Esempio di conteggio degli errori accanto al pulsante Log

Per visualizzare gli errori del job:

  1. Fai clic sul conteggio degli errori accanto a Log.

    La console Google Cloud visualizza i log del job. Potresti dover scorri per vedere gli errori.

  2. Individua le voci con l'icona di errore Icona di errore.

  3. Fai clic su una singola voce di log per espandere i relativi contenuti.

Per ulteriori informazioni sulla risoluzione dei problemi dei job Dataflow, consulta Risolvi i problemi della pipeline.

Risolvere i problemi relativi ai job di importazione o esportazione non riusciti

Se nei log del job vengono visualizzati i seguenti errori:

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Controlla la latenza di lettura/scrittura del 99% nella scheda Monitoraggio del database Spanner nella console Google Cloud. Se vengono visualizzati valori elevati (più secondi), significa che l'istanza è sovraccaricata, causando il timeout e l'errore delle letture/scritture.

Una causa della latenza elevata è che il job Dataflow viene eseguito utilizzando troppi worker, il che comporta un carico eccessivo sull'istanza Spanner.

Per specificare un limite al numero di worker Dataflow:

Console

Se utilizzi la console Dataflow, il campo Numero massimo di worker si trova nella sezione Parametri facoltativi della Pagina Crea job da modello.

Vai a Dataflow

gcloud

Esegui gcloud dataflow jobs run. e specifica l'argomento max-workers. Ad esempio:

  gcloud dataflow jobs run my-import-job \
    --gcs-location='gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,inputDir=gs://my-gcs-bucket' \
    --max-workers=10 \
    --network=network-123

Risolvere gli errori di rete

Durante l'esportazione di Spanner potrebbe verificarsi il seguente errore database:

Workflow failed. Causes: Error: Message: Invalid value for field
'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface
must specify a subnet if the network resource is in custom subnet mode.
HTTP Code: 400

Questo errore si verifica perché Spanner presuppone che tu voglia utilizzare una rete VPC in modalità automatica denominata default nello stesso progetto del job Dataflow. Se non hai una rete VPC predefinita o se la tua rete VPC si trova in una rete VPC in modalità personalizzata, devi creare un job Dataflow Specifica una rete o una subnet alternativa.

Ottimizzare i job di importazione o esportazione con esecuzione lenta

Se hai seguito i suggerimenti nelle impostazioni iniziali, in genere non devi apportare altre modifiche. Se il job funziona lentamente, puoi provare alcune altre ottimizzazioni:

  • Ottimizza la posizione del job e dei dati: esegui il job Dataflow nella stessa regione in cui si trovano l'istanza Spanner e il bucket Cloud Storage.

  • Garantire risorse Dataflow sufficienti: se quote di Compute Engine pertinenti limitare le risorse del job Dataflow, Pagina Dataflow nella console Google Cloud mostra un'icona di avviso Icona di avviso e registra messaggi:

    Screenshot dell'avviso relativo al limite di quota

    In questa situazione, l'aumento delle quote per le CPU, gli indirizzi IP in uso e i dischi permanenti standard potrebbe ridurre il tempo di esecuzione del job, ma potresti incorrere in più costi di Compute Engine.

  • Verifica l'utilizzo della CPU di Spanner: se noti che l'utilizzo della CPU per l'istanza è superiore al 65%, puoi aumentare la capacità di calcolo in quell'istanza. La capacità aumenta Le risorse Spanner e il job dovrebbero essere più veloci, ma il traffico è maggiore Spanner addebita dei costi.

Fattori che influiscono sulle prestazioni del job di importazione o esportazione

Il tempo necessario per completare un job di importazione o esportazione è influenzato da diversi fattori.

  • Dimensioni del database Spanner: l'elaborazione di più dati richiede più tempo e risorse.

  • Schema del database Spanner, inclusi:

    • Il numero di tabelle
    • La dimensione delle righe
    • Il numero di indici secondari
    • Il numero di chiavi esterne
    • Il numero di modifiche in tempo reale

  • Posizione dei dati: i dati vengono trasferiti tra Spanner e Cloud Storage utilizzando Dataflow. Possibilmente, tutte e tre si trovano nella stessa regione. Se i componenti non si trovano nello stesso regione, lo spostamento dei dati tra regioni rallenta il job.

  • Numero di worker Dataflow: Dataflow ottimale sono necessari per ottenere buone prestazioni. Con la scalabilità automatica, Dataflow sceglie il numero di worker per il lavoro in base alla quantità di lavoro da svolgere. Il numero di i worker saranno tuttavia limitati dalle quote di CPU, indirizzi IP in uso, e un disco permanente standard. L'interfaccia utente di Dataflow mostra un avviso se riscontra limiti di quota. In questa situazione, l'avanzamento è più lento, ma il job dovrebbe comunque essere completato. La scalabilità automatica può sovraccaricare Spanner e causare errori quando è presente una grande quantità di dati da importare.

  • Carico esistente su Spanner: un job di importazione aggiunge sulla CPU per un'istanza Spanner. Un job di esportazione in genere aggiunge un carico ridotto a un'istanza Spanner. Se l'istanza ha già un carico esistente sostanziale, il job esegue lentamente.

  • Quantità di capacità di calcolo di Spanner: se l'utilizzo della CPU per l'istanza è superiore al 65%, il job viene eseguito più lentamente.

Ottimizzare i worker per un buon rendimento dell'importazione

Quando si avvia un job di importazione di Spanner, Dataflow i worker devono essere impostati su un valore ottimale per ottenere buone prestazioni. Troppi worker sovraccaricano Spanner e troppo pochi worker comportano prestazioni di importazione deludenti.

Il numero massimo di worker dipende fortemente dalla dimensione dei dati, ma idealmente, l'utilizzo totale della CPU da parte di Spanner dovrebbe essere compreso tra dal 70% al 90%. Questo offre un buon equilibrio tra Spanner dell'efficienza e del completamento dei job senza errori.

Per raggiungere questo target di utilizzo nella maggior parte degli schemi e degli scenari, consigliamo un numero massimo di vCPU di worker compreso tra 4 e 6 volte il numero di nodi Spanner.

Ad esempio, per un'istanza Spanner a 10 nodi, utilizzando n1-standard-2 worker, occorre impostare il numero massimo di worker su 25, ottenendo 50 vCPU.