Come vengono implementati i diversi metodi di partizionamento/clustering in Delta? Come funzionano in pratica?
Uno dei problemi che rendono difficili i Big Data è sempre stato nel loro nome, è Big. Il partizionamento, soprattutto se eseguito correttamente, è sempre stato un modo per migliorare i tempi di esecuzione delle query su grandi quantità di dati riducendo i dati da leggere in un sottoinsieme. Tuttavia, il partizionamento dei dati è complesso e richiede un’attenta riflessione e una pianificazione anticipata, poiché ciò che soddisfa i requisiti odierni potrebbe non adattarsi a quelli futuri. Ad esempio, nel partizionamento in stile Hive, potrebbe essere necessario modificare le colonne o addirittura aumentarne la cardinalità e rendere i dati sovrapartizionati (problema dei file di piccole dimensioni), richiedendo una ristrutturazione completa dei dati che non è affatto ideale.
Il clustering Z-Order è un’altra tecnica utilizzata per saltare i dati, evitando anche scansioni complete dei dati. Tuttavia, questa tecnica presenta alcune limitazioni. Uno è che i dati appena inseriti non vengono ordinati per impostazione predefinita e gli utenti sono tenuti a riorganizzarli, il che significa che i dati già raggruppati verranno riorganizzati e riscritti, aumentando il tempo dedicato all’operazione. Gli utenti Z-Order devono inoltre definire le colonne di clustering ogni volta che eseguono il comando poiché non fanno parte di alcuna proprietà della tabella.
È qui che entra in gioco Liquid Clustering. La premessa è che possa adattarsi perfettamente al layout attuale dei dati ed essere anche in grado di adattarsi alle esigenze future senza la necessità di riscrivere i dati già raggruppati.
In questo post spiegheremo i dettagli delle diverse strategie di potatura dei dati in Delta e come vengono applicate.
Il partizionamento in stile Hive è un modo di organizzare una tabella in piccole parti. Questi blocchi di dati sono organizzati in diverse sottocartelle che contengono i dati per il valore della partizione.
dbfs://people10m/gender=M/data_0.json
dbfs://people10m/gender=M/data_1.json
dbfs://people10m/gender=F/data_0.json…
Fonte: towardsdatascience.com