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 puoi farlo utilizzando Dichiarazione EXPORT DATA per esportare i dati da una tabella BigQuery a un 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 la ruoli o altri ruoli predefiniti ruoli.

Limitazioni

  • I seguenti tipi di dati BigQuery non hanno equivalenti in Spanner e non sono supportati:
Dialetto di database Spanner Tipi di BigQuery non supportati
Tutti i dialetti
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: il tipo di NUMERIC supportato è non abbastanza larga. Considera l'aggiunta di trasmissioni esplicite al Digita NUMERIC 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 chiavi esterne, 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 facendo riferimento a una chiave che non esiste, l'esportazione non riuscirà con "Vincolo di chiave esterna violato" . Quando esporti in più tabelle, consigliamo di creare una sequenza dell'esportazione per garantire che l'integrità referenziale tramite 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 chiavi esterne 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 per l'esportazione. In alternativa, considera 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. La versione BigQuery Standard e il calcolo on demand non sono supportati.

Configura le esportazioni con l'opzione spanner_options

Puoi utilizzare l'opzione spanner_options per specificare una destinazione e la tabella Spanner. 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. Predefinita valore: MEDIUM.
  • TAG (facoltativo): richiedere tag per identificare il traffico degli esportatori nel monitoraggio di Spanner. Valore predefinito: bq_export.

Requisiti delle query di esportazione

Per esportare i risultati della query in Spanner, i risultati devono soddisfare le i seguenti requisiti:

  • Tutte le colonne nel set di risultati devono esistere nella tabella di destinazione e le relative i 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 all'interno delle tabelle di Spanner.
  • Eventuali tipi di colonne non supportati devono essere convertiti in uno dei tipi supportati prima dell'esportazione in Spanner.

Esporta i dati

Puoi utilizzare lo Dichiarazione EXPORT DATA per esportare i dati da una tabella BigQuery in un 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 nello stesso 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 leggero ritardo durante l'esecuzione di Spanner la suddivisione basata sul carico. 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 all'interno di spanner_options. Tuttavia, questo può causare un peggioramento significativo delle prestazioni per altri e 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, deve aggiungere le colonne generate espressioni alla query per garantire i dati esportati siano ordinati correttamente.

Prezzi

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

Dopo l'esportazione dei dati, ti viene addebitato il costo per l'archiviazione Spanner. Per ulteriori informazioni, consulta la pagina Prezzi di Spanner.