Google bigquery 如何在Bigquery查询中使表成为可选的

Google bigquery 如何在Bigquery查询中使表成为可选的,google-bigquery,Google Bigquery,我有一组类似于“”的分片数据,但有些天没有数据,因此没有时间。理想的解决方案是使所有表(日期)都是可选的。可能吗 详细说明:如果您从中进行选择,然后执行序列[main.2013-08-01],[main.2013-08-02]。。。每个表都必须存在。如果这些表中的任何一个不存在,bigquery在尝试执行查询时会以500错误响应。通过使用术语“optional”,我希望使用一种语法,允许任何特定的表不存在,但查询仍然针对其他表执行。我希望看到的一个例子是:可能查询显示SELECT*from?[m

我有一组类似于“”的分片数据,但有些天没有数据,因此没有时间。理想的解决方案是使所有表(日期)都是可选的。可能吗

详细说明:如果您从中进行选择,然后执行序列[main.2013-08-01],[main.2013-08-02]。。。每个表都必须存在。如果这些表中的任何一个不存在,bigquery在尝试执行查询时会以500错误响应。通过使用术语“optional”,我希望使用一种语法,允许任何特定的表不存在,但查询仍然针对其他表执行。我希望看到的一个例子是:可能查询显示SELECT*from?[main.2013-08-01],[main.2013-08-02]。。。但[main.2013-08-02]不存在。然而,由于它在表之前有“?”指示符,因此它被视为可选的,并且查询仍然成功执行,并且我只从[main.2013-08-01]和任何其他实际存在的表中获得结果


我目前正在解决这个问题,首先请求一个数据集的表列表,然后比较我实际想要查询的碎片是否存在,然后合并表(例如,我想要8月份的所有日子,bigquery告诉我7/27不存在,所以我的FROM块将包含除7/27之外的所有数据碎片的列表),但是这种方法很复杂,涉及两个bigquery往返,所以它似乎并不理想。

作为一种解决方法,您是否尝试过使用空表

假设main.2013-08-01存在,而main.2013-08-02不存在。你可以:

SELECT * FROM [main.2013-08-01] WHERE any_column = 'non existing value'

该查询将返回0个结果,您可以选择main.2013-08-02作为目标表。这将创建一个空表,其列与main.2013-08-01相同。然后你就可以加入而不必关心空虚

我不确定我是否理解你将表格设置为可选的意思。我用更多的细节编辑了这个问题,希望能澄清它!谢谢Fh,我想这是一个解决办法,但前提是我事先知道哪些表丢失了。为了找到丢失的表,我必须对所有可能的月份执行类似于现有数据集表列表查询的操作,然后在上面添加一个附加步骤,以执行您建议的查询,然后执行我实际用于处理数据的最终查询。因此,在这种特殊情况下,这种方法实际上比我目前使用的解决方法要慢。