2015-07-20 43 views
1

我遇到GBQ中的查询结果,我不明白也无法解释。在GBQ中奇怪的加入结果

我想连接两个具有完全相同的架构结构,可能有重复的表。

我的愿望是将表1中所有行和table2中所有不存在于table1中的附加行基于唯一标识符进行连接。这是一个非常常见的连接场景。

因此,为了测试我的连接,我缩小了我的where子句,使其指向单行。我验证了每个表中存在该行,并且列数据每个都是相同的。

这里是我用来测试,它返回单行一个示例查询,

选择T1。*从dataset1.homework T1 WHERE t1.book_id = 12345 AND t1.homework_id = 10337096 AND t1.homeworkresult_id = 12353139 AND t1.question_id = 2;

select t1。* from dataset2.homework t1 WHERE t1.book_id = 12345 AND t1.homework_id = 10337096 AND t1.homeworkresult_id = 12353139 AND t1.question_id = 2;

我验证每个返回单行像我所期望的。现在,如果我加入两个表(在我的情况下,table1将有最多的行)。

这是我的加入声明,返回30个ROWS,所有重复项。我不知道额外的行来自哪里,或者什么bigquery正在做什么。 EACH条款是必需的,因为我的表格大小超过了最小8Mb压缩限制。

SELECT T1。* FROM AS dataset1.homework T1 LEFT JOIN EACH dataset2.homework为T2 ON t1.homeworkresult_id = t2.homeworkresult_id WHERE t1.book_id = 12345 AND t1.homework_id = 10337096和T1。 homeworkresult_id = 12353139 AND t1.question_id = 2;

我真的很感激,如果有人能够揭示这里发生了什么。

感谢,J.D.

+0

您是否有任何重复字段?请注意接口会自动平整数据。 – Pentium10

+0

如果Pentium10的答案没有帮助,我很乐意进一步调查。您可以将作业ID发送到[email protected]。 –

+0

感谢您的回复。没有重复的字段。 (query1),(query2),...,(queryN)中使用“UNION”,如GBQ语法SELECT * –

回答

2

所以我放弃了对JOIN和从不同角度袭击了问题。我使用了Google BigQuery的一个较少记录的功能,它允许您将来自多个查询的结果基本联合起来。如果所查询表中的模式结构是相同的,那么这很有效。

的基本语法,

SELECT * FROM(查询1),(2查询),...,(查询N)

在我的情况,查询1中选择从所述第一所有行具有最多行的表,查询2选择第二个表中不在第一个表中的所有行。

J.D.