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;
我们还需要有连接条件,以避免结果集中的笛卡尔积
coalesce
将它们合并在一起(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
coalesce
将它们合并在一起(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在第一列后未获取逗号值