2016-09-21 64 views
0

在BigQuery中,可以将新查询的结果写入新表。我希望仅当查询返回至少一行时才创建表。基本上我不想最终创建空表。我找不到这样做的选项。 (我正在使用Python库,但我想这同样适用于原始API)仅当查询不为空时,才从查询写入BigQuery中的表

+0

你不能使用某种默认设置吗?如果EMPTY然后使用默认值? – xCloudx8

+0

@ xCloudx8不确定我们是否在同一页面上。我在说这个:http://stackoverflow.com/a/14634697/825190 –

+1

我也不明白,bigquery中的每个查询都创建了一个表,即使它是匿名的。如果不是空的,必须有第二个操作来重写某个表。据我所知,你无法避免这种情况。 – Pentium10

回答

1

由于您必须在查询定义中指定目标,并且在运行时不知道它会返回什么,所以您可以把LIMIT 1加到最后?

您可以检查job result object中的行号,然后在没有限制器的情况下重新运行查询,如果新表中有结果的话。

+0

对不起,我忘了提这个。当然,你可以按照你的建议分两步进行。我的问题是关于在一次通话中做到这一点。 –

+0

我从来没有在BigQuery中呆过那么久,但似乎并不像你所要求的那样。查询运行并将结果放入表中或存储器/应用程序中,并且在查询运行之前必须定义该结果。 – Bmo

1

没有办法一步到位。我建议运行查询,检查结果,然后使用WRITE_TRUNCATE执行表副本,以便将结果提交到最终位置(如果中间输出至少包含一行)。