在Hive中加入多个表

时间:2017-08-17 17:58:24

标签: hadoop hive

以下是数据集

Table1
col1,col2
key1,k1
key2,k2
key3,k3


Table2
col1,col3
key1,k11
key2,k22
key4,k44


Table3
col1,col4
key1,k111
key2,k222
key5,k555

我需要根据col1加入3个表。以下是我的查询

从中选择a.col1,a.col2,b.col3,c.col4 table1一个完整的外连接表2 b full outer join table3 c;

预期输出如下所示

预期产出:

col1,col2,col3,col4
key1,k1,k11,k111
key2,k2,k22,k222
key3,k3,   ,
key4,  ,k44,
key5,  ,   ,k555

2 个答案:

答案 0 :(得分:3)

  1. 根据您想要的结果,您需要加入所有表格 COL1。
  2. 要确保您始终拥有col1中的值,您需要 coalesce他们在一起(合并给你第一个非空 值)。
  3. 要将其他列拼接在一起(并使用空格替换空值,请将合并与concat结合使用:
  4. 把所有这些放在一起:

    select
    coalesce(t1.col1,t2.col1,t3.col1) as col1,
    concat(coalesce(t1.col2,' '),',',coalesce(t2.col2,' '),',',coalesce(t3.col2,' '))
    from
    table1 t1
    full join table2 t2
      on t1.col1 = t2.col1
    full join table3 t3
      on t1.col1 = t3.col1
    

答案 1 :(得分:1)

由于您正在进行完全外部联接,因此最好为列COALESCE执行col1

类似的东西:

select 
    COALESCE(a.col1, b.col1, c.col1) as col1,
    a.col2,
    b.col3,
    c.col4
from 
    table1 a 
    full outer join table2 b 
      on t1.col1 = t2.col1
    full outer join table3 c
      on t1.col1 = t3.col1;

我们还需要连接条件以避免结果集中的笛卡尔积。