首页 > 解决方案 > Google Bigquery:如果其中一个为空,则两个外部表的联接将失败

问题描述

我在 BiqQuery 中有 2 个外部表,它们是在 Google Cloud Storage 上的 JSON 文件之上创建的。第一个是事实表,第二个是错误数据——它可能为空,也可能不为空。

但是,如果错误表为空,我的查询将失败并出现以下错误:

查询指定了一个或多个联合数据源,但并未扫描所有这些数据源。它通常表示不正确的 uri 规范或对联合数据源联合的“限制”子句,无需读取所有源即可满足。

文档中的任何地方都没有涵盖这种情况,并且与此版本控制问题无关 -在 Dataflow 中将 BigQuery 联合表作为源读取会引发错误

我宁愿避免将这些表中的任何一个转换为本机,因为它们仅在 ETL 过程的一个步骤中使用,并且这些数据随后会被删除。其中一个是空的看起来并不像特殊情况,因为普通选择工作得很好。

是否有一些解决方法?

UPD:向 Google 提出问题,等待回复 - https://issuetracker.google.com/issues/145230326

标签: google-cloud-platformgoogle-bigquery

解决方案


感觉是个bug。一种解决方法是使用脚本来避免查询空表:

DECLARE is_external_table_empty BOOL DEFAULT
(SELECT 0 = (SELECT COUNT(*) FROM your_external_table));
-- do things differently when is_external_table_empty is true
IF is_external_table_empty = true 
THEN ...
ELSE ...
END IF

推荐阅读