Esportare i dati in Spanner (ETL inverso)

Questo documento descrive come configurare un flusso di lavoro di estrazione, trasformazione e caricamento (ETL inverso) inverso da BigQuery a Spanner. Puoi farlo utilizzando l'istruzione EXPORT DATA per esportare i dati dalle origini dati BigQuery, incluse le tabelle Iceberg, in 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

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:

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
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC: Il tipo di NUMERIC supportato non è abbastanza ampio. Valuta la possibilità di aggiungere conversioni esplicite al tipo 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 è 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 "Parent row is missing. 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 "Il vincolo di chiave esterna è violato". 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 fanno riferimento le 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. Un 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 BigQuery, ad esempio un job di estrazione in Spanner, ha una durata massima di 6 ore. Per informazioni sull'ottimizzazione dei job di estrazione 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 estrazione.

  • 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.

  • Non puoi utilizzare le query continue per esportare nelle tabelle Spanner con chiavi primarie generate automaticamente.

  • Non puoi utilizzare le query continue per l'esportazione nelle tabelle Spanner in un database di dialetti PostgreSQL.

  • Quando utilizzi query continue per l'esportazione in una tabella Spanner, assicurati di scegliere una chiave primaria che non corrisponda a un numero intero in aumento monotono nella tabella BigQuery. In questo modo, potrebbero verificarsi problemi di rendimento nell'esportazione. Per informazioni sulle chiavi primarie in Spanner e sui modi per attenuare questi problemi di prestazioni, consulta Scegliere una chiave primaria.

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",
      "change_timestamp_column": "CHANGE_TIMESTAMP",
      "priority": "PRIORITY",
      "tag": "TAG",
   }"""
)

Sostituisci quanto segue:

  • PROJECT_ID: il nome del 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.
  • CHANGE_TIMESTAMP: il nome della colonna di tipo TIMESTAMP nella tabella Spanner di destinazione. Questa opzione viene utilizzata durante l'esportazione per monitorare il timestamp dell'aggiornamento più recente della riga. Quando questa opzione viene specificata, l'esportazione esegue prima una lettura della riga nella tabella Spanner per assicurarsi che venga scritta solo l'ultima riga aggiornata. Ti consigliamo di specificare una colonna di tipo TIMESTAMP quando esegui un'esportazione continua, in cui l'ordine delle modifiche alle righe con la stessa chiave primaria è importante.
  • (Facoltativo) PRIORITY: priorità delle richieste di scrittura. Valori consentiti: LOW, MEDIUM, HIGH. Valore predefinito: MEDIUM.
  • TAG (facoltativo): 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 dell'esportazione 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 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 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).

Esportare utilizzando una connessione CLOUD_RESOURCE

Puoi delegare le autorizzazioni di scrittura a una connessione CLOUD_RESOURCE BigQuery per eseguire le esportazioni senza concedere a un utente l'accesso diretto al database Spanner.

Prima di esportare in Spanner con una connessione CLOUD_RESOURCE:

Crea una connessione

Puoi creare o utilizzare una connessione CLOUD_RESOURCE esistente per connetterti a Spanner.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Explorer:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro a sinistra per aprirlo.

  3. Nel riquadro Explorer, espandi il nome del progetto e fai clic su Connessioni.

  4. Nella pagina Connessioni, fai clic su Crea connessione.

  5. Per Tipo di connessione, scegli Modelli remoti di Vertex AI, funzioni remote, BigLake e Spanner (risorsa Cloud).

  6. Nel campo ID connessione, inserisci un nome per la connessione.

  7. Per Tipo di località, seleziona una località per la connessione. La connessione deve essere collocata insieme alle altre risorse, ad esempio i set di dati.

  8. Fai clic su Crea connessione.

  9. Fai clic su Vai alla connessione.

  10. Nel riquadro Informazioni sulla connessione, copia l'ID dell'account di servizio da utilizzare in un passaggio successivo.

bq

  1. In un ambiente a riga di comando, crea una connessione:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    Il parametro --project_id sostituisce il progetto predefinito.

    Sostituisci quanto segue:

    • REGION: la tua regione di connessione
    • PROJECT_ID: il tuo Google Cloud ID progetto
    • CONNECTION_ID: un ID per la connessione

    Quando crei una risorsa di connessione, BigQuery crea un account di serviziot di sistema univoco e lo associa alla connessione.

    Risoluzione dei problemi: se viene visualizzato il seguente errore di connessione, aggiorna Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera e copia l'ID dell'account di servizio da utilizzare in un passaggio successivo:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    L'output è simile al seguente:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

import google.api_core.exceptions
from google.cloud import bigquery_connection_v1

client = bigquery_connection_v1.ConnectionServiceClient()


def create_connection(
    project_id: str,
    location: str,
    connection_id: str,
):
    """Creates a BigQuery connection to a Cloud Resource.

    Cloud Resource connection creates a service account which can then be
    granted access to other Google Cloud resources for federated queries.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the connection (for example, "us-central1").
        connection_id: The ID of the connection to create.
    """

    parent = client.common_location_path(project_id, location)

    connection = bigquery_connection_v1.Connection(
        friendly_name="Example Connection",
        description="A sample connection for a Cloud Resource.",
        cloud_resource=bigquery_connection_v1.CloudResourceProperties(),
    )

    try:
        created_connection = client.create_connection(
            parent=parent, connection_id=connection_id, connection=connection
        )
        print(f"Successfully created connection: {created_connection.name}")
        print(f"Friendly name: {created_connection.friendly_name}")
        print(
            f"Service Account: {created_connection.cloud_resource.service_account_id}"
        )

    except google.api_core.exceptions.AlreadyExists:
        print(f"Connection with ID '{connection_id}' already exists.")
        print("Please use a different connection ID.")
    except Exception as e:
        print(f"An unexpected error occurred while creating the connection: {e}")

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

const {ConnectionServiceClient} =
  require('@google-cloud/bigquery-connection').v1;
const {status} = require('@grpc/grpc-js');

const client = new ConnectionServiceClient();

/**
 * Creates a new BigQuery connection to a Cloud Resource.
 *
 * A Cloud Resource connection creates a service account that can be granted access
 * to other Google Cloud resources.
 *
 * @param {string} projectId The Google Cloud project ID. for example, 'example-project-id'
 * @param {string} location The location of the project to create the connection in. for example, 'us-central1'
 * @param {string} connectionId The ID of the connection to create. for example, 'example-connection-id'
 */
async function createConnection(projectId, location, connectionId) {
  const parent = client.locationPath(projectId, location);

  const connection = {
    friendlyName: 'Example Connection',
    description: 'A sample connection for a Cloud Resource',
    // The service account for this cloudResource will be created by the API.
    // Its ID will be available in the response.
    cloudResource: {},
  };

  const request = {
    parent,
    connectionId,
    connection,
  };

  try {
    const [response] = await client.createConnection(request);

    console.log(`Successfully created connection: ${response.name}`);
    console.log(`Friendly name: ${response.friendlyName}`);

    console.log(`Service Account: ${response.cloudResource.serviceAccountId}`);
  } catch (err) {
    if (err.code === status.ALREADY_EXISTS) {
      console.log(`Connection '${connectionId}' already exists.`);
    } else {
      console.error(`Error creating connection: ${err.message}`);
    }
  }
}

Terraform

Utilizza la risorsa google_bigquery_connection.

Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.

L'esempio seguente crea una connessione di risorsa Cloud denominata my_cloud_resource_connection nella regione US:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Per applicare la configurazione Terraform in un progetto Google Cloud , completa i passaggi nelle sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione Terraform deve avere la propria directory (chiamata anche modulo radice).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel main.tf appena creato.

    (Facoltativo) Copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Rivedi e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform visualizzi il messaggio "Apply complete!".

  3. Apri il tuo Google Cloud progetto per visualizzare i risultati. Nella console Google Cloud , vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Dopo aver creato la connessione, aprila. Nel riquadro Informazioni sulla connessione, copia l'ID dell'account di servizio. Ti servirà per configurare le autorizzazioni per la connessione. Quando crei una risorsa di connessione, BigQuery crea un account di servizio di sistema univoco e lo associa alla connessione.

Configurare l'accesso

Devi concedere all'account di servizio associato alla nuova connessione l'accesso in scrittura all'istanza o al database Spanner. Ti consigliamo di utilizzare il ruolo IAM predefinito Utente database Cloud Spanner (roles/spanner.databaseUser). Questi passaggi richiedono l'ID account di servizio che hai copiato quando hai creato la connessione.

Per concedere l'accesso ai ruoli a livello di database per il account di servizio, procedi come segue:

  1. Vai alla pagina delle istanze Spanner.

    Vai alla pagina delle istanze

  2. Fai clic sul nome dell'istanza che contiene il database.

  3. Nella scheda Panoramica, seleziona la casella di controllo per il tuo database.

  4. Viene visualizzata la finestra di dialogo Riquadro informazioni. Fai clic su Aggiungi entità.

  5. In Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.

  6. Nel campo Seleziona un ruolo, seleziona un ruolo con autorizzazioni spanner.databases.write. Ti consigliamo di utilizzare il ruolo Utente database Cloud Spanner.

  7. Fai clic su Salva.

Esegui l'esportazione utilizzando la connessione CLOUD_RESOURCE

Una volta creata la connessione e concesso l'accesso appropriato, puoi eseguire l'esportazione utilizzando la connessione CLOUD_RESOURCE. L'esempio seguente mostra un comando EXPORT che esegue l'esportazione con una connessione CLOUD_RESOURCE.

EXPORT DATA WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_NAME` OPTIONS (
  uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
  format='CLOUD_SPANNER',
  spanner_options="""{ "table": "SPANNER_TABLE_NAME" }"""
)
AS SELECT * FROM my_bq_dataset.table1;

Sostituisci quanto segue:

  • PROJECT_ID: il nome del progetto Google Cloud .
  • LOCATION: la località in cui hai creato la connessione, ad esempio us.
  • CONNECTION_NAME: il nome della connessione utilizzata per eseguire l'esportazione, ad esempio myconnection.
  • INSTANCE_ID: il nome dell'istanza del database Spanner.
  • DATABASE_ID: il nome del database Spanner.
  • SPANNER_TABLE_NAME: il nome della tabella Spanner di destinazione esistente.

Esportare in modo continuo

Per elaborare continuamente una query di esportazione, consulta Creare query continue per istruzioni e codice di esempio.

Ottimizzazione dell'esportazione

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

  • Aumenta il numero di nodi nell'istanza di destinazione Spanner. Durante le prime fasi dell'esportazione, l'aumento del numero di nodi nell'istanza potrebbe non aumentare immediatamente la velocità effettiva di esportazione. Durante l'esecuzione della divisione basata sul carico, può verificarsi un leggero ritardo. Con la suddivisione basata sul carico, il throughput di esportazione aumenta e si stabilizza. L'utilizzo dell'istruzione EXPORT DATA raggruppa i dati per ottimizzare le scritture in Spanner. Per ulteriori informazioni, vedi Panoramica del rendimento.

  • Specifica la priorità HIGH all'interno di spanner_options. Se la tua istanza Spanner ha la scalabilità automatica abilitata, l'impostazione della priorità HIGH contribuisce a garantire che l'utilizzo della CPU raggiunga la soglia necessaria per attivare la scalabilità. In questo modo, lo strumento di scalabilità automatica può aggiungere risorse di calcolo in risposta al carico di esportazione, il che può migliorare la velocità effettiva complessiva dell'esportazione.

    L'esempio seguente mostra un comando di esportazione Spanner impostato sulla priorità HIGH:

    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": "HIGH" }"""
    )
  • 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 la contesa.

    Se la chiave primaria della tabella di destinazione include colonne generate, aggiungi le espressioni delle colonne generate alla query per assicurarti che i dati esportati vengano ordinati e raggruppati correttamente.

    Ad esempio, nel seguente schema Spanner, SaleYear e SaleMonth sono colonne generate che costituiscono l'inizio della chiave primaria Spanner:

    CREATE TABLE Sales (
      SaleId STRING(36) NOT NULL,
      ProductId INT64 NOT NULL,
      SaleTimestamp TIMESTAMP NOT NULL,
      Amount FLOAT64,
      -- Generated columns
      SaleYear INT64 AS (EXTRACT(YEAR FROM SaleTimestamp)) STORED,
      SaleMonth INT64 AS (EXTRACT(MONTH FROM SaleTimestamp)) STORED,
    ) PRIMARY KEY (SaleYear, SaleMonth, SaleId);

    Quando esporti dati da BigQuery a una tabella Spanner con colonne generate utilizzate nella chiave primaria, è consigliabile, ma non obbligatorio, includere le espressioni per queste colonne generate nella query EXPORT DATA. In questo modo BigQuery preordina correttamente i dati, il che è fondamentale per il batching e la scrittura efficienti in Spanner. I valori per le colonne generate nell'istruzione EXPORT DATA non vengono commitati in Spanner, perché vengono generati automaticamente da Spanner, ma vengono utilizzati per ottimizzare l'esportazione.

    L'esempio seguente esporta i dati in una tabella Spanner Sales la cui chiave primaria utilizza colonne generate. Per ottimizzare le prestazioni di scrittura, la query include espressioni EXTRACT che corrispondono alle colonne SaleYear e SaleMonth generate, consentendo a BigQuery di preordinare i dati prima dell'esportazione:

    EXPORT DATA OPTIONS (
      uri="https://spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID",
      format='CLOUD_SPANNER',
      spanner_options="""{ "table": "Sales" }"""
    )
    AS SELECT
      s.SaleId,
      s.ProductId,
      s.SaleTimestamp,
      s.Amount,
      -- Add expressions that match the generated columns in the Spanner PK
      EXTRACT(YEAR FROM s.SaleTimestamp) AS SaleYear,
      EXTRACT(MONTH FROM s.SaleTimestamp) AS SaleMonth
    FROM my_dataset.sales_export AS s;
  • Per evitare job di lunga durata, esporta i dati per partizione. Suddividi i dati BigQuery utilizzando una chiave di partizione, ad esempio un timestamp nella query:

    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": "MEDIUM" }"""
    )
    AS SELECT *
    FROM 'mydataset.table1' d
    WHERE
    d.timestamp >= TIMESTAMP '2025-08-28T00:00:00Z' AND
    d.timestamp < TIMESTAMP '2025-08-29T00:00:00Z';

    In questo modo, la query viene completata entro il runtime del job di 6 ore. Per saperne di più su questi limiti, consulta i limiti dei job di query.

  • Per migliorare le prestazioni di caricamento dei dati, elimina l'indice nella tabella Spanner in cui vengono importati i dati. Poi ricrealo al termine dell'importazione.

  • Ti consigliamo di iniziare con un nodo Spanner (1000 unità di elaborazione) e una prenotazione minima di slot BigQuery. Ad esempio, 100 slot o 0 slot di riferimento con scalabilità automatica. Per le esportazioni inferiori a 100 GB, questa configurazione viene in genere completata entro il limite di 6 ore del job. Per le esportazioni superiori a 100 GB, aumenta la velocità effettiva scalando i nodi Spanner e le prenotazioni di slot BigQuery, in base alle esigenze. Il throughput viene scalato a circa 5 MiB/s per nodo.

Prezzi

Quando esporti i dati in Spanner utilizzando l'istruzione EXPORT DATA, la fatturazione viene eseguita utilizzando i prezzi di calcolo della capacità di BigQuery.

Per esportare continuamente in Spanner utilizzando una query continua, devi disporre di una prenotazione di slot BigQuery Enterprise o Enterprise Plus e di un'assegnazione di prenotazione che utilizzi il tipo di job CONTINUOUS.

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.