2014-09-14 2 views
1

J'ai deux tables A et B qui ont la structure suivante.Comment joindre deux tables dans HIVE.

// Table A 

Name Age actualdate no 

// Table B 

City sdate edate   id 

Je souhaite obtenir tous les champs de A et B à l'aide REJOIGNEZ où id = non et sdate < = actualdate et MOIS.DECALER> = actualdate.

J'ai essayé comme ci-dessous en utilisant la clause where, mais il ne fonctionne pas.

select v3.*, t3.* from A v3 
JOIN 
B t3 
where v3.id = t3.no and 
     v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

L'utilisation Article:

select v3.*, t3.* from A v3 
    JOIN 
    B t3 
    ON (v3.id = t3.no and 
      v3.sdate <= t3.actualdate and 
      v3.edate >= t3.actualdate) 
    limit 1; 

Malheureusement, Hive ne supporte pas équijointure. Existe-t-il un moyen d'obtenir les jointures ci-dessus?

+0

ce qui est l'erreur que vous obtenez lorsque vous essayez de faire la jonction? –

+0

Lorsque j'utilise la clause « ON », je reçois erreur: Failed: Erreur dans l'analyse sémantique: alias ligne droite et à gauche Rencontrés dans JOIN actualdate. et quand j'utilise la clause "WHERE", ce n'est pas une erreur de lancer mais je n'obtiens aucun résultat. Mais je si je retire la partie « et v3.sdate <= t3.actualdate et v3.edate> = t3.actualdate » de « ON » clause, il fonctionne très bien, mais sans vérification de condtion. – Ronak

Répondre

6

Au lieu d'utiliser la < = et> = conditions à l'intérieur de la clause ON, vous pouvez utiliser Où faire le filtrage.

select v3.*, t3.* from A t3 
JOIN 
B v3 
ON (v3.id = t3.no) 
WHERE v3.sdate <= t3.actualdate and 
     v3.edate >= t3.actualdate 
limit 1; 

Remarque: vos alias t3 et v3 ont été échangés.