Partizioni e bucket Hive con esempio
Tabelle, partizioni e bucket sono le parti della modellazione dei dati Hive.
Cosa sono le partizioni?
Hive Partitions è un modo per organizzare le tabelle in partizioni dividendo le tabelle in parti diverse in base alle chiavi di partizione.
La partizione è utile quando la tabella ha una o più chiavi di partizione. Le chiavi di partizione sono elementi di base per determinare la modalità di archiviazione dei dati nella tabella.
Per Esempio: -
"Cliente che dispone di alcuni dati di e-commerce che appartengono alle operazioni dell'India in cui le operazioni di ciascuno stato (38 stati) sono menzionate nel loro insieme. Se prendiamo la colonna dello stato come chiave di partizione ed eseguiamo le partizioni sui dati dell'India nel loro insieme, possiamo ottenere il numero di partizioni (38 partizioni) che è uguale al numero di stati (38) presenti in India. In modo tale che i dati di ogni stato possano essere visualizzati separatamente nelle tabelle delle partizioni.
Snippet di codice di esempio per le partizioni
- Creazione della tabella tutti gli stati
create table all states(state string, District string,Enrolments string) row format delimited fields terminated by ',';
- Caricamento dei dati nella tabella creata in tutti gli stati
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
- Creazione della tabella delle partizioni
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
- Per la partizione dobbiamo impostare questa proprietà
set hive.exec.dynamic.partition.mode=nonstrict
- Caricamento dei dati nella tabella delle partizioni
INSERT OVERWRITE TABLE state_part PARTITION(state) SELECT district,enrolments,state from allstates;
- Elaborazione effettiva e formazione di tabelle di partizione in base allo stato come chiave di partizione
- Ci saranno 38 output di partizioni nell'archivio HDFS con il nome del file come nome dello stato. Lo controlleremo in questo passaggio
Gli screenshot seguenti mostreranno l'esecuzione del codice sopra menzionato
Dal codice sopra, facciamo le seguenti cose
- Creazione della tabella di tutti gli stati con 3 nomi di colonna come stato, distretto e iscrizione
- Caricamento dei dati nella tabella tutti gli stati
- Creazione della tabella delle partizioni con lo stato come chiave di partizione
- In questo passaggio impostare la modalità di partizione come non rigorosa (questa modalità attiverà la modalità di partizione dinamica)
- Caricamento dei dati nella partizione tablestate_part
- Elaborazione effettiva e formazione di tabelle di partizione in base allo stato come chiave di partizione
- Ci saranno 38 output di partizione nell'archiviazione HDFS con il nome del file come nome dello stato. Lo controlleremo in questo passaggio. In questo passaggio, vediamo i 38 output della partizione in HDFS
Cos'è i bucket?
I bucket in hive vengono utilizzati per separare i dati della tabella hive in più file o directory. viene utilizzato per interrogazioni efficienti.
- I dati presenti in quelle partizioni possono essere ulteriormente suddivisi in bucket
- La divisione viene eseguita in base agli Hash di particolari colonne che abbiamo selezionato nella tabella.
- I bucket utilizzano una qualche forma di algoritmo Hashing nel back-end per leggere ciascun record e inserirlo nei bucket
- In Hive dobbiamo abilitare i bucket utilizzando il file set.hive.enforce.bucketing=true;
Passo 1) Creazione del bucket come mostrato di seguito.
Dalla schermata sopra
- Stiamo creando sample_bucket con nomi di colonna come first_name, job_id, dipartimento, stipendio e paese
- Stiamo creando 4 secchi qui.
- Una volta che i dati vengono caricati automaticamente, inserisci i dati in 4 bucket
Passo 2) Caricamento dei dati nel bucket campione della tabella
Supponendo che la "tabella dei dipendenti" sia già stata creata nel sistema Hive. In questo passaggio, vedremo il caricamento dei dati dalla tabella dei dipendenti nel bucket di esempio della tabella.
Prima di iniziare a spostare i dati dei dipendenti nei bucket, assicurati che siano costituiti da nomi di colonna come first_name, job_id, dipartimento, stipendio e paese.
Qui stiamo caricando i dati nel bucket campione dalla tabella dei dipendenti.
Passo 3)Visualizzazione dei 4 bucket creati nel passaggio 1
Dallo screenshot sopra, possiamo vedere che i dati dalla tabella dei dipendenti vengono trasferiti in 4 bucket creati nel passaggio 1.