Esportare i dati in Spanner (ETL inverso)
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 a una tabella Spanner.
Questo flusso di lavoro ETL inverso combina le funzionalità di analisi in BigQuery con bassa latenza e velocità effettiva elevata in Spanner. Questo flusso di lavoro ti consente di pubblicare dati per gli utenti dell'applicazione senza esaurire le quote e i limiti di BigQuery.
Prima di iniziare
Crea un database Spanner che includa una tabella per ricevere i dati esportati.
Concedi ruoli IAM (Identity and Access Management) che forniscono agli utenti le autorizzazioni necessarie per eseguire ogni attività descritta in questo documento.
Crea una prenotazione Enterprise o di livello superiore. Puoi ridurre i costi di calcolo di BigQuery quando esegui esportazioni una tantum in Spanner impostando una capacità di slot di base pari a zero e attivando la scalabilità automatica.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per esportare i dati BigQuery in Spanner, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Esporta i dati da una tabella BigQuery:
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) -
Esegui un job di esportazione:
Utente BigQuery (
roles/bigquery.user
) -
Controlla i parametri dell'istanza Spanner:
Visualizzatore Cloud Spanner (
roles/spanner.viewer
) -
Scrivi dati in una tabella Spanner:
Utente database Cloud Spanner (
roles/spanner.databaseUser
)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Limitazioni
Questa funzionalità non è supportata in Assured Workloads.
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 |
|
GoogleSQL |
|
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 è figlio di un'altra tabella (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 padre non esiste, l'esportazione non riuscirà e verrà visualizzato il messaggio "La riga padre non è presente. Errore "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 riuscirà e verrà visualizzato l'errore "Violazione del vincolo di chiave esterna". Quando esporti in più tabelle, ti consigliamo di sequenziare l'esportazione per garantire che l'integrità referenziale venga mantenuta durante l'esportazione. In genere, questo significa esportare le tabelle principali e le tabelle a cui viene fatto riferimento dalle chiavi esterne prima delle tabelle che fanno riferimento a queste.
Se la tabella di destinazione dell'esportazione ha vincoli di chiave esterna o è figlio di un'altra tabella (INTERLEAVE IN PARENT), la tabella padre deve essere compilata prima dell'esportazione di una tabella figlio e deve contenere tutte le chiavi corrispondenti. Il tentativo di esportare una tabella secondaria mentre una tabella principale non dispone del 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 dei job di esportazione di grandi dimensioni, vedi Ottimizzazione dell'esportazione. In alternativa, valuta la possibilità di dividere 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 il calcolo on demand non sono supportati.
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 Google Cloud progetto.INSTANCE_ID
: il nome dell'istanza del database.DATABASE_ID
: il nome del tuo 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
.- (Facoltativo)
TAG
: Tag richiesta per identificare il traffico dell'esportatore nel monitoraggio di Spanner. Valore predefinito:bq_export
.
Requisiti per l'esportazione delle query
Per esportare i risultati della query in Spanner, questi devono soddisfare i seguenti requisiti:
- Tutte le colonne nel set di risultati devono esistere nella tabella di destinazione e i relativi tipi devono corrispondere o essere convertibili.
- 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.
- Prima di esportare in Spanner, tutti i tipi di colonne non supportati devono essere convertiti in uno dei tipi supportati.
Conversioni dei tipi
Per facilità d'uso, lo strumento di esportazione Spanner applica automaticamente le seguenti conversioni di tipo:
Tipo BigQuery | Tipo di chiave |
---|---|
BIGNUMERIC | NUMERIC (solo dialetto PostgreSQL) |
FLOAT64 | FLOAT32 |
BYTES | PROTO |
INT64 | ENUM |
Esporta i dati
Puoi utilizzare l'istruzione
EXPORT DATA
per esportare i dati da una tabella BigQuery in una
tabella Spanner.
Il seguente esempio 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 Google Cloud progettoINSTANCE_ID
: il nome dell'istanza del databaseDATABASE_ID
: il nome del databaseTABLE_NAME
: il nome di una tabella di destinazione esistente
Esportare più risultati con lo stesso valore di rowkey
Quando esporti un risultato contenente più righe con lo stesso valore rowkey
,
i valori scritti in Spanner finiscono nella stessa
riga di Spanner. Nel set di righe Spanner prodotto dall'esportazione sarà presente solo una riga BigQuery corrispondente (non è garantito quale).
Ottimizzazione dell'esportazione
Per ottimizzare l'esportazione dei record da BigQuery a Spanner, puoi provare a:
Aumentare il 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 della velocità effettiva di esportazione. Potrebbe verificarsi un leggero ritardo durante l'esecuzione della divisione basata sul carico da parte di Spanner. Con la suddivisione basata sul carico, la velocità effettiva di esportazione aumenterà e si stabilizzerà poco dopo. Per ulteriori dettagli su come massimizzare la velocità effettiva di scrittura, consulta Panoramica del rendimento.
Specifica la priorità
HIGH
all'interno dispanner_options
. Tuttavia, questa operazione può causare un significativo degrado 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, lo strumento di esportazione ordina automaticamente le chiavi primarie della tabella di destinazione per semplificare le scritture e ridurre al minimo la contesa.
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 vengano ordinati correttamente.
Prezzi
Le esportazioni BigQuery in Spanner che attraversano i confini regionali vengono addebitate utilizzando le tariffe di estrazione dei dati. Per ulteriori informazioni, vedi Prezzi di BigQuery. Per evitare addebiti per il trasferimento di dati, assicurati che l'esportazione BigQuery venga eseguita nella stessa regione del leader predefinito di Spanner.
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.