Esportare i dati in Spanner (ETL inverso)

Per fornire feedback o richiedere assistenza per questa funzionalità, invia un'email all'indirizzo bq-cloud-spanner-federation-preview@google.com

Questo documento descrive come configurare un flusso di lavoro di estrazione, trasformazione e caricamento inverso (ETL inverso) da BigQuery a Spanner. Puoi farlo utilizzando l'istruzione EXPORT DATA per esportare i dati da una tabella BigQuery in una tabella Spanner.

Questo flusso di lavoro ETL inverso combina le funzionalità di analisi in BigQuery con bassa latenza e elevato throughput in Spanner. Questo flusso di lavoro ti consente di fornire dati agli utenti dell'applicazione senza esaurire le quote e i limiti di BigQuery.

Prima di iniziare

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per esportare i dati di BigQuery in Spanner, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni

  • I seguenti tipi di dati BigQuery non hanno equivalenti in Spanner e non sono supportati:
Dialetto del database Spanner Tipi BigQuery non supportati
Tutti i dialetti
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: il tipo di NUMERIC supportato non è sufficientemente ampio. Valuta la possibilità di aggiungere conversioni esplicite al NUMERIC tipo nella query.
  • La dimensione massima di una riga esportata non può superare 1 MiB.

  • Spanner applica l'integrità referenziale durante l'esportazione. Se la tabella di destinazione è una tabella figlio di un'altra (INTERLEAVE IN PARENT) o se la tabella di destinazione ha vincoli di chiave esterna, le chiavi esterne e la chiave padre verranno convalidate durante l'esportazione. Se una riga esportata viene scritta in una tabella con INTERLEAVE IN PARENT e la riga principale non esiste, l'esportazione non andrà a buon fine con il messaggio "Riga principale mancante". Impossibile scrivere la riga". Se la riga esportata viene scritta in una tabella con vincoli di chiave esterna e fa riferimento a una chiave inesistente, l'esportazione non andrà a buon fine con l'errore "Violazione del vincolo di chiave esterna". Quando esporti in più tabelle, consigliamo di sequenziare l'esportazione per assicurarti che l'integrità referenziale venga mantenuta durante l'esportazione. In genere, questo significa esportare le tabelle principali e quelle a cui fanno riferimento le chiavi esterne prima delle tabelle che fanno riferimento a queste.

    Se la tabella di destinazione dell'esportazione presenta vincoli di chiave esterna o è una tabella figlia di un'altra (INTERLEAVE IN PARENT), la tabella principale deve essere compilata prima dell'esportazione di una tabella figlia e deve contenere tutte le chiavi corrispondenti. Un tentativo di esportare una tabella secondaria quando una tabella principale non ha il set completo di chiavi pertinenti non andrà a buon fine.

  • Un job di esportazione in Spanner ha una durata massima di 6 ore. Per informazioni sull'ottimizzazione di job di esportazione di grandi dimensioni, consulta Ottimizzazione dell'esportazione. In alternativa, valuta la possibilità di suddividere l'input in singoli blocchi di dati, che possono essere esportati come singoli job di esportazione.

  • Le esportazioni in Spanner sono supportate solo per le versioni BigQuery Enterprise o Enterprise Plus. L'edizione BigQuery Standard e l'elaborazione on demand non sono supportate.

Configurare le esportazioni con l'opzione spanner_options

Puoi utilizzare l'opzione spanner_options per specificare un database e una tabella Spanner di destinazione. La configurazione è espressa sotto forma di stringa JSON, come mostrato nell'esempio seguente:

EXPORT DATA OPTIONS(
   uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
   spanner_options = """{
      "table": "TABLE_NAME",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Sostituisci quanto segue:

  • PROJECT_ID: il nome del tuo progetto Google Cloud.
  • INSTANCE_ID: il nome dell'istanza del database.
  • DATABASE_ID: il nome del database.
  • TABLE_NAME: il nome di una tabella di destinazione esistente.
  • PRIORITY (facoltativo): priorità delle richieste di scrittura. Valori consentiti: LOW, MEDIUM, HIGH. Valore predefinito: MEDIUM.
  • TAG (facoltativo): tag richiesta per contribuire a identificare il traffico degli esportatori nel monitoraggio di Spanner. Valore predefinito: bq_export.

Requisiti per le query di esportazione

Per esportare i risultati delle query in Spanner, questi devono soddisfare i seguenti requisiti:

  • Tutte le colonne del set di risultati devono esistere nella tabella di destinazione e i relativi tipi devono corrispondere.
  • Il set di risultati deve contenere tutte le colonne NOT NULL per la tabella di destinazione.
  • I valori delle colonne non devono superare i limiti di dimensione dei dati di Spanner all'interno delle tabelle.
  • Eventuali tipi di colonne non supportati devono essere convertiti in uno dei tipi supportati prima dell'esportazione in Spanner.

Esporta i dati

Puoi utilizzare l'istruzione EXPORT DATA per esportare i dati da una tabella BigQuery in una tabella Spanner.

L'esempio seguente esporta i campi selezionati da una tabella denominata mydataset.table1:

EXPORT DATA OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "TABLE_NAME" }"""
)
AS SELECT * FROM mydataset.table1;

Sostituisci quanto segue:

  • PROJECT_ID: il nome del tuo progetto Google Cloud
  • INSTANCE_ID: il nome dell'istanza del database
  • DATABASE_ID: il nome del database
  • TABLE_NAME: il nome di una tabella di destinazione esistente

Esportare più risultati con lo stesso valore rowkey

Quando esporti un risultato contenente più righe con lo stesso valore rowkey, i valori scritti in Spanner finiscono nella stessa riga Spanner. Nel set di righe Spanner prodotto dall'esportazione sarà presente una sola riga BigQuery corrispondente (non è garantito quale).

Ottimizzazione dell'esportazione

Per ottimizzare l'esportazione dei record da BigQuery a Spanner, puoi provare quanto segue:

  • Aumento del numero di nodi nell'istanza di destinazione Spanner. Tieni presente che durante le prime fasi dell'esportazione, l'aumento del numero di nodi nell'istanza potrebbe non causare immediatamente un aumento del throughput dell'esportazione. Potrebbe verificarsi un lieve ritardo durante l'esecuzione della suddivisione in base al carico da parte di Spanner. Con la suddivisione in base al carico, il throughput dell'esportazione aumenterà e si stabilizzerà poco dopo. Per ulteriori dettagli su come massimizzare il throughput di scrittura, consulta Panoramica del rendimento.

  • Specifica la priorità HIGH in spanner_options. Tuttavia, questa operazione può causare un degrado significativo delle prestazioni per altri carichi di lavoro gestiti dalla stessa istanza.

  • Evita di ordinare i risultati della query. Se il set di risultati contiene tutte le colonne della chiave primaria, l'esportatore ordina automaticamente le chiavi primarie della tabella di destinazione per semplificare le scritture e ridurre al minimo le contese.

    Se la chiave primaria della tabella di destinazione include colonne generate, devi aggiungere le espressioni delle colonne generate alla query per assicurarti che i dati esportati siano ordinati correttamente.

Prezzi

Per informazioni sui prezzi dell'esportazione dei dati, consulta Prezzi di BigQuery.

Una volta esportati i dati, ti viene addebitato il costo di archiviazione dei dati in Spanner. Per ulteriori informazioni, consulta la pagina Prezzi di Spanner.