2016-01-18 28 views
2

查詢查詢是:的BigQuery引發異常,如果有連接並不平坦的

select 
    cb.subnum as subnum, 
    last(
     if(
      (if(cu.smartcard_number is not null, 1, 0)) + 
      (if(rr.smart_card_number is not null, 1, 0)) > 0, 1, 0) 
    ) as econnected_i, 

from 
    combined.table1 as cb 

left outer join each dataflow_raw_eu.table2 as cu 
on cu.smartcard_number = cb.smart_card_num 

left outer join each dataflow_raw_eu.table3 as rr 
on rr.smart_card_number = cb.smart_card_num 

group by subnum 

的錯誤是:

Error: Ambiguous field name 'imported_at' in JOIN. Please use the table qualifier before field name.

我注意到,當它只有一個運行加入兩個表中,然後查詢成功。 imported_at是由所有3個表共享的時間戳字段(唯一由所有3個表共享的字段),但它不包含在查詢中。

如果我在BigQuery選項中選擇flatten_results,則查詢成功;但我希望使用嵌套記錄運行未來的查詢。上述查詢中的表格都沒有重複或記錄字段。

+0

你能發佈工作ID – Pentium10

+0

@ Pentium10'multichoice-見解:job_PQxAroX-vhDr4vjCl0HCehxVqD8' – Tjorriemorrie

回答

2

看起來這可能是吉貝錯誤

下面嘗試使用的解決方法

SELECT 
    cb.subnum AS subnum, 
    LAST(
     IF(
      (IF(cu.smartcard_number IS NOT NULL, 1, 0)) + 
      (IF(rr.smart_card_number IS NOT NULL, 1, 0)) > 0, 1, 0) 
    ) AS econnected_i, 

FROM 
    combined.table1 AS cb 

LEFT OUTER JOIN EACH (SELECT smartcard_number FROM dataflow_raw_eu.table2) AS cu 
ON cu.smartcard_number = cb.smart_card_num 

LEFT OUTER JOIN EACH (SELECT smart_card_number FROM dataflow_raw_eu.table3) AS rr 
ON rr.smart_card_number = cb.smart_card_num 

GROUP BY subnum 

請注意,依賴於邏輯和數據的性質dataflow_raw_eu.table2dataflow_raw_eu.table3,你可能會在子選擇可以考慮使用GROUP BY,像下面

SELECT smartcard_number FROM dataflow_raw_eu.table2 GROUP BY smartcard_number 

SELECT smart_card_number FROM dataflow_raw_eu.table3 GROUP BY smart_card_number 
+0

我在https://code.google.com/p/google-bigquery/issues/已將此添加到BigQuery的問題跟蹤器細節?ID = 415。 – Adam

相關問題