Questa pagina descrive come esportare i database Spanner con la consoleGoogle Cloud .
Per esportare un database Spanner utilizzando l'API REST o Google Cloud CLI, completa i passaggi nella sezione Prima di iniziare di questa pagina, quindi consulta le istruzioni dettagliate in Da Spanner ad Avro di Cloud Storage nella documentazione di Dataflow. Il processo di esportazione utilizza Dataflow e scrive i dati in una cartella in un bucket Cloud Storage. La cartella risultante contiene un insieme di file Avro e file manifest JSON.
Prima di iniziare
Per esportare un database Spanner, devi prima abilitare le API Spanner, Cloud Storage, Compute Engine e Dataflow:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin).
Scopri come concedere i ruoli.
Devi inoltre disporre di una quota sufficiente e delle autorizzazioni IAM richieste.
Requisiti relativi alle quote
I requisiti di quota per i job di esportazione sono i seguenti:
- Spanner: non è richiesta capacità di calcolo aggiuntiva per esportare un database, anche se potrebbe essere necessario aggiungere ulteriore capacità di calcolo per completare il job in un periodo di tempo ragionevole. Per ulteriori dettagli, consulta Ottimizza i job.
- Cloud Storage: per 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 esportazione sono soggetti alle stesse quote di Compute Engine relative a CPU, utilizzo del disco e indirizzi IP degli altri job Dataflow.
Compute Engine: prima di eseguire il job di esportazione, devi configurare le quote iniziali per Compute Engine, utilizzate 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
- Standard Persistent Disk: 50 TB
In genere, non è necessario apportare altre modifiche. Dataflow fornisce la scalabilità automatica in modo che tu paghi solo per le risorse effettivamente utilizzate durante l'esportazione. Se il job può utilizzare più risorse, l'interfaccia utente di Dataflow visualizza un'icona di avviso. 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 sul account di servizio worker Dataflow:
- Cloud Spanner Viewer (
roles/spanner.viewer) - Dataflow Worker (
roles/dataflow.worker) - Storage Admin (
roles/storage.admin) - Spanner Database Reader (
roles/spanner.databaseReader) - Database Admin (
roles/spanner.databaseAdmin)
Per utilizzare le risorse di computing indipendenti di Spanner Data Boost durante un'esportazione,
devi anche disporre dell'autorizzazione Identity and Access Management (IAM)
spanner.databases.useDataBoost. Per saperne di più, consulta la panoramica di Data Boost.
Esporta un database
Dopo aver soddisfatto i requisiti di quota e IAM descritti in precedenza, puoi esportare un database Spanner esistente.
Per esportare il database Spanner in un bucket Cloud Storage, segui questi passaggi:
Vai alla pagina Istanze di Spanner.
Fai clic sul nome dell'istanza che contiene il tuo database.
Fai clic sulla voce di menu Importa/Esporta nel riquadro a sinistra, quindi sul pulsante Esporta.
In Scegli dove archiviare l'esportazione, fai clic su Sfoglia.
Se non hai già un bucket Cloud Storage per l'esportazione:
- Fai clic su Nuovo bucket
. - Inserisci un nome per il bucket. I nomi dei bucket devono essere univoci in Cloud Storage.
- Seleziona una classe di archiviazione e una località predefinite, quindi fai clic su Crea.
- Fai clic sul bucket per selezionarlo.
Se hai già un bucket, selezionalo dall'elenco iniziale o fai clic su Cerca
per filtrare l'elenco, quindi fai clic sul bucket per selezionarlo.- Fai clic su Nuovo bucket
Fai clic su Seleziona.
Seleziona il database che vuoi esportare nel menu a discesa Scegli un database da esportare.
(Facoltativo) Per esportare il database da un point-in-time precedente, seleziona la casella e inserisci un timestamp.
Seleziona una regione nel menu a discesa Scegli una regione per il job di esportazione.
(Facoltativo) Per criptare lo stato della pipeline Dataflow con una chiave di crittografia gestita dal cliente:
- Fai clic su Mostra opzioni di crittografia.
- Seleziona Utilizza una chiave di crittografia gestita dal cliente (CMEK).
- Seleziona la chiave dall'elenco a discesa.
Questa opzione non influisce sulla crittografia a livello di bucket Cloud Storage di destinazione. Per abilitare CMEK per il tuo bucket Cloud Storage, consulta Utilizza CMEK con Cloud Storage.
(Facoltativo) Per esportare utilizzando Data Boost, seleziona la casella di controllo Utilizza Spanner Data Boost. Per saperne di più, consulta la panoramica di Data Boost.
Seleziona la casella di controllo in Conferma addebiti per confermare che sono presenti addebiti aggiuntivi rispetto a quelli sostenuti per l'istanza Spanner esistente.
Fai clic su Esporta.
La console Google Cloud mostra la pagina Importazione/esportazione database, che ora mostra una voce per il job di esportazione nell'elenco dei job di importazione/esportazione, incluso il tempo trascorso del job:

Quando il job termina o viene interrotto, lo stato viene aggiornato nell'elenco Import/Export. Se il job è stato eseguito correttamente, viene visualizzato lo stato Riuscito:

Se il job non è riuscito, viene visualizzato lo stato Non riuscito:

Per visualizzare i dettagli dell'operazione Dataflow per il tuo job, fai clic sul nome del job nella colonna Nome job Dataflow.
Se il job non va a buon fine, controlla i log di Dataflow del job per i dettagli dell'errore.
Per evitare addebiti di Cloud Storage per i file creati dal job di esportazione non riuscito, elimina la cartella e i relativi file. Per informazioni su come trovare la cartella, consulta Visualizza l'esportazione.
Nota sull'esportazione di colonne generate e modifiche in tempo reale
I valori di una colonna generata archiviata non vengono esportati. La definizione della colonna viene esportata nello schema Avro come campo di record di tipo null, con la definizione della colonna come proprietà personalizzate del campo. Finché l'operazione di backfill di una colonna generata appena aggiunta non viene completata, la colonna generata viene ignorata come se non esistesse nello schema.
I flussi di modifiche esportati come file Avro contengono solo lo schema dei modifiche in tempo reale e non i record delle modifiche ai dati.
Nota sull'esportazione delle sequenze
Le sequenze (GoogleSQL, PostgreSQL) sono oggetti dello schema che si utilizzano per generare valori interi univoci.
Spanner esporta ogni oggetto dello schema nello schema Avro come campo di record, con il tipo di sequenza, l'intervallo saltato e il contatore come proprietà del campo. Tieni presente che per evitare che una sequenza venga reimpostata e generi valori duplicati dopo l'importazione, durante l'esportazione dello schema, la funzione GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) acquisisce il contatore della sequenza. Spanner aggiunge un buffer di 1000 al contatore e scrive il nuovo valore del contatore nel campo del record. Questo approccio evita errori di valori duplicati che potrebbero verificarsi dopo l'importazione.
Se durante l'esportazione dei dati vengono eseguite più scritture nel database di origine, devi
modificare il contatore della sequenza effettiva utilizzando l'istruzione ALTER SEQUENCE
(GoogleSQL,
PostgreSQL).
Durante l'importazione, la sequenza inizia da questo nuovo contatore anziché da quello
trovato nello schema. In alternativa, puoi utilizzare l'istruzione ALTER SEQUENCE
(GoogleSQL,
PostgreSQL)
per aggiornare la sequenza con un nuovo contatore.
Visualizza l'esportazione in Cloud Storage
Per visualizzare la cartella che contiene il database esportato nella consoleGoogle Cloud , vai al browser Cloud Storage e scegli il bucket selezionato in precedenza:
Il bucket ora contiene una cartella con il database esportato. Il nome della cartella 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.jsonper ogni tabella del database esportato. Uno o più file
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 tabellaSongs.Un file
ChangeStreamName-manifest.jsonper ogni modifiche in tempo reale nel database che hai esportato.Un file
ChangeStreamName.avro-00000-of-00001per ogni stream di modifiche. Questo file contiene dati vuoti con solo lo schema Avro delle modifiche in tempo reale.
Scegli una regione per il job di importazione
Potresti scegliere una regione diversa in base alla località 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 località del bucket Cloud Storage è una regione, puoi usufruire dell'utilizzo della rete senza costi scegliendo la stessa regione per il job di importazione, supponendo che sia disponibile.
Se la località del bucket Cloud Storage è a due regioni, puoi usufruire dell'utilizzo della rete senza costi scegliendo una delle due regioni che compongono la località a due regioni per il job di importazione, supponendo che una delle regioni sia disponibile.
- Se non è disponibile una regione in co-location per il job di importazione o se la località del bucket Cloud Storage è una multi-regione, vengono applicati 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 di trasferimento di dati più bassi.
Esporta un sottoinsieme di tabelle
Se vuoi esportare solo i dati di alcune tabelle e non l'intero database, puoi specificare queste tabelle durante l'esportazione. In questo caso, Spanner esporta l'intero schema del database, inclusi i dati delle tabelle specificate, lasciando tutte le altre tabelle presenti ma vuote nel file esportato.
Puoi specificare un sottoinsieme di tabelle da esportare utilizzando la pagina Dataflow nella console Google Cloud o gcloud CLI. (La pagina Spanner non fornisce questa azione.)
Se esporti i dati di una tabella figlio di un'altra tabella, devi esportare anche i dati della tabella padre. Se i genitori non vengono esportati, il job di esportazione non va a buon fine.
Per esportare un sottoinsieme di tabelle, avvia l'esportazione utilizzando il modello Avro da Spanner a Cloud Storage di Dataflow e specifica le tabelle utilizzando la pagina Dataflow nella console Google Cloud o gcloud CLI, come descritto:
Console
Se utilizzi la pagina Dataflow nella console Google Cloud , il parametro Nomi delle tabelle Cloud Spanner si trova nella sezione Parametri facoltativi della pagina Crea job da modello. È possibile specificare più tabelle in un formato separato da virgole.
gcloud
Esegui il comando gcloud dataflow jobs run e specifica l'argomento tableNames. Ad esempio:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=table1,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
La specifica di più tabelle in gcloud richiede l'escaping degli argomenti di tipo dizionario.
L'esempio seguente utilizza "|" come carattere di escape:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='^|^instanceId=test-instance|databaseId=example-db|tableNames=table1,table2|outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Il parametro shouldExportRelatedTables è un'opzione utile per esportare automaticamente tutte le tabelle principali delle tabelle scelte. Ad esempio, in questa gerarchia di schemi con le tabelle Singers, Albums e Songs, devi specificare solo Songs. L'opzione shouldExportRelatedTables esporterà anche Singers
e Albums perché Songs è un discendente di entrambi.
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,tableNames=Songs,shouldExportRelatedTables=true,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Visualizza o risolvi i problemi dei job nell'interfaccia utente di Dataflow
Dopo aver avviato un job di esportazione, puoi visualizzarne i dettagli, inclusi i log, nella sezione Dataflow della console Google Cloud .
Visualizza i dettagli del job Dataflow
Per visualizzare i dettagli di tutti i job di importazione o esportazione eseguiti nell'ultima settimana, inclusi quelli attualmente in esecuzione:
- Vai alla pagina Panoramica del database per il database.
- Fai clic sulla voce di menu Importa/Esporta nel riquadro a sinistra. La pagina Importa/Esporta del database mostra un elenco dei job recenti.
Nella pagina Importa/Esporta del database, fai clic sul nome del job nella colonna Nome job Dataflow:

La console Google Cloud mostra i dettagli del job Dataflow.
Per visualizzare un job eseguito più di una settimana fa:
Vai alla pagina dei job Dataflow nella console Google Cloud .
Trova il tuo job nell'elenco e 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, 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 sono presenti errori, il numero di errori viene visualizzato accanto a Log:

Per visualizzare gli errori dei job:
Fai clic sul conteggio degli errori accanto a Log.
La console Google Cloud mostra i log del job. Potresti dover scorrere per visualizzare gli errori.
Individua le voci con l'icona di errore
.Fai clic su una singola voce di log per espanderne i contenuti.
Per saperne di più sulla risoluzione dei problemi relativi ai job Dataflow, consulta Risolvi i problemi relativi alla pipeline.
Risolvi i problemi relativi ai job di esportazione non riusciti
Se nei log dei 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 del 99% nella scheda Monitoraggio del tuo database Spanner nella consoleGoogle Cloud . Se mostra valori elevati (più secondi), significa che l'istanza è sovraccarica, il che causa il timeout e l'errore delle letture.
Una causa della latenza elevata è che il job Dataflow è in esecuzione con troppi worker, il che sovraccarica l'istanza Spanner.
Per specificare un limite al numero di worker Dataflow, anziché utilizzare la scheda Importa/Esporta nella pagina dei dettagli dell'istanza del database Spanner nella console Google Cloud , devi avviare l'esportazione utilizzando il modello Avro da Spanner a Cloud Storage di Dataflow 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 il comando gcloud dataflow jobs run e specifica l'argomento max-workers. Ad esempio:
gcloud dataflow jobs run my-export-job \
--gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
--region=us-central1 \
--parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
--max-workers=10 \
--network=network-123
Risolvi l'errore di rete
Quando esporti i database Spanner, potrebbe verificarsi il seguente errore:
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 nel progetto o se la tua rete VPC è in modalità personalizzata, devi creare un job Dataflow e specificare una rete o una subnet alternativa.
Ottimizza i job di esportazione lenti
Se hai seguito i suggerimenti nelle impostazioni iniziali, in genere non dovresti apportare altre modifiche. Se il job viene eseguito lentamente, puoi provare alcune altre ottimizzazioni:
Ottimizza la località dei dati e del job: esegui il job Dataflow nella stessa regione in cui si trovano l'istanza Spanner e il bucket Cloud Storage.
Assicurati di avere 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
e messaggi di log:
In questo caso, l'aumento delle quote per CPU, indirizzi IP in uso e Standard Persistent Disk potrebbe ridurre il tempo di esecuzione del job, ma potresti incorrere in ulteriori addebiti per Compute Engine.
Controlla l'utilizzo della CPU di Spanner: se l'utilizzo della CPU per l'istanza è superiore al 65%, puoi aumentare la capacità di calcolo nell'istanza. La capacità aggiunge più risorse Spanner e il job dovrebbe accelerare, ma ti verranno addebitati più costi di Spanner.
Fattori che influiscono sulle prestazioni dei job di esportazione
Il tempo necessario per completare un job di esportazione dipende da diversi fattori.
Dimensioni del database Spanner: l'elaborazione di più dati richiede più tempo e risorse.
Schema di 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
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: per ottenere prestazioni ottimali, è necessario un numero ottimale di worker Dataflow. 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, tuttavia, sarà limitato dalle quote per le CPU, gli indirizzi IP in uso e il 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.
Carico esistente su Spanner: un job di esportazione in genere aggiunge un carico leggero a 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.