Importa file Avro di 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.

La procedura utilizza Dataflow; importa i dati da un La cartella del bucket Cloud Storage che contiene un set 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 descritti 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, 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 delle quote

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

  • Spanner: devi disporre di capacità di calcolo sufficiente per supportare la quantità di dati che stai importando. Per importare un database non è necessaria alcuna capacità di calcolo aggiuntiva, ma potresti dover aggiungere altra capacità di calcolo in modo che il job venga completato in un periodo di tempo ragionevole. Per ulteriori dettagli, consulta la sezione Job di ottimizzazione.
  • Cloud Storage: per 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 per CPU, utilizzo del disco e indirizzo IP degli altri job Dataflow.
  • Compute Engine: prima di eseguire il job di importazione, devi configurare quote iniziali di Compute Engine, usato 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 fornisce la scalabilità automatica, in modo da pagare solo per le risorse effettive utilizzate durante l'importazione. 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 i seguenti ruoli IAM per l'account di servizio worker Dataflow:

(Facoltativo) Trova la cartella del database in Cloud Storage

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

Vai al browser Cloud Storage

Il nome della cartella contenente 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 in del database che hai esportato.
  • Uno o più TableName.avro-#####-of-##### . Il primo numero nell'estensione.avro-#####-of-##### rappresenta l'indice del file Avro, a partire da zero, mentre 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 ciascuno flusso di modifiche nel database esportato.

  • Un ChangeStreamName.avro-00000-of-00001 file per ogni stream di modifiche. Questo file contiene dati vuoti con solo lo schema Avro del flusso di modifiche.

Importa un database

Per importare il database Spanner da Cloud Storage nell'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 sul menu Importazione/esportazione nel riquadro a sinistra e poi 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 visualizzare 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 la 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 le opzioni di crittografia e seleziona Utilizza una chiave di crittografia gestita dal cliente (CMEK). Quindi, seleziona una chiave da 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). Quindi, seleziona una chiave. dall'elenco a discesa.

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

  14. Fai clic su Importa.

    Nella console Google Cloud viene visualizzata la pagina Dettagli database, che ora mostra una casella che descrive il job di importazione, incluso il tempo trascorso dal job:

    Screenshot del job in corso

Al termine o all'interruzione del job, la console Google Cloud mostra un messaggio nella pagina Dettagli del database. Se il job ha esito positivo, viene visualizzato un messaggio di riuscita dell'immagine:

Messaggio di esito positivo del job di importazione

Se il job non va a buon fine, viene visualizzato un messaggio di errore:

Messaggio di errore del job di importazione

Se il job non va a buon fine, verifica la presenza di errori nei log Dataflow del job vedi Risolvere i problemi relativi ai job di importazione non riusciti.

Una nota sull'importazione di colonne generate e stream di modifiche

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

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

Nota sull'importazione di sequenze

Ogni sequenza (GoogleSQL, PostgreSQL) che Spanner esporta utilizza 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 è solo un per evitare errori di valori duplicati che potrebbero verificarsi dopo l'importazione. Modifica il contatore di sequenza effettivo se ci sono 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 nello schema. Se necessario, puoi usare la funzione ALTER SEQUENCE (GoogleSQL, PostgreSQL) per passare a un nuovo contatore.

Una nota sull'importazione di tabelle con interleaving e chiavi esterne

Il job Dataflow può importare tabelle con interleaving, consentendoti di mantenere le relazioni padre-figlio dal file di origine. Tuttavia, le limitazioni delle chiavi esterne non vengono applicate durante il caricamento dei dati. Dataflow crea tutte le chiavi esterne necessarie al termine del caricamento dei dati.

Se hai vincoli di chiave esterna sul database Spanner prima dell'inizio dell'importazione, potresti riscontrare errori di scrittura dovuti a riferimenti violazioni dell'integrità. Per evitare errori di scrittura, valuta la possibilità di eliminare eventuali le chiavi esterne esistenti prima di avviare il processo di importazione.

Scegli una regione per il job di importazione

Ti consigliamo di scegliere una regione diversa in base alla posizione del tuo bucket Cloud Storage. Da evitare addebiti per il trasferimento di dati in uscita, scegli una regione corrisponde 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 una regione con sede condivisa non è disponibile per il job di importazione o se le tue La località del bucket Cloud Storage è multiregionale, si applicano i costi 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.

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

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

Visualizza i dettagli del job Dataflow

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

  1. Vai alla pagina Panoramica del database per il database.
  2. Fai clic sull'elemento di menu Importazione/esportazione nel riquadro di sinistra. La pagina database Importa/Esporta mostra un elenco di 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 Lavori

  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 ai dettagli del job come descritto sopra, poi 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 scorrere per visualizzare 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 saperne di più sulla risoluzione dei problemi relativi ai 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.

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

Una causa della latenza elevata è che il job Dataflow è in esecuzione utilizzando troppe dei worker, applicando un carico eccessivo all'istanza Spanner.

Per specificare un limite al numero di worker di Dataflow, anziché utilizzare la scheda Importazione/esportazione nella pagina dei dettagli dell'istanza del database Spanner nella console Google Cloud, devi avviare l'importazione utilizzando il modello Cloud Storage Avro to Cloud Spanner di Dataflow e specificare il numero massimo di worker come descritto di seguito:
  • Se utilizzi la console Dataflow, il parametro Numero massimo di 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, dovresti in genere non devono essere apportate altre modifiche. Se il job è lento, puoi provare 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, aumentando le quote CPU, indirizzi IP in uso e disco permanente standard potrebbero ridurre del job, ma potresti incorrere in tempi addebiti.

  • Controlla l'utilizzo della CPU di Spanner: se noti che la CPU di utilizzo dell'istanza supera il 65%, puoi aumentare la capacità di calcolo dell'istanza. La capacità aggiunge altre risorse Spanner e il job dovrebbe velocizzarsi, ma gli addebiti Spanner aumentano.

Fattori che influiscono sulle prestazioni del job di importazione

Diversi fattori influiscono sul tempo necessario per completare un job di importazione.

  • 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 stream di modifiche

Tieni presente che l'indice e la chiave esterna La creazione continua dopo il job di importazione di Dataflow vengono completate. Gli stream di modifiche vengono creati prima del completamento 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. Possibilmente, tutti e tre si trovano nella stessa regione. Se i componenti non si trovano nella stessa regione, lo spostamento dei dati tra le regioni rallenta il job.

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

  • Carico esistente su Spanner: un job di importazione aggiunge sulla CPU per un'istanza Spanner. Se l'istanza ha già un carico 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 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 molto dalle dimensioni dei dati, ma idealmente l'utilizzo totale della CPU di Spanner dovrebbe essere compreso tra il 70% e il 90%. Ciò offre un buon equilibrio tra l'efficienza di Spanner e il 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 di 10 nodi, utilizzando worker n1-standard-2, dovresti impostare il numero massimo di worker su 25, ottenendo 50 vCPU.