Importa file Avro Spanner

Questa pagina descrive come importare i database Spanner in Spanner utilizzando la console Google Cloud. Per importare file Avro da un'altra origine, consulta Importare dati da database non Spanner.

Il processo utilizza Dataflow, importa i dati da una cartella di bucket di Cloud Storage contenente un set di file Avro e file manifest JSON. Il processo di importazione supporta solo i file Avro esportati da Spanner.

Per importare un database Spanner utilizzando l'API REST o gcloud CLI, completa i passaggi nella sezione Prima di iniziare di questa pagina, quindi consulta le istruzioni dettagliate in Cloud Storage Avro to Spanner.

Prima di iniziare

Per importare un database Spanner, devi prima abilitare le API Spanner, Cloud Storage, Compute Engine e Dataflow:

Abilita le API

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

Requisiti per le quote

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

  • Spanner: devi avere una capacità di calcolo sufficiente per supportare la quantità di dati che importi. Non è richiesta alcuna capacità di calcolo aggiuntiva per importare un database, ma potresti dover aggiungere ulteriore capacità di calcolo in modo che il job venga completato in un periodo di tempo ragionevole. Per ulteriori dettagli, consulta Ottimizzare le offerte di lavoro.
  • Cloud Storage: per eseguire l'importazione, devi avere un bucket contenente i file esportati in precedenza. Non è necessario impostare una dimensione per il bucket.
  • Dataflow: i job di importazione sono soggetti alle stesse quote di Compute Engine di CPU, disco e indirizzo IP degli altri job Dataflow.
  • Compute Engine: prima di eseguire il job di importazione, devi configurare le quote iniziali per Compute Engine, utilizzato da Dataflow. Queste quote rappresentano il numero massimo di risorse che puoi consentire a Dataflow di 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. La scalabilità automatica di Dataflow ti consente di pagare solo per le risorse effettivamente utilizzate durante l'importazione. Se il job può utilizzare più risorse, l'interfaccia utente di Dataflow mostra un'icona di avviso. Il job dovrebbe terminare anche se è presente un'icona di avviso.

Requisiti IAM

Per importare un database, devi inoltre disporre di ruoli IAM con autorizzazioni sufficienti per utilizzare tutti i servizi coinvolti in un job di importazione. Per informazioni sulla concessione di ruoli e autorizzazioni, consulta Applicare ruoli IAM.

Per importare un database, devi disporre dei seguenti ruoli:

(Facoltativo) Trova la cartella del database in Cloud Storage

Per trovare nella console Google Cloud la cartella contenente il database esportato, vai al browser Cloud Storage e fai clic sul bucket che contiene la cartella esportata.

Vai al browser di Cloud Storage

Il nome della cartella che contiene i dati esportati inizia con l'ID dell'istanza, il nome del database e il timestamp del job di esportazione. La cartella contiene:

  • Un file spanner-export.json.
  • Un file TableName-manifest.json per ogni tabella nel database che hai esportato.
  • Uno o più TableName.avro-#####-of-##### file. Il primo numero nell'estensione .avro-#####-of-##### rappresenta l'indice del file Avro, a partire da zero, e il secondo rappresenta il numero di file Avro generati per ogni tabella.

    Ad esempio, Songs.avro-00001-of-00002 è il secondo di due file che contengono i dati per la tabella Songs.

  • Un file ChangeStreamName-manifest.json per ogni flusso di modifiche nel database che hai esportato.

  • Un file ChangeStreamName.avro-00000-of-00001 per ogni flusso di modifiche. Questo file contiene dati vuoti con solo lo schema Avro della modifica in tempo reale.

Importa un database

Per importare il tuo database Spanner da Cloud Storage nella tua istanza, segui questi passaggi.

  1. Vai alla pagina Istanze di Spanner.

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza che conterrà il database importato.

  3. Fai clic sulla voce di menu Importa/Esporta nel riquadro a sinistra, quindi fai clic sul pulsante Importa.

  4. In Scegli una cartella di origine, fai clic su Sfoglia.

  5. Individua il bucket contenente l'esportazione nell'elenco iniziale o fai clic su Cerca Screenshot dell'elemento UI di ricerca per filtrare l'elenco e trovare il bucket. Fai doppio clic sul bucket per vedere le cartelle che contiene.

  6. Trova la cartella con i file esportati e fai clic per selezionarla.

  7. Fai clic su Seleziona.

  8. Inserisci un nome per il nuovo database, che Spanner crea durante il processo di importazione. Il nome del database non può esistere già nell'istanza.

  9. Scegli il dialetto per il nuovo database (GoogleSQL o PostgreSQL).

  10. (Facoltativo) Per proteggere il nuovo database con una chiave di crittografia gestita dal cliente, fai clic su Mostra opzioni di crittografia e seleziona Utilizza una chiave di crittografia gestita dal cliente (CMEK). Poi seleziona una chiave dall'elenco a discesa.

  11. Seleziona una regione dal menu a discesa Scegli una regione per il job di importazione.

  12. (Facoltativo) Per criptare lo stato della pipeline Dataflow con una chiave di crittografia gestita dal cliente, fai clic su Mostra opzioni di crittografia e seleziona Utilizza una chiave di crittografia gestita dal cliente (CMEK). Poi seleziona una chiave dall'elenco a discesa.

  13. Seleziona la casella di controllo in Conferma addebiti per confermare che sono presenti addebiti aggiuntivi a quelli sostenuti dall'istanza Spanner esistente.

  14. Fai clic su Importa.

    La console Google Cloud visualizza la pagina Dettagli database, che ora mostra una casella che descrive il job di importazione, incluso il tempo trascorso del job:

    Screenshot del job in corso

Al termine o alla terminazione del job, la console Google Cloud visualizza un messaggio nella pagina Dettagli database. Se il job riesce, viene visualizzato un messaggio di operazione riuscita:

Messaggio di completamento del job di importazione

Se il job non riesce, viene visualizzato un messaggio di errore:

Messaggio di errore del job di importazione

Se il job ha esito negativo, controlla i log Dataflow del job per i dettagli dell'errore e consulta Risolvere i problemi dei job di importazione non riusciti.

Una nota sull'importazione delle colonne generate e delle modifiche in tempo reale

Spanner utilizza la definizione di ogni colonna generata nello schema Avro per ricrearla. Spanner calcola automaticamente i valori delle colonne generati durante l'importazione.

Allo stesso modo, Spanner utilizza la definizione di ogni flusso di modifiche nello schema Avro per ricrearlo durante l'importazione. I dati delle modifiche in tempo reale non vengono né esportati né importati tramite Avro, quindi tutti i flussi di modifiche associati a un database appena importato non avranno record di dati delle modifiche.

Nota sull'importazione di sequenze

Ogni sequenza (GoogleSQL, PostgreSQL) esportata da Spanner utilizza la funzione GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) per acquisire lo stato attuale. Spanner aggiunge un buffer di 1000 al contatore e scrive il nuovo valore del contatore nelle proprietà del campo del record. Tieni presente che questo è l'approccio migliore per evitare errori di valori duplicati che potrebbero verificarsi dopo l'importazione. Regola il contatore effettivo della sequenza se sono presenti più scritture nel database di origine durante l'esportazione dei dati.

Al momento dell'importazione, la sequenza inizia da questo nuovo contatore anziché dal contatore trovato nello schema. Se necessario, puoi utilizzare l'istruzione ALTER SEQUENCE (GoogleSQL, PostgreSQL) per eseguire l'aggiornamento a un nuovo contatore.

Scegli una regione per il job di importazione

Potresti voler scegliere una regione diversa in base alla località del 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 località del bucket Cloud Storage è una regione, puoi sfruttare l'utilizzo gratuito della rete scegliendo la stessa regione per il job di importazione, supponendo che quella regione 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 una regione con sede condivisa non è disponibile per il job di importazione o se la località del bucket Cloud Storage è più regioni, si applicano i costi per il trasferimento di dati in uscita. Consulta i prezzi del trasferimento di dati di Cloud Storage per scegliere una regione che comporta i costi più bassi per il trasferimento di dati.

Visualizza o risolvi i problemi dei job nell'interfaccia utente di Dataflow

Dopo aver avviato un job di importazione, puoi visualizzare i dettagli del job, inclusi i log, nella sezione Dataflow della console Google Cloud.

Visualizza i dettagli del job Dataflow

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

  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 Importa/Esporta del database mostra un elenco dei job recenti.
  3. Nella pagina Importa/Esporta 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 del job Dataflow.

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

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

    Vai alla pagina dei job

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

    La console Google Cloud mostra i dettagli del job Dataflow.

Visualizza i log di Dataflow per il tuo job

Per visualizzare i log di un job Dataflow, vai alla pagina dei dettagli del job come descritto in precedenza, quindi fai clic su Log a destra del nome del job.

Se un job ha esito negativo, cerca gli errori nei log. In caso di errori, il numero di errori 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. Potrebbe essere necessario scorrere 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 espanderne il contenuto.

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

Risolvere i problemi relativi ai job di importazione 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.

Verifica la latenza di scrittura del 99% nella scheda Monitoring del tuo database Spanner nella console Google Cloud. Se vengono mostrati valori elevati (più secondi), significa che l'istanza è sovraccarica, con conseguente timeout e esito negativo delle scritture.

Una delle cause della latenza elevata è che il job Dataflow è in esecuzione con troppi worker, causando un carico eccessivo sull'istanza Spanner.

Per specificare un limite per il numero di worker Dataflow, invece di utilizzare la scheda Importa/Esporta nella pagina dei dettagli dell'istanza del database Spanner nella console Google Cloud, devi avviare l'importazione utilizzando il modello di Dataflow da Cloud Storage Avro a Cloud Spanner e specificare il numero massimo di worker come descritto di seguito:
  • Se utilizzi la console Dataflow, il parametro Max worker si trova nella sezione Parametri facoltativi della pagina Crea job da modello.

  • Se utilizzi gcloud, specifica l'argomento max-workers. Ad esempio:

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

Ottimizza i job di importazione a esecuzione lenta

Se hai seguito i suggerimenti nelle impostazioni iniziali, di solito non dovresti apportare altre modifiche. Se il job viene eseguito lentamente, puoi provare alcune altre ottimizzazioni:

  • Ottimizza il job e la posizione 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 le quote di Compute Engine pertinenti limitano le risorse del job Dataflow, la pagina Dataflow del job nella console Google Cloud mostra un'icona di avviso Icona di avviso e messaggi di log:

    Screenshot dell'avviso relativo al limite di quota

    In questa situazione, l'aumento delle quote per CPU, indirizzi IP in uso e disco permanente standard potrebbe ridurre il tempo di esecuzione del job, ma potrebbero esserti addebitati maggiori costi per Compute Engine.

  • Controlla l'utilizzo della CPU di Spanner: se noti che l'utilizzo della CPU per l'istanza supera il 65%, puoi aumentare la capacità di calcolo nell'istanza. La capacità aggiunge più risorse di Spanner e il job dovrebbe essere più veloce, ma ti vengono addebitati più costi di Spanner.

Fattori che influiscono sulle prestazioni del job di importazione

Il tempo necessario per completare un job di importazione dipende da diversi fattori.

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

  • Schema del database Spanner, tra cui:

    • 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

Tieni presente che la creazione dell'indice e della chiave esterna continua dopo il completamento del job di importazione di Dataflow. Le modifiche in tempo reale vengono create prima del job di importazione, ma dopo l'importazione di tutti i dati.

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

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

  • Carico esistente su Spanner: un job di importazione aggiunge un carico significativo della CPU su un'istanza Spanner. Se l'istanza ha già un carico esistente sostanziale, il job viene eseguito più 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.

Ottimizza i worker per ottenere buone prestazioni di importazione

Quando si avvia un job di importazione Spanner, i worker Dataflow devono essere impostati su un valore ottimale per buone prestazioni. Troppi worker sovraccarica Spanner e un numero troppo basso di worker si traduce in prestazioni di importazione inferiori.

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

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

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