Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在配置单元中连接多个表_Hadoop_Hive - Fatal编程技术网

Hadoop 在配置单元中连接多个表

Hadoop 在配置单元中连接多个表,hadoop,hive,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 表1 a完全外部连接表2 b 全外连接表3 c 预期输出如下所示 预期产出: col1,col2,co

下面是数据集

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 表1 a完全外部连接表2 b 全外连接表3 c

预期输出如下所示

预期产出:

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

由于您正在进行完全外部联接,因此最好对列
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;

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

因为您正在进行完全外部联接,所以最好对列
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;
我们还需要有连接条件,以避免结果集中的笛卡尔积

  • 根据所需的结果,您需要在上联接所有表 可乐一号
  • 要确保col1中始终有一个值,需要
    coalesce
    将它们合并在一起(coalesce提供第一个非空值 价值)
  • 要将其他列缝合在一起(并用空空格替换null,请将coalesce与
    concat
    结合使用):
  • 综上所述:

    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
    
  • 根据所需的结果,您需要在上联接所有表 可乐一号
  • 要确保col1中始终有一个值,需要
    coalesce
    将它们合并在一起(coalesce提供第一个非空值 价值)
  • 要将其他列缝合在一起(并用空空格替换null,请将coalesce与
    concat
    结合使用):
  • 综上所述:

    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
    

    上面的查询返回了27行..其中输出预期为5行.这很好.当我有table1.col1=table2.col1和table2.col7=table3.col1时,我该怎么做.上面的查询返回了27行..其中输出预期为5行.这很好.当我有table1.col1=table2.col1和table2.col7=table3.col1时,我该怎么做.你想这样做吗是交叉连接吗?可能您的意思是
    table1.col1=table2.col1和table1.col1=table3.col1
    ?您希望它是交叉连接吗?可能您的意思是
    table1.col1=table2.col1和table1.col1=table3.col1
    ?key1,k11,k2,k22,k3,key4,k44,key5,k555在第一列key1,k11之后没有逗号值,k111 key2 k2、k22、k222 key3 k3、key4、k44、key5、k555在第一列后未获取逗号值