Introduzione alle tabelle in cluster
Le tabelle in cluster in BigQuery sono tabelle che hanno un ordine di ordinamento delle colonne definito dall'utente mediante colonne in cluster. Le tabelle in cluster possono migliorare le prestazioni delle query e ridurre i relativi costi.
In BigQuery, una colonna in cluster è una proprietà di tabella definita dall'utente che ordina i blocchi di archiviazione in base ai valori nelle colonne in cluster. I blocchi di archiviazione vengono adattati in base alle dimensioni della tabella. Una tabella in cluster mantiene le proprietà di ordinamento nel contesto di ogni operazione che la modifica. Le query che filtrano o aggregano le colonne in cluster analizzano solo i blocchi pertinenti in base alle colonne in cluster anziché l'intera partizione della tabella o della tabella. Di conseguenza, BigQuery potrebbe non essere in grado di stimare con precisione i byte che devono essere elaborati dalla query o i relativi costi, ma tenta di ridurre i byte totali al momento dell'esecuzione.
Quando raggruppi una tabella utilizzando più colonne, l'ordine delle colonne determina quali colonne hanno la precedenza quando BigQuery ordina e raggruppa i dati in blocchi di archiviazione. L'esempio seguente confronta il layout dei blocchi di archiviazione logico di una tabella non cluster con il layout delle tabelle in cluster con una o più colonne in cluster:
Quando esegui una query su una tabella in cluster, non ricevi una stima accurata dei costi delle query prima dell'esecuzione della query perché il numero di blocchi di archiviazione da analizzare non è noto prima dell'esecuzione della query. Il costo finale viene determinato al termine dell'esecuzione della query e si basa sui blocchi di archiviazione specifici analizzati.
Quando utilizzare il clustering
Il clustering gestisce il modo in cui è archiviata una tabella, pertanto è in genere una buona prima opzione per migliorare le prestazioni delle query. Dovresti quindi sempre prendere in considerazione il clustering dati i seguenti vantaggi che offre:
- Se generalmente le tue query filtrano in base a colonne specifiche, il clustering accelera le query, in quanto la query analizza solo i blocchi che corrispondono al filtro.
- Se le query filtrano in base a colonne che hanno molti valori distinti (cardinalità elevata), il clustering accelera queste query fornendo a BigQuery metadati dettagliati su dove trovare i dati di input.
- Il clustering consente di dimensionare in modo adattivo i blocchi di archiviazione sottostanti della tabella in base alle dimensioni della tabella.
Potresti considerare il partizionamento della tabella oltre al clustering. Con questo approccio, per prima cosa i dati vengono segmentati in partizioni, dopodiché i dati vengono raggruppati all'interno di ogni partizione in base alle colonne di clustering. Prendi in considerazione questo approccio nelle seguenti circostanze:
- Prima di eseguire una query, è necessaria una stima rigorosa dei costi delle query. Il costo delle query sulle tabelle in cluster può essere determinato solo dopo l'esecuzione della query. Il partizionamento fornisce stime granulari dei costi delle query prima di eseguire una query.
- Il partizionamento della tabella determina una dimensione media delle partizioni di almeno 10 GB per partizione. La creazione di molte partizioni di piccole dimensioni aumenta i metadati della tabella e può influire sui tempi di accesso ai metadati durante l'esecuzione di query sulla tabella.
- Devi aggiornare continuamente la tabella, ma vuoi comunque usufruire dei prezzi dell'archiviazione a lungo termine. Il partizionamento consente a ogni partizione di essere considerata separatamente per l'idoneità per i prezzi a lungo termine. Se la tabella non è partizionata, l'intera tabella non deve essere modificata per 90 giorni consecutivi per essere considerata per i prezzi a lungo termine.
Per maggiori informazioni, consulta Combinare tabelle in cluster e partizionate.
Tipi di colonne e ordine delle colonne nel cluster
Questa sezione descrive i tipi di colonne e il funzionamento dell'ordine delle colonne nel clustering delle tabelle.
Tipi di colonne cluster
Le colonne del cluster devono essere colonne di primo livello non ripetute che rientrano in uno dei seguenti tipi:
STRING
INT64
NUMERIC
BIGNUMERIC
DATE
DATETIME
TIMESTAMP
BOOL
GEOGRAPHY
Per ulteriori informazioni sui tipi di dati, consulta Tipi di dati di GoogleSQL.
Ordine delle colonne nel cluster
L'ordine delle colonne in cluster influisce sulle prestazioni delle query. Per trarre vantaggio dal clustering, l'ordine del filtro delle query deve corrispondere all'ordine delle colonne in cluster e deve includere almeno la prima colonna in cluster.
Nell'esempio seguente, la tabella degli ordini è raggruppata in cluster utilizzando un ordinamento delle colonne pari a Order_Date
, Country
e Status
. Una query che filtra in base a Order_Date
e Country
è ottimizzata per il clustering, ma una query che filtra solo in base a Country
e Status
non è ottimizzata. Per ottimizzare i risultati di clustering, devi filtrare le colonne in cluster in ordine a partire dalla prima colonna in cluster.
Eliminazione dei blocchi
Le tabelle in cluster possono aiutarti a ridurre i costi delle query eliminando i dati in modo che non vengano elaborati dalla query. Questo processo è chiamato eliminazione dei blocchi. BigQuery ordina i dati in una tabella in cluster in base ai valori nelle colonne di clustering e li organizza in blocchi.
Quando esegui una query su una tabella in cluster e la query include un filtro sulle colonne in cluster, BigQuery utilizza l'espressione di filtro e i metadati del blocco per eliminare i blocchi analizzati dalla query. Ciò consente a BigQuery di analizzare solo i blocchi pertinenti.
Quando un blocco viene eliminato, non viene scansionato. Solo i blocchi analizzati vengono utilizzati per calcolare i byte dei dati elaborati dalla query. Il numero di byte elaborati da una query su una tabella in cluster corrisponde alla somma dei byte letti in ogni colonna a cui fa riferimento la query nei blocchi analizzati.
Se una query che utilizza diversi filtri fa riferimento più volte a una tabella in cluster, BigQuery addebita l'analisi delle colonne nei blocchi appropriati in ciascuno dei rispettivi filtri. Per un esempio di come funziona l'eliminazione dei blocchi, consulta la sezione Esempio.
Combinare tabelle in cluster e partizionate
Puoi combinare il clustering delle tabelle con il partizionamento delle tabelle per ottenere un ordinamento granulare per un'ulteriore ottimizzazione delle query.
In una tabella partizionata, i dati vengono archiviati in blocchi fisici, ognuno dei quali contiene una partizione di dati. Ogni tabella partizionata conserva vari metadati sulle proprietà di ordinamento in tutte le operazioni che la modificano. I metadati consentono a BigQuery di stimare in modo più preciso il costo di una query prima di eseguirla. Per il partizionamento è però necessario che BigQuery conservi più metadati rispetto a una tabella non partizionata. Con l'aumento del numero di partizioni, aumenta la quantità di metadati da mantenere.
Quando crei una tabella in cluster e partizionata, puoi ottenere un ordinamento più granulare, come mostra il seguente diagramma:
Esempio
Hai una tabella in cluster denominata ClusteredSalesData
. La tabella è partizionata in base alla colonna timestamp
ed è raggruppata in cluster in base alla colonna customer_id
. I dati sono organizzati nel seguente insieme di blocchi:
Identificatore di partizione | ID blocco | Valore minimo per customer_id nel blocco | Valore massimo per customer_id nel blocco |
---|---|---|---|
20160501 | B1 | 10000 | 19999 |
20160501 | B2 | 20000 | 24999 |
20160502 | B3 | 15000 | 17999 |
20160501 | B4 | 22000 | 27999 |
Esegui la seguente query sulla tabella. La query contiene un filtro nella colonna customer_id
.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id BETWEEN 20000 AND 23000 AND DATE(timestamp) = "2016-05-01"
La query precedente prevede i seguenti passaggi:
- Analizza le colonne
timestamp
,customer_id
etotalSale
nei blocchi B2 e B4. - Elimina il blocco B3 a causa del predicato del filtro
DATE(timestamp) = "2016-05-01"
nella colonna di partizionamentotimestamp
. - Elimina il blocco B1 a causa del predicato del filtro
customer_id BETWEEN 20000 AND 23000
nella colonna di clusteringcustomer_id
.
Reclustering automatico
Quando i dati vengono aggiunti a una tabella in cluster, i nuovi dati sono organizzati in blocchi, che potrebbero creare nuovi blocchi di archiviazione o aggiornare quelli esistenti. L'ottimizzazione dei blocchi è necessaria per prestazioni ottimali di query e archiviazione perché i nuovi dati potrebbero non essere raggruppati con quelli esistenti con gli stessi valori del cluster.
Per mantenere le caratteristiche di prestazioni di una tabella in cluster, BigQuery esegue il riclustering automatico in background. Per le tabelle partizionate, il clustering viene mantenuto per i dati nell'ambito di ogni partizione.
Limitazioni
- Solo GoogleSQL è supportato per l'esecuzione di query su tabelle in cluster e per la scrittura dei risultati delle query nelle tabelle in cluster.
- Puoi specificare solo fino a quattro colonne di clustering. Se hai bisogno di colonne aggiuntive, valuta la possibilità di combinare il clustering con il partizionamento.
- Quando utilizzi le colonne di tipo
STRING
per il clustering, BigQuery utilizza solo i primi 1024 caratteri per raggruppare i dati. I valori nelle colonne possono contenere a loro volta più di 1024 caratteri. - Se modifichi una tabella non in cluster esistente da creare in cluster, i dati esistenti non vengono raggruppati automaticamente. Solo i nuovi dati vengono archiviati utilizzando le colonne in cluster e sono soggetti al reclustering automatico. Per ulteriori informazioni sul reclustering dei dati esistenti utilizzando un'istruzione UPDATE in loco, consulta Modificare le specifiche di clustering.
Quote e limiti delle tabelle in cluster
BigQuery limita l'uso delle risorse Google Cloud condivise con quote e limiti, tra cui limitazioni su alcune operazioni della tabella o il numero di job eseguiti in un giorno.
Quando utilizzi la funzionalità delle tabelle in cluster con una tabella partizionata, sei soggetto ai limiti delle tabelle partizionate.
Quote e limiti si applicano anche ai diversi tipi di job che puoi eseguire nelle tabelle in cluster. Per informazioni sulle quote dei job che si applicano alle tabelle, consulta Job in "Quote e limiti".
Prezzi delle tabelle in cluster
Quando crei e utilizzi tabelle in cluster in BigQuery, i tuoi addebiti dipendono dalla quantità di dati archiviati nelle tabelle e dalle query eseguite sui dati. Per ulteriori informazioni, consulta i prezzi dell'archiviazione e i prezzi delle query.
Come altre operazioni sulle tabelle BigQuery, quelle sulle tabelle in cluster sfruttano operazioni gratuite di BigQuery come il caricamento in batch, la copia delle tabelle, il reclustering automatico e l'esportazione dei dati. Queste operazioni sono soggette a quote e limiti di BigQuery. Per informazioni sulle operazioni gratuite, consulta Operazioni gratuite.
Per un esempio dettagliato dei prezzi delle tabelle in cluster, consulta Stima dei costi di archiviazione e query.
Sicurezza della tabella
Per controllare l'accesso alle tabelle in BigQuery, consulta Introduzione ai controlli di accesso alle tabelle.
Passaggi successivi
- Per scoprire come creare e utilizzare le tabelle in cluster, consulta Creazione e utilizzo delle tabelle in cluster.
- Per informazioni sull'esecuzione di query sulle tabelle in cluster, consulta Esecuzione di query sulle tabelle in cluster.