查询是:
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
,则查询会成功;但我希望使用嵌套记录运行 future 的查询。上述查询中的表都没有重复或记录字段。
最佳答案
看起来这可能是 GBQ 错误
尝试以下解决方法
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.table2
和 dataflow_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
关于google-bigquery - 如果带有联接的查询未展平,BigQuery 会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849999/