Tutorial su join Hive e sottoquery con esempi

Unisciti alle query

Le query di join possono essere eseguite su due tabelle presenti in Hive. Per comprendere Partecipa Concepts in chiaro qui stiamo creando due tabelle qui,

  • Sample_joins (relativo ai dettagli dei clienti)
  • Sample_joins1 (relativo ai dettagli degli ordini effettuati dai dipendenti)

Passo 1) Creazione della tabella “sample_joins” con i nomi delle colonne ID, nome, età, indirizzo e stipendio dei dipendenti

Partecipa alle query

Passo 2) Caricamento e visualizzazione dei dati

Partecipa alle query

Dalla schermata sopra

  1. Caricamento dei dati in sample_joins da Customers.txt
  2. Visualizzazione del contenuto della tabella sample_joins

Passo 3) Creazione della tabella sample_joins1 e caricamento, visualizzazione dei dati

Partecipa alle query

Dallo screenshot sopra, possiamo osservare quanto segue

  1. Creazione della tabella sample_joins1 con le colonne Orderid, Date1, Id, Amount
  2. Caricamento dei dati in sample_joins1 da Orders.txt
  3. Visualizzazione dei record presenti in sample_joins1

Più avanti vedremo i diversi tipi di join che possono essere eseguiti sulle tabelle che abbiamo creato, ma prima di procedere è necessario considerare i seguenti punti per i join.

Alcuni punti da osservare nei join:

  • Nei join sono consentiti solo i join di uguaglianza
  • È possibile unire più di due tabelle nella stessa query
  • Esistono join LEFT, RIGHT, FULL OUTER per fornire un maggiore controllo sulla clausola ON per la quale non esiste corrispondenza
  • I join non sono commutativi
  • I join sono associativi a sinistra indipendentemente dal fatto che siano LEFT o RIGHT

Diversi tipi di join

I join sono di 4 tipi, questi sono

  • Unione interna
  • Join esterno sinistro
  • Giunto esterno destro
  • Join esterno completo

Unione interna:

I record comuni ad entrambe le tabelle verranno recuperati da questo Inner Join.

unione interna

Dallo screenshot sopra, possiamo osservare quanto segue

  1. Qui stiamo eseguendo una query di join utilizzando la parola chiave JOIN tra le tabelle sample_joins e sample_joins1 con la condizione corrispondente come (c.Id= o.Id).
  2. L'output visualizza i record comuni presenti in entrambe le tabelle controllando la condizione menzionata nella query

Query:

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

Join esterno sinistro:

  • Linguaggio di query Hive LEFT OUTER JOIN restituisce tutte le righe della tabella di sinistra anche se non ci sono corrispondenze nella tabella di destra
  • Se la clausola ON corrisponde a zero record nella tabella di destra, i join restituiscono comunque un record nel risultato con NULL in ogni colonna della tabella di destra

Join esterno sinistro

Dallo screenshot sopra, possiamo osservare quanto segue

  1. Qui stiamo eseguendo una query di join utilizzando la parola chiave "LEFT OUTER JOIN" tra le tabelle sample_joins e sample_joins1 con la condizione corrispondente come (c.Id= o.Id).Per esempio qui utilizziamo l'ID dipendente come riferimento, controlla se l'ID è comune sia a destra che a sinistra della tabella oppure no. Agisce come condizione di corrispondenza.
  2. L'output che mostra i record comuni presenti in entrambe le tabelle controllando la condizione menzionata nella query. I valori NULL nell'output precedente sono colonne senza valori dalla tabella destra che è sample_joins1

Query:

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Join esterno destro:

  • Il linguaggio di query Hive RIGHT OUTER JOIN restituisce tutte le righe dalla tabella di destra anche se non ci sono corrispondenze nella tabella di sinistra
  • Se la clausola ON corrisponde a zero record nella tabella di sinistra, i join restituiscono comunque un record nel risultato con NULL in ogni colonna della tabella di sinistra
  • I join RIGHT restituiscono sempre i record della tabella destra e i record corrispondenti della tabella sinistra. Se la tabella di sinistra non ha valori corrispondenti alla colonna, restituirà valori NULL in quella posizione.

Giunto esterno destro

Dallo screenshot sopra, possiamo osservare quanto segue

  1. Qui stiamo eseguendo una query di join utilizzando la parola chiave "RIGHT OUTER JOIN" tra le tabelle sample_joins e sample_joins1 con la condizione corrispondente come (c.Id= o.Id).
  2. L'output visualizza i record comuni presenti in entrambe le tabelle controllando la condizione menzionata nella query

domanda:

  SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Unione esterna completa:

Combina i record di entrambe le tabelle sample_joins e sample_joins1 in base alla condizione JOIN fornita nella query.

Restituisce tutti i record di entrambe le tabelle e inserisce i valori NULL per le colonne con valori mancanti corrispondenti su entrambi i lati.

Unione esterna completa

Dallo screenshot qui sopra possiamo osservare quanto segue:

  1. Qui stiamo eseguendo una query di join utilizzando la parola chiave "FULL OUTER JOIN" tra le tabelle sample_joins e sample_joins1 con la condizione corrispondente come (c.Id= o.Id).
  2. L'output visualizza tutti i record presenti in entrambe le tabelle controllando la condizione menzionata nella query. I valori null nell'output qui indicano i valori mancanti dalle colonne di entrambe le tabelle.

domanda

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Sottoquery

Una query presente all'interno di una query è nota come sottoquery. La query principale dipenderà dai valori restituiti dalle sottoquery.

Le sottoquery possono essere classificate in due tipi

  • Sottoquery nella clausola FROM
  • Sottoquery nella clausola WHERE

Quando usare:

  • Per ottenere un valore particolare combinato da due valori di colonna di tabelle diverse
  • Dipendenza dei valori di una tabella da altre tabelle
  • Controllo comparativo dei valori di una colonna da altre tabelle

Sintassi:

Subquery in FROM clause
SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main >
Subquery in WHERE clause
SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);

Esempio:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

Qui t1 e t2 sono nomi di tabelle. Quello colorato è la subquery eseguita sulla tabella t1. Qui a e b sono colonne aggiunte in una sottoquery e assegnate a col1. Col1 è il valore della colonna presente nella tabella principale. Questa colonna "col1" presente nella sottoquery è equivalente alla query della tabella principale nella colonna col1.

Incorporamento di script personalizzati

Alveare fornisce la possibilità di scrivere script specifici dell'utente per i requisiti del cliente. Gli utenti possono scrivere la propria mappa e ridurre gli script per i requisiti. Questi sono chiamati script personalizzati incorporati. La logica di codifica è definita negli script personalizzati e possiamo utilizzare tale script nel tempo ETL.

Quando scegliere gli script incorporati:

  • In base ai requisiti specifici del cliente, gli sviluppatori devono scrivere e distribuire script in Hive
  • Dove le funzioni integrate di Hive non funzioneranno per requisiti di dominio specifici

Per questo in Hive utilizza la clausola TRANSFORM per incorporare sia gli script della mappa che quelli del riduttore.

In questi script personalizzati incorporati, dobbiamo osservare i seguenti punti

  • Le colonne verranno trasformate in stringhe e delimitate da TAB prima di consegnarle allo script utente
  • L'output standard dello script utente verrà trattato come colonne di stringhe separate da TAB

Script incorporato di esempio,

FROM (
	FROM pv_users
	MAP pv_users.userid, pv_users.date
	USING 'map_script'
	AS dt, uid
	CLUSTER BY dt) map_output

INSERT OVERWRITE TABLE pv_users_reduced
	REDUCE map_output.dt, map_output.uid
	USING 'reduce_script'
	AS date, count;

Dallo script soprastante, possiamo osservare quanto segue

Questo è solo lo script di esempio per comprendere

  • pv_users è la tabella degli utenti che contiene campi come userid e data come menzionato in map_script
  • Script riduttore definito in data e conteggio delle tabelle pv_users

Newsletter quotidiana di Guru99

Inizia la giornata con le ultime e più importanti notizie sull'intelligenza artificiale, pubblicate in questo momento.