Query Hive: Ordina per, Raggruppa per, Distribuisci per, Cluster Per esempi
Hive fornisce inoltre un linguaggio di query di tipo SQL per lo scopo ETL Hadoop file system.
Il linguaggio Hive Query (HiveQL) fornisce un ambiente di tipo SQL in Hive per lavorare con tabelle, database e query.
Possiamo avere diversi tipi di clausole associate a Hive per eseguire manipolazioni e query di dati di diverso tipo. Per una migliore connettività con diversi nodi esterni all'ambiente. HIVE fornisce anche la connettività JDBC.
Le query Hive offrono le seguenti funzionalità:
- Modellazione dei dati come creazione di database, tabelle, ecc.
- Funzionalità ETL come estrazione, trasformazione e caricamento di dati in tabelle
- Entra a far parte per unire diverse tabelle di dati
- Script personalizzati specifici dell'utente per facilitare la codifica
- Strumento di query più veloce su Hadoop
Creazione della tabella in Hive
Prima di iniziare con l'argomento principale di questo tutorial, creeremo una tabella da utilizzare come riferimento per il tutorial seguente.
Qui in questo tutorial creeremo la tabella "employees_guru" con 6 colonne.
Dalla schermata sopra,
- Stiamo creando la tabella "employees_guru" con 6 valori di colonna come Id, Nome, Età, Indirizzo, Stipendio, Dipartimento, che appartiene ai dipendenti presenti nell'organizzazione "guru".
- Qui in questo passaggio stiamo caricando i dati nella tabella Employees_guru. I dati che caricheremo verranno inseriti nel file Employees.txt
Ordina per query
La sintassi ORDER BY in HiveQL è simile alla sintassi di ORDER BY in SQL Lingua.
Order by è la clausola che utilizziamo con l'istruzione "SELECT" in Query alveare, che aiuta a ordinare i dati. La clausola Ordina per utilizza le colonne nelle tabelle Hive per ordinare particolari valori di colonna menzionati con Ordina per. Qualunque sia il nome della colonna, stiamo definendo la clausola order by, la query selezionerà e visualizzerà i risultati in ordine crescente o decrescente per i valori della colonna particolare.
Se l'ordine per campo menzionato è una stringa, verrà visualizzato il risultato in ordine lessicografico. Nella parte posteriore deve essere passato ad un unico riduttore.
Dallo screenshot sopra, possiamo osservare quanto segue
- È la query che viene eseguita sulla tabella "employees_guru" con la clausola ORDER BY con Department come nome della colonna ORDER BY definito. "Department" è String, quindi visualizzerà i risultati in base all'ordine lessicografico.
- Questo è l'output effettivo della query. Se lo osserviamo correttamente, possiamo vedere che vengono visualizzati i risultati in base alla colonna Dipartimento come ADMIN, Finanza e così via per eseguire orderQuery.
Query:
SELECT * FROM employees_guru ORDER BY Department;
Raggruppa per query
La clausola Group by utilizza le colonne sulle tabelle Hive per raggruppare particolari valori di colonna menzionati con group by. Qualunque sia il nome della colonna che stiamo definendo una clausola "groupby", la query selezionerà e visualizzerà i risultati raggruppando i valori della colonna particolare.
Ad esempio, nella schermata seguente verrà visualizzato il conteggio totale dei dipendenti presenti in ciascun dipartimento. Qui abbiamo "Dipartimento" come Gruppo per valore.
Dallo screenshot sopra, osserveremo quanto segue
- È la query che viene eseguita sulla tabella "employees_guru" con la clausola GROUP BY con Dipartimento come nome della colonna GROUP BY definito.
- L'output mostrato qui è il nome del reparto e il numero di dipendenti nei diversi reparti. Qui tutti i dipendenti che appartengono al reparto specifico sono raggruppati e visualizzati nei risultati. Quindi il risultato è il nome del reparto con il numero totale di dipendenti presenti in ogni reparto.
Query:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ordina per
La clausola Sort by viene eseguita sui nomi delle colonne delle tabelle Hive per ordinare l'output. Possiamo menzionare DESC per ordinare l'ordine in ordine discendente e menzionare ASC per ordinare l'ordine ascendente.
In questo modo ordinerà le file prima di alimentarle al riduttore. Ordina sempre in base ai tipi di colonna.
Ad esempio, se i tipi di colonna sono numerici, verrà ordinato in ordine numerico, se i tipi di colonna sono stringhe, verrà ordinato in ordine lessicografico.
Dallo screenshot qui sopra possiamo osservare quanto segue:
- È la query che viene eseguita sulla tabella "employees_guru" con la clausola SORT BY con "id" come definizione del nome della colonna SORT BY. Abbiamo utilizzato la parola chiave DESC.
- Quindi l'output visualizzato sarà in ordine decrescente di "id".
Query:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By utilizzato come alternativa per entrambe le clausole Distribute BY e Sort BY in Hive-QL.
Cluster Clausola BY utilizzata sulle tabelle presenti in Hive. Hive utilizza le colonne in Cluster da per distribuire le file tra i riduttori. Cluster Le colonne BY andranno ai riduttori multipli.
- Garantisce l'ordinamento dei valori presenti in più riduttori
Per esempio, Cluster Clausola By menzionata nel nome della colonna Id della tabella impiegati_guru. L'output durante l'esecuzione di questa query fornirà risultati a più riduttori nel back-end. Ma come front-end è una clausola alternativa sia per Sort By che per Distribute By.
Questo è in realtà un processo di back-end quando eseguiamo una query con ordina per, raggruppa per e cluster per in termini di framework Map reduce. Quindi se vogliamo memorizzare i risultati in più reducer, andiamo con Cluster By.
Dallo screenshot qui sopra otteniamo le seguenti osservazioni:
- È la query che esegue la clausola CLUSTER BY sul valore del campo Id. Qui otterrà un ordinamento sui valori Id.
- Visualizza l'ID e i nomi presenti nell'ordinamento guru_employees ordinati per
Query:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Distribuisci per
Clausola Distribuisci BY utilizzata sulle tabelle presenti in Hive. Hive utilizza le colonne in Distribuisci per per distribuire le righe tra i riduttori. Tutte le colonne Distribute BY andranno allo stesso riduttore.
- Garantisce che ciascuno dei riduttori N ottenga intervalli di colonne non sovrapposti
- Non ordina l'output di ciascun riduttore
Dallo screenshot sopra, possiamo osservare quanto segue
- DISTRIBUTE BY Clausola eseguita sull'ID della tabella "empoloyees_guru".
- Output che mostra Id, Nome. Nel back-end, andrà allo stesso reducer
Query:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;