Stima e controlla i costi

In questa pagina vengono descritte le best practice per la stima e il controllo dei costi in BigQuery.

I costi principali di BigQuery sono il computing, utilizzato per l'elaborazione delle query, e l'archiviazione, per i dati archiviati in BigQuery. BigQuery offre due tipi di modelli di prezzi per l'elaborazione delle query: prezzi on demand e basati sulla capacità. Ogni modello offre best practice diverse per il controllo dei costi. Per i dati archiviati in BigQuery, i costi dipendono dal modello di fatturazione dello spazio di archiviazione configurato per ogni set di dati.

Informazioni sui prezzi di computing per BigQuery

Esistono piccole differenze nei prezzi di computing per BigQuery che influiscono sulla pianificazione della capacità e sul controllo dei costi.

Modelli di prezzo

Per il computing on demand in BigQuery, ti vengono addebitati costi per TiB per le query BigQuery.

In alternativa, per il calcolo della capacità in BigQuery, ti vengono addebitati i costi per le risorse di calcolo (slot) utilizzate per elaborare la query. Per utilizzare questo modello, devi configurare le prenotazioni per gli slot.

Le prenotazioni hanno le seguenti caratteristiche:

  • Vengono allocate in pool di slot e ti consentono di gestire la capacità e isolare i workload in modi che hanno senso per la tua organizzazione.
  • Devono risiedere in un progetto di amministrazione e sono soggette a quote e limiti.

Il modello di prezzi di capacità offre diverse versioni, tutte con un'opzione di pagamento a consumo addebitata in ore slot. Le versioni Enterprise ed Enterprise Plus offrono anche impegni facoltativi di uno o tre anni per gli slot, che possono farti risparmiare rispetto alla tariffa con pagamento a consumo.

Puoi anche impostare prenotazioni con scalabilità automatica utilizzando l'opzione di pagamento a consumo. Per saperne di più, consulta le seguenti risorse:

Limita i costi per ogni modello

Quando utilizzi il modello di prezzi on demand, l'unico modo per limitare i costi è configurare quote giornaliere a livello di progetto o di utente. Tuttavia, queste quote impongono un limite massimo che impedisce agli utenti di eseguire query oltre il limite della quota. Per impostare le quote, consulta Crea quote di query personalizzate.

Quando utilizzi il modello di prezzi con capacità utilizzando le prenotazioni di slot, specifichi il numero massimo di slot disponibili per una prenotazione. Puoi anche acquistare impegni slot che offrono prezzi scontati per un periodo di impegno.

Puoi utilizzare le versioni completamente on demand impostando la base di riferimento della prenotazione su 0 e il valore massimo su un'impostazione che soddisfi le esigenze del tuo workload. BigQuery esegue automaticamente lo scale up fino al numero di slot necessari per il tuo workload, senza mai superare il valore massimo impostato. Per saperne di più, consulta Gestione dei workload utilizzando le prenotazioni.

Controlla i costi delle query

Per controllare i costi delle singole query, ti consigliamo di seguire innanzitutto le best practice per l'ottimizzazione del calcolo delle query e l'ottimizzazione dello spazio di archiviazione.

Le sezioni seguenti descrivono best practice aggiuntive che puoi utilizzare per controllare ulteriormente i costi delle query.

Crea quote di query personalizzate

Best practice: utilizza quote di query giornaliere personalizzate per limitare la quantità di dati elaborati al giorno.

Puoi gestire i costi impostando una quota personalizzata che specifica un limite per la quantità di dati elaborati ogni giorno per progetto o per utente. Gli utenti non possono eseguire query una volta raggiunta la quota.

Per impostare una quota personalizzata, devi disporre di ruoli o autorizzazioni specifici. Per le quote da impostare, consulta Quote e limiti.

Per saperne di più, consulta Limita i costi per ogni modello di prezzo.

Controlla il costo stimato prima di eseguire una query

Best practice: prima di eseguire le query, visualizzale in anteprima per stimare i costi.

Quando utilizzi il modello di prezzi on demand, le query vengono fatturate in base al numero di byte letti. Per stimare i costi prima di eseguire una query:

Utilizza lo strumento di convalida query

Quando inserisci una query nella console Google Cloud , lo strumento di convalida query verifica la sintassi della query e fornisce una stima del numero di byte letti. Puoi utilizzare questa stima per calcolare il costo della query nel Calcolatore prezzi.

  • Se la query non è valida, lo strumento di convalida query visualizza un messaggio di errore. Ad esempio:

    Not found: Table myProject:myDataset.myTable was not found in location US

  • Se la query è valida, lo strumento di convalida query fornisce una stima del numero di byte necessari per elaborarla. Ad esempio:

    This query will process 623.1 KiB when run.

Esegui un dry run

Per eseguire un dry run, segui questi passaggi:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Inserisci la query nell'editor di query.

    Se la query è valida, viene visualizzato automaticamente un segno di spunta insieme alla quantità di dati che verranno elaborati dalla query. Se la query non è valida, viene visualizzato un punto esclamativo con un messaggio di errore.

bq

Inserisci una query come la seguente utilizzando il flag --dry_run.

bq query \
--use_legacy_sql=false \
--dry_run \
'SELECT
   COUNTRY,
   AIRPORT,
   IATA
 FROM
   `project_id`.dataset.airports
 LIMIT
   1000'
 

Per una query valida, il comando genera la seguente risposta:

Query successfully validated. Assuming the tables are not modified,
running this query will process 10918 bytes of data.

API

Per eseguire un dry run utilizzando l'API, invia un job di query con dryRun impostato su true nel tipo JobConfiguration.

Vai

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

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 (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// queryDryRun demonstrates issuing a dry run query to validate query structure and
// provide an estimate of the bytes scanned.
func queryDryRun(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	q := client.Query(`
	SELECT
		name,
		COUNT(*) as name_count
	FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
	WHERE state = 'WA'
	GROUP BY name`)
	q.DryRun = true
	// Location must match that of the dataset(s) referenced in the query.
	q.Location = "US"

	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	// Dry run is not asynchronous, so get the latest status and statistics.
	status := job.LastStatus()
	if err := status.Err(); err != nil {
		return err
	}
	fmt.Fprintf(w, "This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)
	return nil
}

Java

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

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 com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;

// Sample to run dry query on the table
public class QueryDryRun {

  public static void runQueryDryRun() {
    String query =
        "SELECT name, COUNT(*) as name_count "
            + "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
            + "WHERE state = 'WA' "
            + "GROUP BY name";
    queryDryRun(query);
  }

  public static void queryDryRun(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      QueryJobConfiguration queryConfig =
          QueryJobConfiguration.newBuilder(query).setDryRun(true).setUseQueryCache(false).build();

      Job job = bigquery.create(JobInfo.of(queryConfig));
      JobStatistics.QueryStatistics statistics = job.getStatistics();

      System.out.println(
          "Query dry run performed successfully." + statistics.getTotalBytesProcessed());
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function queryDryRun() {
  // Runs a dry query of the U.S. given names dataset for the state of Texas.

  const query = `SELECT name
    FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
    WHERE state = 'TX'
    LIMIT 100`;

  // For all options, see https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query
  const options = {
    query: query,
    // Location must match that of the dataset(s) referenced in the query.
    location: 'US',
    dryRun: true,
  };

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(options);

  // Print the status and statistics
  console.log('Status:');
  console.log(job.metadata.status);
  console.log('\nJob Statistics:');
  console.log(job.metadata.statistics);
}

PHP

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

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

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $query = 'SELECT id, view_count FROM `bigquery-public-data.stackoverflow.posts_questions`';

// Construct a BigQuery client object.
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);

// Set job configs
$jobConfig = $bigQuery->query($query);
$jobConfig->useQueryCache(false);
$jobConfig->dryRun(true);

// Extract query results
$queryJob = $bigQuery->startJob($jobConfig);
$info = $queryJob->info();

printf('This query will process %s bytes' . PHP_EOL, $info['statistics']['totalBytesProcessed']);

Python

Imposta la proprietà QueryJobConfig.dry_run su True. Client.query() restituisce sempre un QueryJob completato quando viene fornita una configurazione di query dry run.

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.

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

job_config = bigquery.QueryJobConfig(dry_run=True, use_query_cache=False)

# Start the query, passing in the extra configuration.
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    job_config=job_config,
)  # Make an API request.

# A dry run query completes immediately.
print("This query will process {} bytes.".format(query_job.total_bytes_processed))

Stima i costi delle query

Il metodo per stimare i costi delle query varia a seconda del modello di prezzi di calcolo.

Stima dei costi delle query on demand

Quando utilizzi il modello di prezzi on demand, puoi stimare il costo di esecuzione di una query calcolando il numero di byte elaborati.

Stima dei costi delle query basata sulla capacità

Quando utilizzi i prezzi basati sulla capacità, non è possibile stimare con precisione il costo esatto di una singola query prima dell'esecuzione. I costi basati sulla capacità vengono calcolati in base alla capacità complessiva degli slot di prenotazione di cui è stato eseguito il provisioning o la scalabilità automatica nel tempo, anziché alla quantità di dati scansionati da una query specifica.

La stima dei costi delle singole query prima dell'esecuzione è difficile a causa di fattori di runtime dinamici, tra cui:

  • Allocazione dinamica degli slot: il numero di slot allocati per una query dipende dalla complessità della query, dall'ottimizzazione del runtime e dalla disponibilità delle risorse.
  • Contemporaneità: più query condividono dinamicamente gli slot disponibili nella prenotazione.
  • Comportamento della scalabilità automatica: se la scalabilità automatica degli slot è abilitata, la prenotazione aumenta e diminuisce in base alla domanda aggregata del workload anziché all'esecuzione di una singola query.

Dopo l'esecuzione della query, puoi visualizzare le risorse di computing effettive consumate dalla query in slot-millisecondi (total_slot_ms) esaminando i dettagli di esecuzione della query o eseguendo una query sulla vista INFORMATION_SCHEMA.JOBS.

Attribuzione dei costi in base alla capacità

L'attribuzione dei costi è il processo di suddivisione e attribuzione dei costi di calcolo della prenotazione tra progetti, team o query dopo l'esecuzione dei workload.

Per comprendere e distribuire i costi complessivi, puoi attribuire le tariffe di prenotazione a query e progetti specifici utilizzando l'attribuzione dei costi di prenotazione nei dati di fatturazione Cloud. Nei dati e nei report di fatturazione Cloud, cerca la voce Attribuzione degli slot di analisi, che monitora le ore di slot utilizzate per progetto senza costi aggiuntivi o senza influire sui totali delle fatture.

Per saperne di più, consulta Attribuzione dei costi di prenotazione.

Calcolo delle dimensioni delle query on demand

Per calcolare il numero di byte elaborati dai vari tipi di query, consulta le sezioni seguenti:

Evita di eseguire query per esplorare i dati delle tabelle

Best practice: non eseguire query per esplorare o visualizzare l'anteprima dei dati della tabella.

Se stai sperimentando o esplorando i tuoi dati, puoi utilizzare le opzioni di anteprima della tabella per visualizzarli senza costi e senza influire sulle quote.

BigQuery supporta le seguenti opzioni di anteprima dei dati:

  • Nella console Google Cloud , nella pagina dei dettagli della tabella, fai clic sulla scheda Anteprima per campionare i dati.
  • Nello strumento a riga di comando bq, utilizza il comando bq head e specifica il numero di righe da visualizzare in anteprima.
  • Nell'API, utilizza tabledata.list per recuperare i dati della tabella da un insieme di righe specificato.
  • Evita di utilizzare LIMIT in tabelle non in cluster. Per le tabelle non in cluster, una clausola LIMIT non riduce i costi di calcolo.

Limita il numero di byte fatturati per query

Best practice: utilizza l'impostazione dei byte fatturati massimi per limitare i costi delle query quando utilizzi il modello di prezzi on demand.

Puoi limitare il numero di byte fatturati per una query utilizzando l'impostazione dei byte fatturati massimi. Quando imposti i byte massimi fatturati, il numero di byte letti dalla query viene stimato prima dell'esecuzione della query. Se il numero di byte stimati supera il limite, la query non riesce senza comportare addebiti.

Per le tabelle in cluster, la stima del numero di byte fatturati per una query è un limite superiore e può essere superiore al numero effettivo di byte fatturati dopo l'esecuzione della query. In alcuni casi, se imposti i byte fatturati massimi, una query su una tabella in cluster può non riuscire, anche se i byte fatturati effettivi non superano l'impostazione dei byte fatturati massimi.

Se una query non va a buon fine a causa dell'impostazione dei byte massimi fatturati, viene restituito un errore simile al seguente:

Error: Query exceeded limit for bytes billed: 1000000. 10485760 or higher required.

Per impostare il numero massimo di byte fatturati:

Console

  1. Nell'editor di query, fai clic su Modifica > Impostazioni di query > Opzioni avanzate.
  2. Nel campo Numero massimo di byte fatturati, inserisci un numero intero.
  3. Fai clic su Salva.

bq

Utilizza il comando bq query con il flag --maximum_bytes_billed.

  bq query --maximum_bytes_billed=1000000 \
  --use_legacy_sql=false \
  'SELECT
     word
   FROM
     `bigquery-public-data`.samples.shakespeare'

API

Imposta la proprietà maximumBytesBilled in JobConfigurationQuery o QueryRequest.

Evita di utilizzare LIMIT in tabelle non in cluster

Best practice: per le tabelle non in cluster, non utilizzare una clausola LIMIT come metodo di controllo dei costi.

Per le tabelle non in cluster, l'applicazione di una clausola LIMIT a una query non influisce sulla quantità di dati letti. Ti viene addebitato il costo per la lettura di tutti i byte dell'intera tabella, come indicato dalla query, anche se la query restituisce solo un sottoinsieme. Con una tabella in cluster, una clausola LIMIT può ridurre il numero di byte scansionati, perché la scansione si interrompe quando vengono scansionati blocchi sufficienti per ottenere il risultato. Ti vengono addebitati solo i byte analizzati.

Materializza i risultati delle query in fasi

Best practice: se possibile, materializza i risultati delle query in più fasi.

Se crei una query di grandi dimensioni multifase, ogni volta che la esegui BigQuery legge tutti i dati richiesti dalla query. Ti viene addebitato un importo per tutti i dati letti ogni volta che viene eseguita la query.

Suddividi invece la query in fasi, in cui ogni fase materializza i risultati della query scrivendoli in una tabella di destinazione. L'esecuzione di query sulla tabella di destinazione più piccola riduce la quantità di dati letti e i costi. Il costo di archiviazione dei risultati materializzati è molto inferiore al costo di elaborazione di grandi quantità di dati.

Utilizza Rapid Cache per eseguire query su Cloud Storage con tabelle esterne

Best practice: valuta la possibilità di attivare Rapid Cache quando esegui query sui dati di Cloud Storage con tabelle esterne.

Rapid Cache fornisce una cache di lettura a livello di zona basata su SSD per i tuoi bucket Cloud Storage, che può potenzialmente migliorare le prestazioni delle query e ridurre i costi delle query quando esegui query su tabelle esterne. Per saperne di più, consulta Ottimizza le query sulle tabelle esterne di Cloud Storage.

Controlla i costi dei workload

Questa sezione descrive le best practice per il controllo dei costi all'interno di un workload. Un workload è un insieme di query correlate. Ad esempio, un workload può essere una pipeline di trasformazione dei dati eseguita quotidianamente, un insieme di dashboard eseguite da un gruppo di analisti aziendali o diverse query ad hoc eseguite da un insieme di data scientist.

Utilizza il Google Cloud Calcolatore prezzi

Best practice: utilizza il Calcolatore prezzi diGoogle Cloud per creare una stima complessiva dei costi mensili per BigQuery in base all'utilizzo previsto. Puoi quindi confrontare questa stima con i costi effettivi per identificare le aree di ottimizzazione.

On demand

Per stimare i costi nel Calcolatore prezzi diGoogle Cloud quando utilizzi il modello di prezzi on demand, segui questi passaggi:

  1. Apri il Calcolatore prezzi diGoogle Cloud .
  2. Fai clic su Aggiungi alla stima.
  3. Seleziona BigQuery.
  4. Seleziona "On demand" per Tipo di servizio.
  5. Scegli la località in cui verranno eseguite le query.
  6. In Quantità di dati interrogati, inserisci i byte stimati letti dal dry run o dallo strumento di convalida query.
  7. Inserisci le tue stime di utilizzo dello spazio di archiviazione per Spazio di archiviazione attivo, Spazio di archiviazione a lungo termine, Inserimenti di flussi di dati e Letture di flussi di dati. Devi stimare solo l'archiviazione fisica o l'archiviazione logica, a seconda del modello di fatturazione dello spazio di archiviazione del set di dati.
  8. La stima viene visualizzata nel riquadro Dettagli sui costi. Per saperne di più sul costo stimato, fai clic su Apri visualizzazione dettagliata. Puoi anche scaricare e condividere la stima dei costi.

Per saperne di più, consulta Prezzi on demand.

Edizioni

Per stimare i costi nel Calcolatore prezzi diGoogle Cloud quando utilizzi il modello di prezzi basato sulla capacità con le versioni di BigQuery, segui questi passaggi:

  1. Apri il Calcolatore prezzi diGoogle Cloud .
  2. Fai clic su Aggiungi alla stima.
  3. Seleziona BigQuery.
  4. Seleziona "Edizioni" per Tipo di servizio.
  5. Scegli la località in cui vengono utilizzati gli slot.
  6. Scegli la tua versione.
  7. Scegli Slot massimi, Slot di riferimento, Impegno facoltativo e Utilizzo stimato della scalabilità automatica.
  8. Scegli la località in cui sono archiviati i dati.
  9. Inserisci le tue stime di utilizzo dello spazio di archiviazione per Spazio di archiviazione attivo, Spazio di archiviazione a lungo termine, Inserimenti di flussi di dati e Letture di flussi di dati. Devi stimare solo l'archiviazione fisica o l'archiviazione logica, a seconda del modello di fatturazione dello spazio di archiviazione del set di dati.
  10. La stima viene visualizzata nel riquadro Dettagli sui costi. Per saperne di più sul costo stimato, fai clic su Apri visualizzazione dettagliata. Puoi anche scaricare e condividere la stima dei costi.

Per saperne di più, consulta Prezzi basati sulla capacità.

Utilizza prenotazioni e impegni

Best practice: utilizza le prenotazioni e gli impegni di BigQuery per controllare i costi.

Per saperne di più, consulta Limita i costi per ogni modello di prezzo.

Utilizza lo strumento di stima degli slot

Best practice: utilizza lo Strumento per la stima degli slot per stimare il numero di slot necessari per i tuoi workload.

Lo strumento di stima degli slot BigQuery ti aiuta a gestire la capacità degli slot in base alle metriche sul rendimento storico.

Inoltre, i clienti che utilizzano il modello di prezzi on demand possono visualizzare i suggerimenti di dimensionamento per gli impegni e le prenotazioni di scalabilità automatica con prestazioni simili quando passano ai prezzi basati sulla capacità.

Annulla i job a lunga esecuzione non necessari

Per liberare capacità, controlla i job di lunga durata per assicurarti che debbano continuare a essere eseguiti. In caso contrario, annullali.

Visualizza i costi utilizzando una dashboard

Best practice: crea una dashboard per analizzare i dati di fatturazione Cloud in modo da poter monitorare e apportare modifiche all'utilizzo di BigQuery.

Puoi esportare i dati di fatturazione in BigQuery e visualizzarli in uno strumento come Data Studio. Per un tutorial sulla creazione di una dashboard di fatturazione, consulta Visualizza la fatturazione di Google Cloud utilizzando BigQuery e Data Studio.

Utilizza budget e avvisi di fatturazione

Best practice: utilizza i budget di fatturazione Cloud per monitorare gli addebiti di BigQuery in un unico posto.

I budget di fatturazione Cloud ti consentono di monitorare i costi effettivi rispetto a quelli pianificati. Dopo aver impostato un importo del budget, definisci delle regole di soglia di avviso per il budget, in modo che attivino le notifiche email. Le email di avviso sul budget ti aiutano a monitorare l'andamento della spesa di BigQuery rispetto al budget.

Controlla i costi di archiviazione

Utilizza queste best practice per ottimizzare il costo dello spazio di archiviazione di BigQuery. Puoi anche ottimizzare lo spazio di archiviazione per le prestazioni delle query.

Utilizza l'archiviazione a lungo termine

Best practice: utilizza i prezzi per l'archiviazione a lungo termine per ridurre i costi dei dati meno recenti.

Quando carichi i dati nello spazio di archiviazione di BigQuery, i dati sono soggetti ai prezzi di archiviazione di BigQuery. Per i dati meno recenti, puoi usufruire automaticamente dei prezzi di archiviazione a lungo termine di BigQuery.

Se hai una tabella che non viene modificata per 90 giorni consecutivi, il prezzo dello spazio di archiviazione per quella tabella diminuisce automaticamente del 50%. Se hai una tabella partizionata, ogni partizione viene considerata separatamente per l'idoneità ai prezzi a lungo termine, in base alle stesse regole delle tabelle non partizionate.

Tieni presente che, una volta che le tabelle e le partizioni delle tabelle si trovano nello spazio di archiviazione a lungo termine, qualsiasi modifica ai dati, ai metadati o al partizionamento può causare lo spostamento di queste risorse nello spazio di archiviazione attivo di BigQuery. Ecco alcuni esempi di azioni che potrebbero comportare questo spostamento:

  • Istruzioni INSERT, UPDATE, TRUNCATE, MERGE o DELETE che modificano i dati della tabella

  • Caricamento, streaming o aggiunta di dati alla tabella

  • Istruzioni ALTER che modificano lo schema della tabella

  • Aggiunta o modifica di proprietà della tabella come descrizione, etichette o scadenza

  • Modifica dei metadati della tabella

Configura il modello di fatturazione dello spazio di archiviazione

Best practice: ottimizza il modello di fatturazione dello spazio di archiviazione in base ai tuoi modelli di utilizzo.

BigQuery supporta la fatturazione dello spazio di archiviazione utilizzando byte logici (non compressi) o fisici (compressi) o una combinazione di entrambi. Il modello di fatturazione dello spazio di archiviazione configurato per ogni set di dati determina i prezzi dello spazio di archiviazione, ma non influisce sulle prestazioni delle query.

Puoi utilizzare le viste INFORMATION_SCHEMA per determinare il modello di fatturazione dello spazio di archiviazione più adatto in base ai tuoi pattern di utilizzo.

Evita di sovrascrivere le tabelle

Best practice: quando utilizzi il modello di fatturazione dello spazio di archiviazione fisico, evita di sovrascrivere ripetutamente le tabelle.

Quando sovrascrivi una tabella, ad esempio utilizzando il parametro --replace nei job di caricamento batch o l'istruzione SQL TRUNCATE TABLE, i dati sostituiti vengono conservati per la durata delle finestre di tempo di viaggio nel tempo e di sicurezza. Se sovrascrivi spesso una tabella, ti verranno addebitati costi di archiviazione aggiuntivi.

In alternativa, puoi caricare i dati in una tabella in modo incrementale utilizzando il parametro WRITE_APPEND nei job di caricamento, l'istruzione SQL MERGE o l'API Storage Write.

Riduci la finestra di spostamento cronologico

Best practice: in base ai tuoi requisiti, puoi ridurre la finestra di viaggio nel tempo.

La riduzione della finestra di spostamento cronologico rispetto al valore predefinito di sette giorni riduce il periodo di conservazione dei dati eliminati o modificati in una tabella. Ti viene addebitato il costo dello spazio di archiviazione per i viaggi nel tempo solo se utilizzi il modello di fatturazione dello spazio di archiviazione fisico (compresso).

La finestra di spostamento cronologico è impostata a livello di set di dati. Puoi anche impostare la finestra di viaggio nel tempo predefinita per i nuovi set di dati utilizzando le impostazioni di configurazione.

Utilizza la scadenza delle tabelle per le tabelle di destinazione

Best practice: se scrivi risultati di query di grandi dimensioni in una tabella di destinazione, utilizza la scadenza predefinita della tabella per rimuovere i dati quando non sono più necessari.

La conservazione di set di risultati di grandi dimensioni nello spazio di archiviazione di BigQuery ha un costo. Se non hai bisogno di un accesso permanente ai risultati, utilizza la scadenza predefinita della tabella per eliminare automaticamente i dati.

Archivia i dati in Cloud Storage

Best practice: valuta la possibilità di archiviare i dati in Cloud Storage.

Puoi spostare i dati da BigQuery a Cloud Storage in base alle esigenze aziendali di archiviazione. Come best practice, considera i prezzi di archiviazione a lungo termine e il modello di fatturazione per l'archiviazione fisica prima di esportare i dati da BigQuery.

Risoluzione dei problemi relativi alle discrepanze dei costi e agli addebiti imprevisti di BigQuery

Segui questi passaggi per risolvere i problemi relativi ad addebiti imprevisti o discrepanze di costo di BigQuery:

  1. Per capire da dove provengono gli addebiti per BigQuery quando esamini il report sulla fatturazione Cloud, il primo consiglio è raggruppare gli addebiti per SKU in modo che sia più facile osservare l'utilizzo e gli addebiti per i servizi BigQuery corrispondenti.

  2. Dopodiché, studia i prezzi degli SKU corrispondenti nella pagina della documentazione degli SKU o nella pagina Pricing nell'interfaccia utente di fatturazione Cloud per capire di quale funzionalità si tratta, ad esempio API BigQuery Storage Read, archiviazione a lungo termine, prezzi on demand, Standard Edition.

  3. Dopo aver identificato gli SKU corrispondenti, utilizza le visualizzazioni INFORMATION_SCHEMA per identificare le risorse specifiche associate a questi addebiti, ad esempio:

Considerazioni importanti per la risoluzione dei problemi:

  • Tieni presente che un periodo di tempo giornaliero nel report sulla fatturazione Cloud inizia a mezzanotte (fuso orario del Pacifico) (UTC-8) e osserva i cambiamenti dell'ora legale negli Stati Uniti. Modifica i calcoli e le aggregazioni dei dati in modo che corrispondano agli stessi periodi di tempo.

  • Quando confronti l'interfaccia utente di fatturazione Cloud con l'esportazione dei dati di fatturazione Cloud in BigQuery, assicurati di aggregare in base a usage_start_time e usage_end_time, non a export_time.

  • Filtra per progetto se all'account di fatturazione sono collegati più progetti e vuoi esaminare gli addebiti provenienti da un progetto specifico.

  • Assicurati di selezionare la regione corretta quando esegui le indagini.

Il tuo progetto ha superato la quota di byte di query scansionati senza costi

BigQuery restituisce questo errore quando esegui una query nel livello di utilizzo senza costi e l'account raggiunge il limite di query mensile. Per saperne di più sui prezzi delle query, consulta Livello di utilizzo senza costi.

Messaggio di errore

Your project exceeded quota for free query bytes scanned

Risoluzione

Per continuare a utilizzare BigQuery, devi eseguire l'upgrade dell'account a un account di fatturazione Cloud a pagamento.

La risoluzione dei problemi relativi ad addebiti imprevisti legati all'esecuzione dei job dipende dall'origine di questi addebiti:

  • Se noti un aumento dei costi di analisi on demand, questo potrebbe essere correlato a un aumento del numero di job avviati o alla modifica della quantità di dati che devono essere elaborati dai job. Esamina questo aspetto utilizzando la visualizzazione INFORMATION_SCHEMA.JOBS.
  • Se si verifica un aumento degli addebiti per gli slot prenotati, indaga eseguendo una query su INFORMATION_SCHEMA.CAPACITY_COMMITMENT_CHANGES per verificare se sono stati acquistati o modificati nuovi impegni.
  • Per gli aumenti degli addebiti derivanti dall'utilizzo delle prenotazioni, esamina le modifiche alle prenotazioni registrate in INFORMATION_SCHEMA.RESERVATION_CHANGES. Per abbinare l'utilizzo della prenotazione con scalabilità automatica ai dati di fatturazione, segui l'esempio di scalabilità automatica.

Ore slot fatturate superiori alle ore slot calcolate della vista INFORMATION_SCHEMA.JOBS

Quando utilizzi una prenotazione con scalabilità automatica, la fatturazione viene calcolata in base al numero di slot scalati, non al numero di slot utilizzati. BigQuery esegue la scalabilità automatica in multipli di 50 slot, il che comporta la fatturazione del multiplo più vicino anche se viene utilizzato un importo inferiore a quello della scalabilità automatica. Per impostazione predefinita, il gestore della scalabilità automatica ha un periodo minimo di 1 minuto prima di fare lo scale down, il che significa che viene addebitato almeno 1 minuto anche se la query ha utilizzato gli slot per un periodo di tempo inferiore, ad esempio solo per 10 secondi del minuto. Per evitare questi addebiti, puoi attivare la scalabilità fluida di BigQuery a livello di prenotazione per la fatturazione al secondo senza durata minima. Il modo corretto per stimare gli addebiti per una prenotazione con scalabilità automatica è documentato nella pagina Scalabilità automatica degli slot. Per saperne di più su come utilizzare la scalabilità automatica in modo efficiente, consulta le best practice per la scalabilità automatica.

Uno scenario simile si verificherà per le prenotazioni senza scalabilità automatica: la fatturazione viene calcolata in base al numero di slot di cui è stato eseguito il provisioning, non al numero di slot utilizzati. Se vuoi stimare gli addebiti per una prenotazione senza scalabilità automatica, puoi eseguire una query direttamente sulla vista RESERVATIONS_TIMELINE.

La fatturazione è inferiore ai byte fatturati totali calcolati tramite INFORMATION_SCHEMA.JOBS per il progetto che esegue query on demand

Esistono diversi motivi per cui la fatturazione effettiva è inferiore ai byte elaborati calcolati:

  • Ogni progetto riceve 1 TB di query del Livello senza costi al mese senza costi aggiuntivi.
  • I job di tipo SCRIPT non sono stati esclusi dal calcolo, il che potrebbe comportare il conteggio di alcuni valori due volte.
  • Diversi tipi di risparmi applicati al tuo account di fatturazione Cloud, come sconti negoziati, crediti promozionali e altri. Controlla la sezione Risparmi del report sulla fatturazione Cloud. È incluso anche il livello senza costi di 1 TB di query al mese.

La fatturazione è superiore ai byte elaborati calcolati tramite INFORMATION_SCHEMA.JOBS per il progetto che esegue query on demand

Se l'importo della fatturazione è superiore al valore calcolato eseguendo una query sulla vista INFORMATION_SCHEMA.JOBS, potrebbero esserci alcune condizioni che hanno causato questo problema:

  • Query su tabelle con sicurezza a livello di riga

    • Le query su tabelle con sicurezza a livello di riga non producono un valore per total_bytes_billed nella vista INFORMATION_SCHEMA.JOBS, pertanto la fatturazione calcolata utilizzando total_bytes_billed dalla vista INFORMATION_SCHEMA.JOBS sarà inferiore al valore fatturato. Per ulteriori dettagli sul motivo per cui queste informazioni non sono visibili, consulta la pagina Best practice per la sicurezza a livello di riga.
  • Esecuzione di operazioni ML in BigQuery

    • I prezzi di BigQuery ML per le query on demand dipendono dal tipo di modello che viene creato. Alcune di queste operazioni del modello vengono addebitate a una tariffa superiore rispetto alle query non ML. Pertanto, se sommi semplicemente tutti i total_billed_bytes per il progetto e utilizzi la tariffa standard per TB dei prezzi on demand, questa non sarà un'aggregazione dei prezzi corretta: devi tenere conto della differenza di prezzo per TB.
  • Importi dei prezzi non corretti

    • Verifica che nei calcoli vengano utilizzati i valori corretti dei prezzi per TB. Assicurati di scegliere la regione corretta, poiché i prezzi dipendono dalla località. Consulta la documentazione sui prezzi.

Il consiglio generale è seguire il metodo consigliato per calcolare l'utilizzo dei job on demand per la fatturazione nella nostra documentazione pubblica.

Addebito per l'utilizzo dell'API BigQuery Reservation anche se l'API è disabilitata e non vengono utilizzate prenotazioni o impegni

Esamina lo SKU per capire meglio quali servizi vengono addebitati. Se lo SKU fatturato è BigQuery Governance SKU, si tratta di addebiti provenienti da Knowledge Catalog. Alcune funzionalità di Knowledge Catalog attivano l'esecuzione dei job utilizzando BigQuery. Questi addebiti vengono ora elaborati con lo SKU dell'API BigQuery Reservations corrispondente. Per maggiori dettagli, consulta la documentazione sui prezzi di Knowledge Catalog.

Il progetto è assegnato a una prenotazione, ma vengono comunque visualizzati i costi on demand di BigQuery Analysis

Leggi la sezione Risoluzione dei problemi relativi alle prenotazioni per identificare l'origine degli addebiti di Analysis.

Addebiti imprevisti per gli slot con pagamento a consumo (PAYG) per la versione BigQuery Standard

Nel report sulla fatturazione Cloud, applica un filtro con l'etichetta goog-bq-feature-type con il valore BQ_STUDIO_NOTEBOOK. L'utilizzo che vedrai viene misurato come slot con pagamento a consumo nella versione BigQuery Standard. Si tratta di addebiti per l'utilizzo del notebook BigQuery Studio. Scopri di più sui prezzi dei notebook BigQuery Studio.

Addebiti imprevisti per gli slot con pagamento a consumo (PAYG) per la versione BigQuery Enterprise

Nel report sulla fatturazione Cloud, applica un filtro con l'etichetta goog-bq-feature-type con il valore SPARK_PROCEDURE. L'utilizzo che vedrai viene misurato come slot con pagamento a consumo nella versione BigQuery Enterprise. Si tratta di addebiti per l'utilizzo delle procedure Apache Spark di BigQuery, che vengono addebitate in questo modo indipendentemente dal modello di computing utilizzato dal progetto.

Addebiti dell'API BigQuery Reservations visualizzati dopo la disattivazione dell'API Reservation

La disattivazione di BigQuery non interromperà gli addebiti per l'impegno. Per interrompere gli addebiti relativi all'impegno, devi eliminare un impegno. Imposta il piano di rinnovo su NONE e l'impegno verrà eliminato automaticamente alla scadenza.

L'esecuzione di query su tabelle molto piccole comporta un costo sproporzionatamente elevato per l'on-demand

Il numero minimo di "dati elaborati per tabella di riferimento" fatturati per una query BigQuery è 10 MiB, indipendentemente dalle dimensioni effettive della tabella. Analogamente, la quantità minima di "dati elaborati per query" fatturata è di 10 MiB. Quando esegui query su tabelle di piccole dimensioni, anche di pochi kB, ti vengono addebitati almeno 10 MiB per ogni query. Ciò può comportare addebiti molto più elevati rispetto alle stime di fatturazione on demand ed è particolarmente costoso per i prezzi di computing on demand.

Addebiti per lo spazio di archiviazione imprevisti

Scenari che potrebbero comportare un aumento dei costi di archiviazione:

L'eliminazione di tabelle o set di dati ha comportato un aumento dei costi di archiviazione di BigQuery

La funzionalità di viaggio nel tempo di BigQuery conserva i dati eliminati per la durata della finestra di viaggio nel tempo configurata e per altri 7 giorni per il ripristino di emergenza. Durante questa finestra di conservazione, i dati eliminati nei set di dati del modello di fatturazione dello spazio di archiviazione fisico contribuiscono al costo dello spazio di archiviazione fisico attivo, anche se le tabelle non verranno più visualizzate in INFORMATION_SCHEMA.TABLE_STORAGE o nella console. Se i dati della tabella erano nello spazio di archiviazione a lungo termine, l'eliminazione comporta lo spostamento di questi dati nello spazio di archiviazione fisico attivo. Ciò comporta un aumento del costo corrispondente, perché i byte fisici attivi vengono addebitati circa 2 volte di più rispetto ai byte fisici a lungo termine, in base alla pagina dei prezzi di archiviazione di BigQuery. L'approccio consigliato per ridurre al minimo i costi causati dall'eliminazione dei dati per i set di dati del modello di fatturazione dello spazio di archiviazione fisico è ridurre la finestra di tempo di viaggio a 2 giorni.

Costi di archiviazione ridotti senza modifiche ai dati

In BigQuery, gli utenti pagano per lo spazio di archiviazione attivo e a lungo termine. I costi di archiviazione attiva includono qualsiasi tabella o partizione di tabella che non è stata modificata per 90 giorni consecutivi, mentre i costi di archiviazione a lungo termine includono tabelle e partizioni che non sono state modificate per 90 giorni consecutivi. La riduzione complessiva dei costi di archiviazione può essere osservata quando i dati passano allo spazio di archiviazione a lungo termine, che è circa il 50% più economico dello spazio di archiviazione attivo. Per maggiori dettagli, consulta i prezzi dello spazio di archiviazione.

Il costo di archiviazione è aumentato senza un aumento significativo dei dati

I costi di archiviazione possono aumentare se i dati nell'archiviazione a lungo termine vengono spostati nell'archiviazione BigQuery attiva in seguito a determinate azioni sui dati, sui metadati o sulle partizioni della tabella. Per maggiori dettagli, consulta Utilizza l'archiviazione a lungo termine.

I calcoli dello spazio di archiviazione di INFORMATION_SCHEMA non corrispondono alla fatturazione

  • Utilizza la vista INFORMATION_SCHEMA.TABLE_STORAGE_USAGE_TIMELINE anziché INFORMATION_SCHEMA.TABLE_STORAGE: TABLE_STORAGE_USAGE_TIMELINE fornisce dati più accurati e granulari per calcolare correttamente i costi di archiviazione
  • Le query eseguite sulle visualizzazioni INFORMATION_SCHEMA non includono tasse, aggiustamenti ed errori di arrotondamento, che vanno presi in considerazione quando si confrontano i dati. Scopri di più sui report nella fatturazione Cloud in questa pagina.
  • I dati presentati nelle visualizzazioni INFORMATION_SCHEMA sono in formato UTC, mentre i dati del report sulla fatturazione sono riportati nel fuso orario del Pacifico (UTC-8).

Passaggi successivi