Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Hive 内部联接在配置单元中不提供结果_Hive_Hiveql_Hadoop2 - Fatal编程技术网

Hive 内部联接在配置单元中不提供结果

Hive 内部联接在配置单元中不提供结果,hive,hiveql,hadoop2,Hive,Hiveql,Hadoop2,我正在尝试加入4个talbles。一个是主表,并将其他3个表与此主表连接。请参见如下数据: 预期产出 这是我开发的查询,它总是返回0行 select COALESCE(TableB.Date, TableC.Date, TableD.Date), COALESCE(count(key1),0), COALESCE(count(key2),0), COALESCE(count(key3),0) FROM TableA A JOIN TableB

我正在尝试加入4个talbles。一个是主表,并将其他3个表与此主表连接。请参见如下数据:

预期产出

这是我开发的查询,它总是返回0行

select COALESCE(TableB.Date, TableC.Date, TableD.Date), 
       COALESCE(count(key1),0), 
       COALESCE(count(key2),0), 
       COALESCE(count(key3),0)
FROM TableA A JOIN TableB B on A.Date = B.Date 
JOIN TableC C on A.Date = C.Date
JOIN TableD D on A.Date = D.Date
Group by COALESCE(TableB.Date, TableC.Date, TableD.Date);
当我使用TableA对每个表运行单独的查询(请参见下面的查询)时,它会返回数据,但当我连接所有3个表时,它不会重新调整任何数据

select TableB.Date, count(key1)
  FROM TableA A JOIN TableB B on A.Date = B.Date 
Group by TableB.Date;
我不确定哪里出了问题,有人能帮助我理解join查询中的问题在哪里

谢谢, 巴布你可以试试这个-

select A.Date, 
       COALESCE(count(key1),0), 
       COALESCE(count(key2),0), 
       COALESCE(count(key3),0)
FROM TableA A 
LEFT JOIN TableB B on A.Date = B.Date 
LEFT JOIN TableC C on A.Date = C.Date
LEFT JOIN TableD D on A.Date = D.Date
Group by A.Date;

我使用左连接而不是内部连接,因为我们需要表A中的所有数据。第一列也应该来自表A,即驱动程序表。

在子查询中进行连接,然后进行分组,例如

with join_table as (select COALESCE(TableB.Date, TableC.Date, TableD.Date) as Date, 
    key1, key2, key3
    FROM TableA A JOIN TableB B on A.Date = B.Date 
    JOIN TableC C on A.Date = C.Date
    JOIN TableD D on A.Date = D.Date
)
select Date,
       COALESCE(count(key1),0), 
       COALESCE(count(key2),0), 
       COALESCE(count(key3),0)
  from join_table
 group by Date

实际上,您不需要在内部联接中合并联接键。

我认为您正在寻找完整的外部联接。 下面是示例代码

select COALESCE(a.Date, b.Date, c.Date,d.Date), 
       COALESCE(sum(key1),0), 
       COALESCE(sum(key2),0), 
       COALESCE(sum(key3),0)

(select distinct date as date from tableA ) as a
full outer join 
(select  date ,sum(key1) as key1 from tableB group by date) as b
on a.date=b.date
full outer join
(select  date ,sum(key2) as key2 from tableB group by date) as c
on a.date=c.date
full outer join
(select  date ,sum(key3) as key2 from tableB group by date) as d
on a.date=d.date
Group by COALESCE(a.Date, b.Date, c.Date,d.Date);`

谢谢你的回复。我试着建议改变,但没有成功。此外,如果改变您建议的方式,来自C表的日期可能不在D表中。假设日期在表A中,但如果它不在任何其他表中,我们不需要来自表A的日期。您提到“这是主表,并将其他3个表与此主表连接”。因此我假设表A是主表。如果您说不希望表A中的日期不在任何其他表中,那么您需要在我的SQL
中添加where条件,其中COALESCE(TableB.date、TableC.date、TableD.date)不为NULL
。在这种情况下,我们不能使用Left-Join-right。我的查询与您提供的完全相同,只是使用了内部联接。使用内部连接时,我不会得到任何结果,如果我使用完全外部连接,我会得到奇怪的结果。内部连接将生成
所有
表中存在的记录。完全外部联接将导致所有数据
存在/不存在
。这完全取决于你的要求。你需要什么?1.所有表中的所有数据?(全速前进)2。所有数据都来自某些表?(向左转)3。所有表中的所有匹配数据+所有表中的所有不匹配数据?无论哪种情况,它都不起作用。我需要所有表中的所有日期,如果它出现在主表中。我认为这意味着它是所有表与主表的内部连接。我试过了,但没有任何效果(询问内容与您的建议和我在解释中给出的内容相同。不确定为什么不起作用。感谢您抽出时间回答我的问题。非常感谢。感谢您的回复,我会尝试一下,让您知道。感谢您的回复,我会尝试一下,让您知道。