Benvenuti alla rubrica “Discovering Snowflake”, dove esploreremo le potenzialità di Snowflake e gli elementi che la costituiscono. In questa serie di articoli, vi accompagneremo in un viaggio di scoperta attraverso le funzionalità, i vantaggi e le migliori pratiche di Snowflake.
Che tu sia un professionista dei dati, un analista o uno sviluppatore, o semplicemente interessato a conoscere una delle soluzioni più innovative per l’elaborazione dei dati, questa rubrica ti offrirà una panoramica completa di Snowflake e ti guiderà nella comprensione delle sue caratteristiche chiave.
Nell’articolo di oggi approfondiremo alcuni miglioramenti a livello di sintassi SQL in anteprima privata annunciato durante il Summit Snowflake 2023.
SQL è un linguaggio potente e versatile che consente di accedere, modificare e gestire i dati in modo efficiente. È essenziale per chiunque lavori con i dati.
SELECT * EXCLUDE
Nel contesto di un’interrogazione SQL, è comune voler selezionare tutte le colonne di una tabella, tranne alcune. Una pratica comune è elencare esplicitamente ogni colonna nella clausola SELECT, ma questo può diventare dispendioso in termini di tempo quando il numero di colonne è elevato.
Altre strategie alternative includono la creazione di tabelle temporanee contenenti solo le colonne desiderate o l’implementazione di stored procedure.
Ora, Snowflake offre una soluzione elegante a questo problema tramite la sintassi SQL EXCLUDE. Questa permette di selezionare tutte le colonne di una tabella, escludendone alcune.
Ecco un esempio di sintassi:
SELECT * EXCLUDE col1, col2 FROM table1
Immaginiamo di avere la tabella seguente:
Tramite questa sintassi siamo in grado di escludere le due colonne selezionate.
SELECT * RENAME
Oltre a escludere un elenco di colonne dalla clausola SELECT, è spesso necessario rinominare alcune colonne quando si utilizza SELECT *. Ciò può essere utile, ad esempio, se si devono gestire nomi duplicati a seguito di un JOIN. Un’opzione potrebbe essere selezionare la colonna rinominata e poi utilizzare SELECT *, ma ciò comporterebbe anche la selezione della colonna originale, vanificando lo scopo della query.
Snowflake offre una soluzione nativa a questa problematica, grazie alla sintassi seguente:
SELECT * RENAME col1 AS col2 FROM table1
È possibile utilizzare RENAME e EXCLUDE insieme in una query.
SELECT * EXCLUDE col1 RENAME col2 AS col3 FROM table1
Ad esempio la query seguente esclude il first_name e rinomina last_name con surname:
La decisione di utilizzare o meno SELECT * nella tua query è fondamentale. Alcuni potrebbero suggerire di elencare sempre esplicitamente i nomi delle colonne e di evitare SELECT * nel caso in cui le colonne nella tabella di base possano cambiare. Sebbene ciò sia generalmente valido, ci sono situazioni in cui SELECT * risulta prezioso, specialmente durante attività di risoluzione dei problemi e nell’esplorazione dei dati.
In linea generale, l’impiego delle nuove sintassi SELECT * EXCLUDE e SELECT * RENAME è consigliato quando desideri estrarre tutte le colonne da una tabella tranne alcune, o quando intendi rinominare specifiche colonne. Queste nuove sintassi ti consentono di scrivere query SQL più chiare e efficienti.
MIN_BY e MAX_BY
Le funzioni aggregate MIN_BY
e MAX_BY
offrono la possibilità di individuare le righe contenenti il valore minimo o massimo per una specifica colonna e di estrarre il valore corrispondente di un’altra colonna. Questo tipo di richiesta è comune nelle situazioni che coinvolgono sottoquery o join autoreferenziali.
Un contesto comune in cui queste funzioni eccellono è l’analisi di serie temporali, dove l’obiettivo potrebbe essere individuare il massimo valore di un timestamp, concentrandosi però sullo stato associato a quel determinato istante.
In passato, per affrontare questa tipologia di compito, si ricorreva spesso a complessi self-join. Ora, invece, è sufficiente utilizzare una funzione.
A titolo di esempio, supponiamo di voler identificare gli employee_id
più giovani e più anziani:
Puoi inoltre selezionare i primi 3 employee_id
in base all’età più alta o più bassa:
BANKER’S ROUNDING
La procedura di arrotondamento può risultare complessa in alcune circostanze, in quanto esistono oltre 10 metodi di arrotondamento tra cui scegliere.
La funzione ROUND() in Snowflake ora offre una nuova opzione, denominata rounding_mode
, che consente di selezionare tra due modalità di approssimazione: HALF_AWAY_FROM_ZERO, il tradizionale metodo di arrotondamento, e HALF_TO_EVEN, frequentemente utilizzato nell’ambito finanziario o statistico.
Modalità di Approssimazione:
La funzione ROUND() di Snowflake supporta due diverse modalità di approssimazione:
- HALF_AWAY_FROM_ZERO (modalità predefinita): Questo metodo approssima i numeri decimali verso il valore più vicino a metà strada tra zero. Ad esempio, 0,5 verrà approssimato a 1,0 e -0,5 a -1,0.
- HALF_TO_EVEN (noto anche come approssimazione bancaria): Questa modalità approssima i numeri decimali al numero pari più vicino. Ad esempio, 0,5 verrà approssimato a 0,0 e -0,5 anch’esso a 0,0.
La modalità HALF_TO_EVEN è comunemente preferita quando si lavora con dati finanziari o statistici, poiché è meno incline a introdurre un bias nei risultati. Ad esempio, se si sta approssimando l’importo dei centesimi in una transazione finanziaria, utilizzare HALF_TO_EVEN garantirà che l’ammontare totale sia approssimato all’importo pari più vicino.
Questo fornisce un modo matematicamente imparziale di arrotondare.
GROUP BY ALL
Nella maggior parte dei casi, ora puoi utilizzare GROUP BY ALL anziché il tradizionale GROUP BY con specifiche di colonne (come col1, col2, col3 o GROUP BY 1,2,3). Questo significa che aggiungere o rimuovere colonne dalla clausola SELECT non comprometterà più l’esecuzione della query.
Ecco alcuni vantaggi nell’utilizzare la clausola GROUP BY ALL:
- Semplicità: La clausola GROUP BY ALL è più semplice da utilizzare rispetto alla versione tradizionale, in quanto non richiede la specifica di colonne specifiche.
- Flessibilità: Offre una maggiore flessibilità rispetto alla versione tradizionale, permettendo l’aggiunta o la rimozione di colonne dalla clausola SELECT senza impattare i risultati della query.
- Efficienza: Può risultare più efficiente rispetto alla versione tradizionale, in quanto non richiede l’esecuzione di operazioni di aggregazione su tutte le colonne della tabella.
Per ulteriori domande su Snowflake vi invitamo a contattarci all’indirizzo: info@theinformationlab.it Speriamo che questo articolo vi abbia incuriosito e che continuiate a seguire il nostro blog. Alla prossima!