2017-08-27 1 views
-2

Je suis relativement nouveau à Hive. Explorer les moyens de fusionner deux tables qui ne sont pas connectées entre elles par des clés. Donc, je n'ai pas utilisé la condition 'ON' dans la requête.HIVE JOIN deux tables avec un nombre différent de lignes donnant des valeurs de colonne incorrectes

Ce qui suit est table_1:

COL1 
hello 

Le dessous est TABLE_2:

COL2 
world 
excellent 

Résultat prévu:

hello world 
NULL excellent 

résultat réel:

hello world 
hello excellent 

Ma Recherche:

select col_one, 
    col_two 
from (
    select COL1 as col_one 
    from table_1 
    ) as c1 
join (
    select COL2 as col_two 
    from table_2 
    ) as c2; 

Je ne suis pas sûr de la façon dont le « bonjour » dans le résultat vient quand il n'y a pas de ligne-2 dans table_1

+0

Parce que vous faites croix joindre - '1 x 2 = 2 rows'. Quels sont vos critères d'adhésion ou, comme vous l'avez dit, de «fusion»? En regardant vos données, il n'y en a pas. – GurV

+0

Salut @GurwinderSingh: Ces tables ne sont pas liées par des clés. Donc, dans mon cas, je ne donne aucune condition. –

+0

Vous ne pouvez pas participer de cette manière. Avez-vous une commande en tête? peut-être dans l'ordre croissant des deux colonnes, puis rejoint le numéro de ligne? – GurV

Répondre

0

Je ne sais pas comment fonctionne votre requête sans clause on. Mais, vous pouvez faire ce que vous voulez à l'aide row_number(), quelque chose comme ceci:

select c1.col_one, c2.col_two 
from (select COL1 as col_one, row_number() over (order by col1) as seqnum 
     from table_1 
    ) c1 join 
    (select COL2 as col_two, row_number() over (order by col2) as seqnum 
     from table_2 
    ) c2 
    on c1.seqnum = c2.seqnum; 
+0

Merci pour votre suggestion @Gordon, j'ai décidé d'écrire mon propre code mapreduce car je devais en faire beaucoup plus en dehors des tables. –