La Funzione UNNEST: Pilastro dell’Analisi Dati Avanzata in BigQuery
Nel contesto dei database e dell’elaborazione di query, in particolare in ambienti come BigQuery, la funzione UNNEST
assume un ruolo cruciale nella manipolazione e nell’analisi di strutture dati complesse. Questa funzione è impiegata per destrutturare o espandere array o liste annidate, trasformandoli in un insieme di righe tabellari, facilitando così operazioni di query successive su ciascun elemento contenuto.
Spieghiamolo ad un bambino di 4 anni.
Immagina di avere una scatola piena di piccole scatoline, ognuna contenente diversi oggetti. Se volessi vedere tutti gli oggetti insieme, dovrei aprire ogni piccola scatolina e disporre il contenuto su un tavolo. In termini di database, questa operazione è molto simile a quello che fa UNNEST
.
Nel contesto di BigQuery e delle query SQL, UNNEST
è una funzione che prende una lista di elementi raggruppati insieme (come le nostre piccole scatoline) e li “apre”, o “disanida”, per trasformarli in una serie di righe che possono essere facilmente esaminate o analizzate. Quindi, se hai dei dati che sono raggruppati in array o liste e vuoi lavorare con ciascun elemento individualmente, utilizzeresti UNNEST
per “spargere” questi elementi in modo che ogni pezzo diventi accessibile singolarmente.
Riassumendo, UNNEST
ti aiuta a passare da avere un “mucchio” di elementi confezionati insieme ad avere ciascuno di questi elementi disposti ordinatamente in fila per essere analizzato o processato più facilmente.
PS. Prima di procedere, ti consiglio di approfondire l’argomento su come sono organizzati i dati in BigQuery.
I campi della tabella “events” che richiedono un UNNEST sono quelli di tipo RECORD:
Come effettuare un UNNEST del campo “event_params”
Un esempio di campo della tabella “events” che gioca un ruolo fondamentale e che richiede un UNNEST è event_params
. Questo campo rappresenta un array di strutture chiave-valore che cattura dettagli specifici relativi a ciascun evento tracciato. Ogni elemento all’interno di event_params
fornisce informazioni aggiuntive su un evento, come il tipo di evento, l’ID della sessione, se la sessione è stata considerata coinvolta, e altri dati specifici dell’interazione dell’utente.
La query che segue, consente di fare un UNNEST dell’evento “page_view” consentendo l’esplorazione della struttura chiave-valore (ricordati di sostituire {table} con l’ID della tua tabella su BigQuery):
WITH Details AS (
SELECT
user_pseudo_id,
CONCAT(user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')) AS session_id,
event_name,
event_params
FROM
`{table}_*`
WHERE
event_name = 'page_view'
),
UnnestedDetails AS (
SELECT
pd.user_pseudo_id,
pd.session_id,
pd.event_name,
ep.key AS param_key,
ep.value.string_value AS string_value,
ep.value.int_value AS int_value,
ep.value.float_value AS float_value,
ep.value.double_value AS double_value
FROM
Details pd
CROSS JOIN
UNNEST(pd.event_params) AS ep
)
SELECT
*
FROM
UnnestedDetails
L’esecuzione di questa query genera un report che consente di esplorare la coppia chiave-valore contenute nel campo:
Esempio la prima riga indica che, da uno specifico utente (user_pseudo_id) in una specifica sessione (session_id) si è verificato un evento “page_view” dal mezzo (param_key) ads (string_value).
Niente di più semplice. Buon UNNEST!
Data Scientist
Sono un Data Scientist con esperienza nell’applicazione di tecniche avanzate di Machine Learning per l’analisi di complessi set di dati nel campo del marketing digitale. Specializzato nell’uso di Python, sviluppo modelli predittivi e di analisi dei dati che permettono di identificare e risolvere criticità nei progetti.