Usa le Partizioni, Luke! Un modo semplice e provato per ottimizzare le tue Query SQL

Utilizza le Partizioni, Luke! Un metodo semplice e provato per ottimizzare le tue Query SQL

Se hai mai scritto una query SQL che ci mette un attimo a eseguirsi, questo è l’articolo che fa per te

Baby Yoda ama le partizioni. E tu? Immagine di Victor Serban su Unsplash

I Data Scientist amano SQL, ma che brutto lavoro che facciamo nel scrivere query performanti (forse perché passiamo troppo tempo a dibattere se si pronuncia “S-Q-L” o “sequel”?).

In questo articolo, ti mostrerò come utilizzare partizioni SQL per ottimizzare le tue query e scrivere codice più veloce e conveniente da eseguire. Se hai padroneggiato le basi di SQL e vuoi iniziare a sfruttare competenze di Data Science di livello superiore, questa sarà una grande aggiunta al tuo set di strumenti.

Cos’è una tabella partizionata?

Una tabella partizionata è una tabella divisa in segmenti/partizioni (chi l’avrebbe mai detto?).

In una tabella partizionata, ogni segmento è memorizzato in una posizione diversa sul server. Questo è diverso da una normale tabella SQL (non partizionata), in cui l’intera tabella si trova in una singola posizione.

Ecco un confronto utilizzando dati di esempio sulle vendite giornaliere di tre dei miei libri preferiti:

Immagine dell'autore

Sia la tabella non partizionata che quella partizionata contengono gli stessi dati; l’unica differenza è che la tabella partizionata suddivide i dati in segmenti diversi. Rimane comunque una singola tabella (ovvero non sono tre tabelle separate); sta solo memorizzando i dati in modo diverso.

Perché dovremmo preoccuparcene? Beh, come vedremo tra poco, possiamo sfruttare questa struttura per scrivere query SQL più efficienti.

Creazione di tabelle partizionate

Creare una tabella partizionata è semplice come bere un bicchiere d’acqua.

Ad esempio, se utilizzassimo il seguente codice per creare una normale tabella (non partizionata)…

CREATE TABLE `myproject.mydataset.unpartitioned` (  data DATE,   nome_libro STRING,  vendite_totali INT64);INSERT INTO `myproject.mydataset.unpartitioned`VALUES  ('2023-12-01', 'Shoe Dog', 154),  ('2023-12-01', 'Born to Run', 90),  ('2023-12-02', 'Running with the…