奇怪的加入会导致GBQ

时间:2015-07-20 16:37:53

标签: google-bigquery

我在GBQ中遇到了我不理解的查询结果,也无法解释。

我正在尝试连接具有完全相同架构结构的两个表,并且可能有重复项。

我希望将两个表连接起来,取得table1中的所有行以及table2中基于唯一id在table1中不存在的任何其他行。这是一种非常常见的连接方案。

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

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

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

从dataset2.homework t1中选择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正在做什么。因为我的表大小超过了最低8Mb压缩限制,所以需要EACH子句。

选择 T1 *。 FROM dataset1.homework AS t1 LEFT JOIN EACH dataset2.homework AS t2 ON t1.homeworkresult_id = t2.homeworkresult_id 在哪里t1.book_id = 12345 AND t1.homework_id = 10337096 AND t1.homeworkresult_id = 12353139 AND t1.question_id = 2;

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

谢谢,J.D。

1 个答案:

答案 0 :(得分:2)

所以我放弃了JOIN并从另一个角度攻击了这个问题。我使用了Google BigQuery的一个记录较少的功能,它允许您从多个查询中实际结合结果。如果要查询的表中的模式结构相同,则此方法很有效。

基本语法是,

SELECT * from(query 1),(query 2),...,(query N)

在我的例子中,查询1选择了第一个表中行数最多的所有行,查询2选择了第二个表中不在第一个表中的所有行。

J.D。