Ottimizza i job di caricamento

Puoi rispettare i limiti dei job di caricamento per tabella in BigQuery raggruppando le scritture, trasmettendo in streaming gli aggiornamenti frequenti e partizionando le tabelle di destinazione. Le quote di modifica giornaliere sono fisse e non possono essere aumentate, pertanto l'utilizzo di un numero inferiore di scritture di dimensioni maggiori con nuovi tentativi client integrati aiuta a prevenire gli errori quotaExceeded.

Come funzionano le quote per le operazioni sulle tabelle

Il limite di BigQuery per le modifiche alle 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, job di copia e job di query che aggiungono o sovrascrivono una tabella di destinazione.

I job di caricamento hanno una frequenza di ricarica. Se superi il limite di operazioni sulla 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 ripristinato entro un periodo di 24 ore. Al termine dei job di caricamento, la quota disponibile diminuisce. La quota viene poi reintegrata 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 tabella partizionata partizionate, che sostituisce il limite per le tabelle standard.

Per rispettare i limiti giornalieri delle operazioni sulle tabelle, distribuisci le operazioni su un periodo di 24 ore. Ad esempio, se esegui 25 aggiornamenti, ciascuno 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 Viste BigQuery INFORMATION_SCHEMA.

Operazioni sulle tabelle 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 della tabella. Questa esclusione si applica sia alle tabelle standard sia a quelle partizionate.

Il tuo progetto può eseguire un numero illimitato di istruzioni DML. In precedenza, le istruzioni DML venivano conteggiate ai fini delle modifiche giornaliere alle tabelle e non venivano limitate anche se raggiungevano il limite, ma ora non è più così.

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

Strategie di caricamento per evitare il limite di operazioni sulle tabelle

Per non superare il limite giornaliero di operazioni sulle tabelle di BigQuery, tieni presente queste best practice:

  • Esegui un numero inferiore di scritture di dimensioni maggiori anziché molte scritture di piccole dimensioni.
  • Riduci al minimo i job di scrittura separati nella tabella di produzione finale ogni giorno.

Per utilizzare queste best practice, inserisci i dati in BigQuery in modalità batch o flusso. La scelta del metodo di caricamento dipende dalla necessità di caricare grandi volumi di dati in tempo reale o se il caricamento in tempo reale non è un problema. Le sezioni seguenti spiegano in dettaglio il caricamento batch e lo streaming di dati, inclusi gli strumenti e i servizi che puoi utilizzare per ciascun metodo.

Caricamento in batch

Per rispettare il limite di caricamento giornaliero per progetto per BigQuery, raggruppa grandi quantità di dati ed eseguine il caricamento in BigQuery con un numero inferiore di job. Le sezioni seguenti descrivono diversi metodi che puoi utilizzare per caricare i dati in batch.

Carica più dati per ogni job

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

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

L'esempio seguente mostra come utilizzare i caratteri jolly con il comando bq load o con 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ù nomi 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 progetto Google Cloud .
  • 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 la corrispondenza con 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 per caricare i dati CSV da un bucket Cloud Storage in una tabella BigQuery. Per selezionare più nomi 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 tuo 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 la corrispondenza con 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 LOAD in GoogleSQL.

Caricamento batch utilizzando l'API BigQuery Storage Write (gRPC)

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

L'API Storage Write (gRPC) ottimizza il caricamento dei dati per rimanere entro i limiti della tabella. Per lo streaming in tempo reale di volumi elevati, utilizza un flusso PENDING anziché un flusso COMMITTED. Quando utilizzi uno stream PENDING, l'API archivia temporaneamente i record finché non esegui il commit dello stream.

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

Caricamento in batch utilizzando Dataflow

Se vuoi trasmettere, trasformare e scrivere 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 (gRPC) per lo streaming di dati ad alte prestazioni e la semantica exactly-once.

Per informazioni sull'utilizzo di Dataflow per il caricamento collettivo dei dati in BigQuery, consulta Scrivi da Dataflow a BigQuery.

Flussi di dati

Per caricare volumi elevati di dati con aggiornamenti frequenti, ti consigliamo di trasmettere i 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 di esecuzione di troppi job di caricamento. Le sezioni seguenti descrivono diversi metodi per inserire flussi di dati in BigQuery.

Trasmetti i dati in streaming utilizzando l'API Storage Write (gRPC)

Utilizza l'API Storage Write (gRPC) per trasmettere i record in tempo reale in BigQuery con una latenza minima. L'API Storage Write (gRPC) fornisce un protocollo di streaming efficiente che offre funzionalità avanzate come la semantica di distribuzione exactly-once, il rilevamento degli aggiornamenti dello schema e l'applicazione dell'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 (gRPC), consulta Flussi di dati utilizzando l'API Storage Write.

Trasmetti i dati in streaming 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 (gRPC).

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

Best practice per la gestione delle tabelle per il caricamento

Oltre al caricamento in batch o allo streaming dei dati in BigQuery, gestisci le tabelle nei seguenti modi per ottimizzarle per l'importazione dati.

Utilizza tabelle partizionate

Il partizionamento delle tabelle è una tecnica efficace per gestire tabelle di grandi dimensioni in BigQuery, soprattutto quando devi eseguire frequenti operazioni di caricamento dei dati. Puoi migliorare significativamente le prestazioni e l'efficacia in termini di costi di una tabella suddividendola 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 sulle tabelle per BigQuery vengono applicate a livello di partizione anziché a livello di tabella. Per le tabelle partizionate, alle modifiche delle partizioni si applica un limite separato più elevato, 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 consiste nel caricare i dati giornalieri in batch. Ad esempio, puoi raccogliere tutti i dati del giorno per 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ù rapide ed economiche.

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

Per scoprire 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.

Sfrutta il backoff esponenziale, il troncamento e il jitter integrati

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

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

Ad esempio, la libreria google-cloud-bigquery-storage ufficiale per Python include una logica di ripetizione 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 nuovo tentativo. La chiamata client.append_rows() gestisce questi nuovi tentativi automaticamente.

Questa gestione integrata è un vantaggio significativo dell'utilizzo delle librerie client ufficiali. Devi gestire solo gli errori per cui non è possibile riprovare, ad esempio INVALID_ARGUMENT, che indica una mancata corrispondenza dello schema.