Questa pagina descrive come importare i database Spanner in Spanner utilizzando la console Google Cloud. Per importare file Avro da un'altra origine, vedi Importa i dati da database non Spanner.
Il processo utilizza Dataflow; importa i dati da una cartella del bucket Cloud Storage contenente un insieme 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 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, devi prima abilitare Spanner, Cloud Storage API Compute Engine e Dataflow:
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 avere una capacità di calcolo sufficiente in base alla quantità di dati che importi. 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 tempo ragionevole. 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. 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 che consenti 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. Dataflow offre scalabilità automatica, in modo da pagare solo e le risorse effettive utilizzate durante l'importazione. Se il tuo lavoro può utilizzare altre risorse, la UI 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:
-
Visualizzatore Cloud Spanner (
roles/spanner.viewer
) -
Nodo worker di Dataflow (
roles/dataflow.worker
) -
Amministratore archiviazione (
roles/storage.admin
) -
Lettore database Spanner (
roles/spanner.databaseReader
) -
Amministratore database (
roles/spanner.databaseAdmin
)
(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.
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, 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 tabellaSongs
.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 solo con lo schema Avro del flusso di modifiche.
Importa un database
Per importare il database Spanner da Cloud Storage all'istanza, segui questi passaggi.
Vai alla pagina Istanze di Spanner.
Fai clic sul nome dell'istanza che conterrà il database importato.
Fai clic sulla voce di menu Importa/Esporta nel riquadro a sinistra, quindi fai clic sul Pulsante Importa.
In Scegli una cartella di origine, fai clic su Sfoglia.
Trova il bucket che contiene l'esportazione nell'elenco iniziale o fai clic su Cerca per filtrare l'elenco e trovare il bucket. Fai doppio clic sul bucket per visualizzare alle cartelle che contiene.
Individua la cartella con i file esportati e fai clic per selezionarla.
Fai clic su Seleziona.
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.
Scegli il dialetto per il nuovo database (GoogleSQL o PostgreSQL).
(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). Quindi, seleziona una chiave da dall'elenco a discesa.
Seleziona una regione dal menu a discesa Scegli una regione per il job di importazione.
(Facoltativo) Per criptare lo stato della pipeline di 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.
Seleziona la casella di controllo in Conferma addebiti per confermare che sono presenti oltre a quelli sostenuti dall'istanza Spanner esistente.
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:
Quando il job termina o termina, la console Google Cloud mostra nella pagina Dettagli del database. Se il job ha esito positivo, viene visualizzato un messaggio di riuscita dell'immagine:
Se il job non riesce, viene visualizzato un messaggio di errore:
Se il job non va a buon fine, controlla i log di Dataflow del job per i dettagli dell'errore e consulta la sezione 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 ricreare quella colonna. Spanner calcola automaticamente i valori delle colonne generate durante l'importazione.
Analogamente, Spanner utilizza la definizione di ogni stream di modifiche nello schema Avro per ricrearlo durante l'importazione. Cambia i dati dei flussi non vengono esportati né importati tramite Avro, le modifiche in tempo reale associate a un database appena importato avranno senza modificare i record di dati.
Nota sull'importazione di sequenze
Ogni sequenza (GoogleSQL, PostgreSQL) esportata da Spanner utilizza la funzione GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) per acquisire il relativo stato corrente. Spanner aggiunge un buffer di 1000 al contatore e scrive il nuovo alle proprietà del campo del record. Tieni presente che questo è solo un modello per evitare errori di valori duplicati che potrebbero verificarsi dopo l'importazione. Regola il contatore della sequenza effettiva se ci sono più scritture nel durante l'esportazione dei dati.
Al momento dell'importazione, la sequenza inizia da questo nuovo contatore anziché da quello trovato nello schema. Se necessario, puoi utilizzare l'istruzione ALTER SEQUENCE (GoogleSQL, PostgreSQL) per eseguire l'aggiornamento a un nuovo contatore.
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, la chiave esterna i vincoli non vengono applicati 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, ti consigliamo di eliminare eventuali 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 località in cui si trova nel 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 è una doppia regione, puoi usufruire dell'utilizzo gratuito della rete scegliendo una delle due regioni che compongono la doppia regione per il tuo 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 gli addebiti per il trasferimento di dati in uscita. Consulta i prezzi del trasferimento di dati di Cloud Storage per scegliere una regione con gli addebiti per il trasferimento di dati più bassi.
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 eventuali job di importazione o esportazione eseguiti nell'ultima settimana, inclusi quelli in esecuzione:
- Vai alla pagina Panoramica del database per il database.
- Fai clic sull'elemento di menu Importazione/esportazione nel riquadro di sinistra. La pagina database Importa/Esporta mostra un elenco di job recenti.
Nella pagina Importazione/esportazione del database, fai clic sul nome del job nella colonna Nome job Dataflow:
La console Google Cloud mostra i dettagli di Dataflow un lavoro.
Per visualizzare un job eseguito più di una settimana fa:
Vai alla pagina dei job Dataflow nella console Google Cloud.
Individua il tuo job nell'elenco e fai clic sul suo nome.
La console Google Cloud mostra i dettagli di Dataflow un lavoro.
Visualizzare i log di Dataflow per il job
Per visualizzare i log di un job Dataflow, vai alla pagina dei dettagli del job, quindi fai clic su Log a destra del nome del job.
Se un job ha esito negativo, cerca gli errori nei log. Se ci sono errori, l'errore il conteggio delle voci viene visualizzato accanto a Log:
Per visualizzare gli errori del job:
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.
Individua le voci con l'icona di errore .
Fai clic su una singola voce di log per espanderne il contenuto.
Per ulteriori informazioni sulla risoluzione dei problemi dei job Dataflow, consulta Risolvi 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 viene eseguito utilizzando troppi worker, il che comporta un carico eccessivo sull'istanza Spanner.
per specificare un limite al numero di worker Dataflow, anziché utilizzando la scheda Importa/Esporta nella pagina dei dettagli dell'istanza del nella console Google Cloud, devi avvia l'importazione utilizzando Dataflow Modello da Avro a Spanner di Cloud Storage e specificare il numero massimo di worker come descritto:Console
Se utilizzi la console Dataflow, il parametro Numero massimo di worker si trova nella sezione Parametri facoltativi della pagina Crea job da modello.
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_Avro_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 intenda utilizzare
una rete VPC in modalità automatica denominata default
nello stesso progetto della
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 con esecuzione lenta
Se hai seguito i suggerimenti nelle impostazioni iniziali, in genere non devi apportare 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.
Assicurati di disporre di risorse Dataflow sufficienti: se le quote Compute Engine pertinenti limitano le risorse del tuo job Dataflow, la pagina Dataflow del job nella console Google Cloud mostra un'icona di avviso e messaggi di log:
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.
Controlla l'utilizzo della CPU di Spanner: se noti che la CPU per l'istanza è superiore al 65%, puoi aumentare la capacità di calcolo dell'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 sul rendimento 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, 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
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.
Località dei dati: i dati vengono trasferiti tra Spanner e Cloud Storage usando 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. 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'icona di avviso se vengono raggiunti i 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 un carico della CPU significativo a 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 sovraccarica Spanner e un numero troppo basso di worker si traduce in un problema le prestazioni di importazione.
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%. 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 di 10 nodi, utilizzando worker n1-standard-2, dovresti impostare il numero massimo di worker su 25, ottenendo 50 vCPU.