2016-02-25 31 views
5

Sto cercando di unire 2 set di dati, ad esempio A e B. Il set di dati A ha una variabile "Flag" che accetta 2 valori. Invece di fondere insieme entrambi i dati, stavo cercando di unire 2 set di dati basati sulla variabile "flag".Looping con Hiveql

Il codice fusione è la seguente:

create table new_data as 
select a.*,b.y 
from A as a left join B as b 
on a.x=b.x 

Dal momento che sto correndo codice Hive tramite CLI, sto chiamando questo attraverso il seguente comando

hive -f new_data.hql 

La parte loop del codice Sto chiamando per unire i dati in base alla variabile "Flag" è la seguente:

for flag in 1 2; 
do 
    hive -hivevar flag=$flag -f new_data.hql 
done 

Ho inserito il codice sopra in un altro file ".hql" asn chiamandolo:

hive -f loop_data.hql 

Ma è un errore di lancio.

non può riconoscere in ingresso nei pressi di 'per' 'bandiera' 'in'

Qualcuno può dirmi dove sto facendo errore.

Grazie!

+1

Il codice di ciclo non è una query/script hive.Hive -f può eseguire solo query hive. Usa il loop in uno script di shell. –

+0

@KSNidhin: Grazie mille per il commento. Sto eseguendo il codice hive attraverso lo stucco. Potresti spiegare cosa intendi per script di shell? Sono tecnologicamente un po 'alle prime armi. – Beta

+0

la variabile flag ha 2 valori 1 e 2 giusto? Quali sono i criteri di filtro nella query hive? –

risposta

6
  1. Si dovrebbe aggiungere la logica del ciclo allo script della shell. Nome

File: loop_data.sh

for flag in 1 2; 
do 
    hive -hivevar flag=$flag -f new_data.hql 
done 

ed eseguire lo script come:

sh loop_data.sh 
  1. Nello script new_data.hql, stai creando una tabella. Dal momento che dovresti dividere il DL DDL & in 2 script separati. Come

DDL: create_new_data.hql

create table new_data as 
select 
    a.*, 
    b.y 
from 
    A as a left join 
    B as b on 
    a.x = b.x 
where 
    1 = 0; 

DML: insert_new_data.hql

insert into new_data 
select 
    a.*, 
    b.y 
from 
    A as a left join 
    B as b on 
    a.x = b.x 
where 
    flag = ${hiveconf:flag} 

e aggiornare di sborsare script come: Nome

File: loop_new_data.sh

# Create table 
hive -f create_new_data.hql 

# Insert data 
for flag in 1 2; 
do 
    hive -hiveconf flag=$flag -f insert_new_data.hql 
done 

ed eseguirlo come:

sh loop_new_data.sh 

fatemi sapere se volete maggiori informazioni.

+0

Grazie Ambish per la tua risposta! – Beta

+0

come posso usarlo dalla shell hive –

+0

@sahildesai per favore, elabora la tua domanda. – Ambrish