2014-09-13 10 views
10

Non riesco a superare il controllo di uguaglianza utilizzando la query HIVE riportata di seguito.Errore nella query hive durante l'unione alle tabelle

Ho 3 tavolo e voglio unirmi a questo tavolo. Ho provare come sotto, ma ottenere errore:

FALLITA: Errore in analisi semantica: Linea 3:40 alias Sia a destra ea sinistra incontrate nel ENTRA 'visit_date'

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 ON 
    (v3.AS_upc= t3.upc_no AND v3.start_dt <= t3.visit_date AND v3.end_dt >= t3.visit_date AND v3.adv_price <= t3.comp_price)) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

a cura basata su aiuto da FuzzyTree:

1a:

Abbiamo provato a modificare la query sopra utilizzando tra e la clausola where, ma non ottenendo alcun output dalla query.

Ma se abbiamo modificato la query precedente rimuovendo la clausola between con date, ho ottenuto un output basato su "v3.adv_price < = t3.comp_price", ma non utilizzando "date filter".

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
     where v3.adv_price <= t3.comp_price 
    ) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

2 °:

Poi si cerca di far passare una sola data:

select t1.*, t99.* from table1 t1 JOIN 
     (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
      where v3.adv_price <= t3.comp_price and v3.start_dt <= t3.visit_date 
     ) t99 ON 
     (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 

Così, ora sta mostrando qualche risultato, ma se passiamo sia il filtro di inizio e fine oggi, ; non mostrando alcun risultato.

risposta

28

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

Solo uguaglianza join join esterni, e semi sinistra join sono supportati in alveare. Hive non supporta condizioni di join non corrispondenti alle condizioni di uguaglianza in quanto è molto difficile esprimere tali condizioni come un lavoro di mappa/riduzione .

prova a spostare il disuguaglianze al where clausola di

select t1.*, t99.* from table1 t1 JOIN 
    (select v3.*, t3.* from table2 v3 JOIN table3 t3 on (v3.AS_upc= t3.upc_no) 
     where t3.visit_date between v3.start_dt and v3.end_dt 
     and v3.adv_price <= t3.comp_price 
    ) t99 ON 
    (t1.comp_store_id = t99.cpnumber AND t1.AS_store_nbr = t99.store_no); 
+1

ho curato la query basata sul vostro aiuto, ma ancora in grado di ottenere l'output dalla query. Ho aggiornato il mio post originale. – Abhi

+0

Ho riscontrato lo stesso problema. La soluzione suggerita è buona. Prendo atto tuttavia che il messaggio di errore potrebbe essere migliorato. È fuorviante. – paolov

Problemi correlati