Ottimizzare i job di caricamento

Le strategie e le best practice descritte in questo documento ti aiutano a ottimizzare il caricamento in batch o lo streaming dei dati in BigQuery per evitare di raggiungere il limite per il numero di job di caricamento per tabella al giorno.

Poiché il limite per i job di caricamento è fisso e non può essere aumentato, devi ottimizzare i job di caricamento strutturando le tabelle tramite metodi come le partizioni di tabella o gestendo i caricamenti tramite metodi come il caricamento in batch o lo streaming.

Come funzionano le quote delle operazioni per tabella

Il limite di BigQuery per le modifiche delle tabelle per tabella al giorno per progetto è fisso, indipendentemente dal fatto che le modifiche aggiungano o aggiornino i dati o tronchino la tabella. Questo limite include il totale combinato di tutti i job di caricamento, i job di copia e i job di query che aggiungono dati a una tabella di destinazione o la sovrascrivono.

I job di caricamento hanno una frequenza di ricarica. Se superi il limite delle operazioni per tabella o la relativa frequenza di ricarica, i job di caricamento non vanno a buon fine e viene restituito un errore quotaExceeded. Il limite a livello di progetto per i job di caricamento al giorno viene ricaricato entro un periodo di 24 ore. Al termine dei job di caricamento, la quota disponibile diminuisce. La quota viene poi ricaricata gradualmente nelle 24 ore successive. I job di caricamento non riusciti vengono comunque conteggiati ai fini delle quote per tabella e per progetto. Per saperne di più sui limiti dei job di caricamento, consulta Job di caricamento.

Per le tabelle partizionate, si applica un limite separato per le modifiche tabella partizionata, che sostituisce il limite delle tabelle standard.

Per rispettare i limiti delle operazioni per tabella giornaliere, distribuisci le operazioni su un periodo di 24 ore. Ad esempio, se esegui 25 aggiornamenti, ognuno con 60 operazioni, puoi eseguire circa 60 operazioni ogni 58 minuti. Questo approccio ti aiuta a rispettare il limite giornaliero. Per monitorare gli aggiornamenti delle tabelle, consulta le visualizzazioni BigQuery INFORMATION_SCHEMA.

Operazioni per tabella escluse dalla quota

L'aggiornamento delle informazioni della tabella (metadati) e l'utilizzo delle istruzioni DML non vengono conteggiati ai fini del limite giornaliero di modifiche delle tabelle. Questa esclusione si applica sia alle tabelle standard sia a quelle partizionate.

Il tuo progetto può eseguire un numero illimitato di istruzioni DML. Sebbene in precedenza le istruzioni DML venissero conteggiate ai fini delle modifiche delle tabelle giornaliere e non fossero soggette a limitazione della frequenza anche al limite, ora non è più così.

Anche gli inserimenti di flussi modificano le tabelle, ma sono regolati da quote specifiche.

Strategie di caricamento per evitare il limite delle operazioni per tabella

Per rispettare il limite giornaliero delle operazioni per tabella di BigQuery, prendi in considerazione queste best practice:

  • Esegui meno scritture di dimensioni maggiori anziché molte scritture di dimensioni ridotte.
  • Riduci al minimo i job di scrittura separati nella tabella di produzione finale ogni giorno.

Per utilizzare queste best practice, esegui il caricamento in batch o lo streaming dei dati in BigQuery. La scelta del metodo di caricamento dipende dal fatto che tu debba caricare grandi volumi di dati in tempo reale o se il caricamento in tempo reale non sia un problema. Le sezioni seguenti spiegano in dettaglio il caricamento in batch e lo streaming dei dati, inclusi gli strumenti e i servizi che puoi utilizzare per ogni metodo.

Caricamento in batch

Per rispettare il limite di caricamento giornaliero per progetto per BigQuery, esegui il caricamento in batch di grandi quantità di dati e caricali in BigQuery con meno job. Le sezioni seguenti descrivono diversi metodi che puoi utilizzare per eseguire il caricamento in batch dei dati.

Caricare più dati per ogni job

Anziché inviare i dati a BigQuery ogni volta che diventano disponibili nuove informazioni, raccoglili e caricali in BigQuery utilizzando un unico job di grandi dimensioni.

Ad esempio, anziché eseguire un job di caricamento separato per ogni poche righe di dati, puoi attendere di accumulare diverse migliaia di righe di dati in un file, ad esempio in un file CSV o JSON, e poi eseguire un job di caricamento per aggiungere tutti i dati a una tabella. Questa azione viene conteggiata come un'operazione per tabella, anche se il job contiene molti più dati. Puoi eseguire il caricamento in batch dei file utilizzando i caratteri jolly con il job di caricamento. I caratteri jolly ti consentono di selezionare batch di file in una directory per caricare più file in un unico job di caricamento.

L'esempio seguente mostra come utilizzare i caratteri jolly con il comando bq load o le query SQL LOAD DATA.

bq

L'esempio seguente mostra un comando bq load per caricare i dati CSV da Cloud Storage in una tabella BigQuery denominata my_target_table. Per selezionare più di un nome file di origine, utilizza un carattere jolly con il comando. Il flag AUTODETECT determina automaticamente lo schema della tabella dai dati di origine in Cloud Storage e può supportare un carattere jolly (*) per caricare più file che corrispondono a un pattern di denominazione specifico nella tabella BigQuery.

bq load \
  --source_format=CSV \
  --autodetect \
  --project_id=PROJECT_ID \
  DATASET_NAME.TABLE_NAME \
  "gs://BUCKET_NAME/OBJECT_PATH_WILDCARD"

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo Cloud de Confiance progetto.
  • DATASET_NAME: il nome del set di dati BigQuery in cui vuoi caricare i dati.
  • TABLE_NAME: il nome della tabella BigQuery in cui vuoi caricare i dati.
  • BUCKET_NAME: il nome del bucket Cloud Storage che contiene i file di origine.
  • OBJECT_PATH_WILDCARD: il percorso dei file CSV nel bucket Cloud Storage. Includi un carattere jolly (*) per trovare più file. Ad esempio, la stringa gs://my-bucket/path/to/data/my_prefix_*.csv utilizza il carattere jolly * per caricare tutti i file in gs://my-bucket/path/to/data/ che iniziano con my_prefix_ e terminano con .csv.

Per ulteriori informazioni, consulta le seguenti risorse:

SQL

L'esempio seguente mostra come utilizzare la query SQL LOAD DATA query per caricare i dati CSV da un bucket Cloud Storage nella tabella BigQuery. Per selezionare più di un nome file di origine, utilizza un carattere jolly con il comando.

LOAD DATA INTO
DATASET_NAME.TABLE_NAME
FROM FILES (
  format = 'SOURCE_FORMAT',
  uris = ['gs://BUCKET_NAME/OBJECT_PATH_WILDCARD]
  );

Sostituisci quanto segue:

  • DATASET_NAME: il nome del set di dati BigQuery in cui vuoi caricare i dati.
  • TABLE_NAME: il nome della tabella BigQuery in cui vuoi caricare i dati.
  • SOURCE_FORMAT imposta il tipo di file di origine, ad esempio CSV o JSON. In questo esempio, utilizza CSV.
  • BUCKET_NAME: il nome del bucket Cloud Storage che contiene i file di origine.
  • OBJECT_PATH_WILDCARD: il percorso dei file CSV nel bucket Cloud Storage. Includi un carattere jolly (*) per trovare più file. Ad esempio, la stringa gs://my-bucket/path/to/data/my_prefix_*.csv utilizza il carattere jolly * per caricare tutti i file in gs://my-bucket/path/to/data/ che iniziano con my_prefix_ e terminano con .csv.

Per saperne di più, consulta Istruzioni di caricamento in GoogleSQL.

Caricare in batch utilizzando l'API BigQuery Storage Write

Per caricare i dati in batch in BigQuery, un'opzione è utilizzare l'API Storage Write direttamente dalla tua applicazione con le librerie client delle API Google.

L'API Storage Write ottimizza il caricamento dei dati per rispettare i limiti delle tabelle. Per lo streaming in tempo reale di grandi volumi, utilizza un flusso PENDING anziché un flusso COMMITTED. Quando utilizzi un flusso PENDING, l'API archivia temporaneamente i record finché non esegui il commit del flusso.

Per un esempio completo di caricamento in batch dei dati utilizzando l'API Storage Write, consulta Caricare i dati in batch utilizzando l'API Storage Write.

Caricare in batch utilizzando Dataflow

Se vuoi eseguire lo streaming, la trasformazione e la scrittura dei dati in BigQuery utilizzando le pipeline di dati, puoi utilizzare Dataflow. Le pipeline di dati che crei leggono da origini supportate come Pub/Sub o Apache Kafka. Puoi anche creare una pipeline Dataflow utilizzando il connettore BigQueryIO, che utilizza l'API Storage Write per lo streaming di dati ad alte prestazioni e la semantica exactly-once.

Per informazioni sull'utilizzo di Dataflow per caricare in batch i dati in BigQuery, consulta Scrivere da Dataflow a BigQuery.

Streaming dei dati

Per caricare grandi volumi di dati con aggiornamenti frequenti, ti consigliamo di eseguire lo streaming dei dati in BigQuery. Con lo streaming dei dati, i nuovi dati vengono scritti continuamente dall'applicazione client in BigQuery, una strategia che evita di raggiungere il limite per l'esecuzione di troppi job di caricamento. Le sezioni seguenti descrivono diversi metodi per eseguire lo streaming dei dati in BigQuery.

Eseguire lo streaming dei dati utilizzando l'API Storage Write

Utilizza l'API Storage Write per eseguire lo streaming dei record in tempo reale in BigQuery con una latenza minima. L'API Storage Write fornisce un protocollo di streaming efficiente che offre funzionalità avanzate come la semantica di consegna exactly-once, il rilevamento degli aggiornamenti dello schema e gli upsert di Change Data Capture (CDC) in streaming. Inoltre, puoi importare fino a 2 TiB al mese senza costi.

Per informazioni sull'utilizzo dell'API Storage Write, consulta Eseguire lo streaming dei dati utilizzando l'API Storage Write.

Eseguire lo streaming dei dati utilizzando Dataflow

Utilizza Dataflow per creare pipeline di dati che leggono da origini supportate, ad esempio Pub/Sub o Apache Kafka. Queste pipeline trasformano e scrivono i dati in BigQuery come destinazione. Puoi creare una pipeline Dataflow utilizzando il connettore BigQueryIO, che utilizza l'API Storage Write.

Per informazioni sull'utilizzo di Dataflow per eseguire lo streaming dei dati in BigQuery, consulta Scrivere da Dataflow a BigQuery.

Best practice per la gestione delle tabelle per il caricamento

Oltre a eseguire il caricamento in batch o lo streaming dei dati in BigQuery, gestisci le tabelle nei seguenti modi per ottimizzarle per importazione dati.

Usare tabelle partizionate

Il partizionamento delle tabelle è una tecnica efficace per gestire le tabelle di grandi dimensioni in BigQuery, soprattutto quando devi eseguire operazioni di caricamento dei dati frequenti. Puoi migliorare significativamente le prestazioni e la convenienza delle tabelle dividendo una tabella in segmenti più piccoli e gestibili in base a una data, un timestamp o un numero intero.

Il vantaggio principale del partizionamento per il caricamento dei dati è che le quote giornaliere delle operazioni per tabella per BigQuery si applicano a livello di partizione anziché a livello di tabella. Per le tabelle partizionate, si applica un limite separato e più elevato alle modifiche delle partizioni, che sostituisce il limite delle tabelle standard. Il limite per le tabelle partizionate aumenta notevolmente il numero di job di caricamento che puoi eseguire al giorno senza raggiungere i limiti di quota.

Una strategia comune e molto efficace è quella di caricare in batch i dati giornalieri. Ad esempio, puoi raccogliere tutti i dati del giorno 2025-09-18 in una tabella di gestione temporanea. Poi, alla fine della giornata, esegui un singolo job per caricare questi dati nella partizione specifica per questo giorno nella tabella di produzione principale. Poiché BigQuery interagisce solo con i dati di una singola partizione, questo approccio mantiene i dati ben organizzati e rende le operazioni di caricamento più veloci ed economiche.

Sebbene il partizionamento sia altamente consigliato per le tabelle di grandi dimensioni in crescita, è meglio evitarlo se le partizioni sono costantemente inferiori a 10 GB. Per saperne di più, consulta Quando utilizzare il partizionamento.

Per saperne di più sui diversi metodi di partizionamento disponibili, come il partizionamento per unità di tempo e per intervallo di numeri interi, consulta Tipi di tabelle partizionate.

Sfruttare il backoff esponenziale, il troncamento e il jitter integrati

Il backoff esponenziale e i tentativi integrati sono un metodo di gestione degli errori che aiuta l'applicazione a ripristinarsi senza problemi quando un'operazione non va a buon fine temporaneamente. Questi errori possono includere un errore di limite di frequenza (rateLimitExceeded) o un breve problema di rete (unavailable).

In un sistema affidabile, anche i worker che prendono le attività dalla coda lato client utilizzano il backoff esponenziale e i tentativi. Lo fanno quando chiamano BigQuery, il che crea due livelli di protezione.

Ad esempio, la libreria ufficiale google-cloud-bigquery-storage per Python include una logica di tentativi integrata con backoff esponenziale. Questa logica gestisce gli errori gRPC temporanei, ad esempio UNAVAILABLE. Nella maggior parte dei casi, non è necessario scrivere questo codice di tentativi. La chiamata client.append_rows() gestisce automaticamente questi tentativi.

Questa gestione integrata è un vantaggio significativo dell'utilizzo delle librerie client ufficiali. Devi occuparti solo degli errori per i quali non è possibile eseguire nuovi tentativi, ad esempio INVALID_ARGUMENT, il che significa che esiste una mancata corrispondenza dello schema.