2015-07-20 77 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.