Esporta database da Spanner ad Avro

Questa pagina descrive come esportare i database Spanner con la console Google Cloud. Per esportare un database Spanner utilizzando l'API REST o gcloud spanner a strumento a riga di comando, completa i passaggi nella Prima di iniziare di questa pagina, quindi controlla le istruzioni dettagliate in Spanner to Cloud Storage Avro nella documentazione di Dataflow. Il processo di esportazione utilizza Dataflow e scrive i dati in una cartella in un Cloud Storage. La cartella risultante contiene un insieme File Avro e file manifest JSON.

Prima di iniziare

Per esportare un database Spanner, devi prima abilitare Spanner, Cloud Storage API 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 esportazione sono i seguenti:

  • Spanner: nessun altro necessaria per 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 Ottimizzare le offerte di lavoro.
  • Cloud Storage 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 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 esportazione, 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 offre scalabilità automatica, in modo da pagare solo e le risorse effettivamente utilizzate durante l'esportazione. 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.

Requisiti IAM

Per esportare un database, devi anche avere ruoli IAM con autorizzazioni sufficienti per utilizzare tutti i servizi coinvolti in un'esportazione un lavoro. Per informazioni sulla concessione di ruoli e autorizzazioni, consulta Applica i ruoli IAM.

Per esportare un database, sono necessari i seguenti ruoli:

Per utilizzare le risorse di calcolo indipendenti di Spanner Data Boost durante un'esportazione, devi avere anche il ruolo IAM spanner.databases.useDataBoost autorizzazione. Per ulteriori informazioni, vedi Panoramica di Data Boost.

Esporta un database

Dopo aver soddisfatto i requisiti di quota e IAM descritti in precedenza, potrai esporta un database Spanner esistente.

Per esportare il tuo database Spanner in un bucket Cloud Storage, segui questa procedura.

  1. Vai alla pagina Istanze di Spanner.

    Vai alla pagina Istanze

  2. Fai clic sul nome dell'istanza contenente il database.

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

  4. In Scegli dove archiviare l'esportazione, fai clic su Sfoglia.

  5. Se non hai già un bucket Cloud Storage per l'esportazione:

    1. Fai clic su Nuovo bucket Screenshot del nuovo elemento UI del bucket.
    2. Inserisci un nome per il bucket. I nomi dei bucket devono essere univoci tra di archiviazione ideale in Cloud Storage.
    3. Seleziona una classe di archiviazione e una località predefinite e fai clic su Crea.
    4. Fai clic sul bucket per selezionarlo.

    Se hai già un bucket, selezionalo dall'elenco iniziale oppure fai clic su Cerca Screenshot dell'elemento UI di ricerca per filtrare l'elenco, poi fai clic sul bucket per selezionarlo.

  6. Fai clic su Seleziona.

  7. Seleziona il database da esportare nella sezione Scegli un database da esportare esporta.

  8. (Facoltativo) Per esportare il database da un momento precedente, seleziona la casella e inserisci un timestamp.

  9. Seleziona una regione dal menu a discesa Scegli una regione per il job di esportazione.

  10. (Facoltativo) Per criptare lo stato della pipeline Dataflow con una chiave di crittografia gestita dal cliente:

    1. Fai clic su Mostra opzioni di crittografia.
    2. Seleziona Utilizza una chiave di crittografia gestita dal cliente (CMEK).
    3. Seleziona la chiave dall'elenco a discesa.

    Questa opzione non influisce sul livello di bucket Cloud Storage di destinazione la crittografia. Per abilitare CMEK per il tuo bucket Cloud Storage, consulta Utilizza CMEK con Cloud Storage.

  11. (Facoltativo) Per eseguire l'esportazione utilizzando Spanner Data Boost, seleziona la Casella di controllo Utilizza Spanner Data Boost. Per ulteriori informazioni, vedi Panoramica di Data Boost.

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

  13. Fai clic su Esporta.

    La console Google Cloud mostra la pagina Importazione/esportazione del database, che ora mostra una voce per il job di esportazione nei job di importazione/esportazione incluso il tempo trascorso del job:

    Screenshot del job in corso

Quando il job termina o termina, lo stato viene aggiornato nella sezione dall'elenco di lettura. Se il job è riuscito, viene visualizzato lo stato Riuscito:

Messaggio di esportazione riuscita

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

Messaggio di errore del job di esportazione

Per visualizzare i dettagli dell'operazione Dataflow per il tuo job, fai clic su sul nome del job nella colonna Nome job Dataflow.

Se il job non va a buon fine, verifica la presenza di errori nei log Dataflow del job i dettagli.

Per evitare addebiti di Cloud Storage per i file un job di esportazione non riuscito, elimina la cartella e i relativi file. Consulta Visualizzare esporta per informazioni su come trovare la cartella.

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

I valori in una colonna generata archiviata non vengono esportati. La colonna viene esportata nello schema Avro come campo di record di tipo nullo, con la definizione della colonna come proprietà personalizzate del campo. Fino al backfill viene completata l'operazione di una colonna generata appena aggiunta, la colonna generata viene ignorato come se non esistesse nello schema.

Le modifiche in tempo reale esportati come file Avro contengono solo lo schema della modifiche in tempo reale e nessun record delle modifiche dei dati.

Nota sull'esportazione delle sequenze

sequenze (GoogleSQL, PostgreSQL). sono oggetti dello schema che vengono utilizzati per generare valori interi univoci. Spanner esporta ogni oggetto dello schema nello schema Avro come campo record, con il tipo di sequenza, l'intervallo ignorato e il contatore come proprietà del campo. Tieni presente che per impedire che una sequenza venga reimpostata e generata valori duplicati dopo l'importazione, durante l'esportazione dello schema, GET_INTERNAL_SEQUENCE_STATE() (GoogleSQL, PostgreSQL) acquisisce il contatore della sequenza. Spanner aggiunge un buffer 1000 nel contatore e scrive il nuovo valore nel campo Record. Questo evita errori nei valori duplicati che potrebbero verificarsi dopo l'importazione. Se durante l'esportazione dei dati sono presenti più scritture nel database di origine, devi regola il contatore effettivo della sequenza utilizzando ALTER SEQUENCE (GoogleSQL, PostgreSQL).

Al momento dell'importazione, la sequenza inizia da questo nuovo contatore anziché dal contatore presenti nello schema. In alternativa, puoi utilizzare ALTER SEQUENCE (GoogleSQL, PostgreSQL) per aggiornare la sequenza con un nuovo contatore.

Visualizza la tua esportazione in Cloud Storage

Per visualizzare la cartella che contiene il database esportato nell' Nella console Google Cloud, vai al browser Cloud Storage e scegli il bucket selezionato in precedenza:

Vai al browser di Cloud Storage

Il bucket ora contiene una cartella che contiene il database esportato. La cartella inizia con l'ID dell'istanza, il nome del database e il timestamp del un 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 tabella Songs.

  • Un file ChangeStreamName-manifest.json per ciascuno flusso di modifiche nel database esportato.

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

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. Da evitare addebiti per il trasferimento di dati in uscita, scegli una regione corrisponde alla località del bucket Cloud Storage.

  • Se la località del bucket Cloud Storage è in una regione, possono sfruttare l'utilizzo gratuito della rete scegliendo la stessa regione per il job di importazione, supponendo che la 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 le tue La località del bucket Cloud Storage è multiregionale, 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.

Esporta un sottoinsieme di tabelle

Se vuoi esportare solo i dati di determinate tabelle e non l'intero database, puoi specificare queste tabelle durante l'esportazione. Nel In questo caso, Spanner esporta l'intero schema del database, incluso i dati delle tabelle specificate e lasciando tutte le altre tabelle presenti vuoto nel file esportato.

Puoi specificare un sottoinsieme di tabelle da esportare utilizzando pagina Dataflow nella console Google Cloud o nella riga di comando. (La la pagina Spanner non fornisce questa azione.)

Se esporti i dati di una tabella figlio di un'altra tabella, deve esportare l'elemento principale con i dati della tabella. Se non vengono esportati gli elementi principali, il job di esportazione non va a buon fine.

Per esportare un sottoinsieme di tabelle, avvia l'esportazione utilizzando il Dataflow gcloud Da Spanner al modello Avro di Cloud Storage e specifica le tabelle utilizzando la pagina Dataflow nella console Google Cloud o Google Cloud CLI, come descritto di seguito:

Console Google Cloud

Se utilizzi la pagina Dataflow nella console Google Cloud, Il parametro Nome tabella Cloud Spanner si trova nella Sezione Parametri facoltativi della pagina Crea job da modello. È possibile specificare più tabelle in un formato separato da virgole.

Interfaccia a riga di comando gcloud

Se utilizzi Google Cloud CLI, usa l'argomento tableNames per specificare la tabella. 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

Per specificare più tabelle in gcloud è necessario escape dell'argomento dictionary-type. 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

Il parametro shouldExportRelatedTables è un'opzione utile per esporta automaticamente tutte le tabelle padre delle tabelle desiderate. Ad esempio, in questa gerarchia dello schema con le tabelle Singers, Albums e Songs, dobbiamo specificare solo Songs. La 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

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

Dopo aver avviato un job di esportazione, 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/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. Il database La pagina Importa/Esporta 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 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 alla pagina dei 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 come descritto sopra, poi 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:

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 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 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 del 99% nella Monitoring del tuo database Spanner nella nella console Google Cloud. Se mostra valori elevati (più secondi), indica che l'istanza è sovraccarica, con conseguenti letture timeout e non riesce.

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 per il numero di worker Dataflow, invece di utilizzare il metodo Scheda Importa/Esporta nella pagina dei dettagli dell'istanza di Spanner nella console Google Cloud, devi avviare esportarla utilizzando Dataflow Modello Avro da Cloud Spanner a Cloud Storage e specificare il numero massimo di worker come descritto di seguito:
    .
  • Se utilizzi la console Dataflow, il parametro Max worker è che 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-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
    

Ottimizza i job di esportazione 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 il job e la posizione dei dati: esegui il job Dataflow. nella stessa regione in cui si trova l'istanza Spanner si trova 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 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 sulle prestazioni del job di esportazione

Il tempo necessario per completare un job di esportazione 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

  • 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. Con la scalabilità automatica, Dataflow sceglie il numero di worker per del 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 dovrebbe comunque essere completato.

  • Carico esistente su Spanner: In genere un job di esportazione aggiunge un carico leggero su un oggetto Spanner in esecuzione in un'istanza Compute Engine. 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.