Google bigquery 如何从Big query cli运行保存的查询并将结果导出到CSV?

Google bigquery 如何从Big query cli运行保存的查询并将结果导出到CSV?,google-bigquery,Google Bigquery,我在大查询中保存了一个查询,但它太大,无法导出为CSV。我没有导出到新表的权限,因此是否有方法从bq cli运行查询并从那里导出 从CLI中,您无法直接访问保存的查询,因为到目前为止,这是一项仅限用户界面的功能,但如前所述,有一个功能请求 如果只想运行一次以获得结果,可以从UI复制查询,并在使用bq时粘贴它 使用这些文档,您可以在公共数据集上尝试以下操作: QUERY="SELECT word, SUM(word_count) as count FROM publicdata:samples.s

我在大查询中保存了一个查询,但它太大,无法导出为CSV。我没有导出到新表的权限,因此是否有方法从bq cli运行查询并从那里导出

从CLI中,您无法直接访问保存的查询,因为到目前为止,这是一项仅限用户界面的功能,但如前所述,有一个功能请求

如果只想运行一次以获得结果,可以从UI复制查询,并在使用bq时粘贴它

使用这些文档,您可以在公共数据集上尝试以下操作:

QUERY="SELECT word, SUM(word_count) as count FROM publicdata:samples.shakespeare WHERE word CONTAINS 'raisin' GROUP BY word"
bq query $QUERY > results.csv
cat results.csv的输出应为:

+---------------+-------+
|     word      | count |
+---------------+-------+
| dispraisingly |     1 |
| praising      |     8 |
| Praising      |     4 |
| raising       |     5 |
| dispraising   |     2 |
| raisins       |     1 |
+---------------+-------+
只需用保存的查询替换查询变量。 另外,如果您使用的是带有-use_Legacy_SQL标志的标准SQL或传统SQL


参考文档。

尽管您可能已经从官方文档中了解了,但您可以从bq查询中获得大量查询结果,但您必须了解多个细节

首先,这里有一个例子。我使用以下命令从公共数据集bigquery public data获取了公共表usa_names.usa_1910_2013的所有行:

该命令的结果是一个包含5552454行的CSV文件,前两行包含标题信息。此表中的行数为5552452,因此它将签出

以下是需要注意的事项:

不管具体查询下载限制是什么,这些限制似乎只适用于Web UI,这意味着bq不受限制; 起初,我使用Cloud Shell来运行这个bq命令,但行数太多,以至于将结果集流式传输到其中会杀死Cloud Shell实例!我必须使用一个计算实例,该实例的资源至少与n1-standard-4 4vCPU、16GiB RAM的资源相同,即使使用了所有这些RAM,查询也花了我10分钟完成。注意,查询本身运行在服务器端,这只是缓冲结果的问题; 我手动复制粘贴查询本身,因为似乎没有直接从bq引用保存的查询的方法; 您不必使用标准SQL,但必须指定max_rows,因为否则它只返回100行100是此参数的当前默认值; 您仍将面临与BigQuery关联的常见问题,因此您可能希望是否将其作为批处理作业运行,这取决于您自己。另外,不要忘记查询的最大响应大小是128 MiB,因此您可能需要将查询分解为多个bq查询命令,以避免达到此大小限制。如果您想要一个足够大的公共表,以便在查询期间达到此限制,请尝试使用bigquery公共数据集中的samples.wikipedia one。 我想就是这样!只要确保你在一台健壮的机器上运行这些命令,几次尝试后,它就会给出你想要的结果

注:目前有一项功能要求增加可从Web UI下载的CSV的大小

total_rows=$(bq query --use_legacy_sql=false --format=csv "SELECT COUNT(*) AS total_rows FROM \`bigquery-public-data.usa_names.usa_1910_2013\`;" | xargs | awk '{print $2}');
bq query --use_legacy_sql=false --max_rows=$((total_rows + 1)) --format=csv "SELECT * FROM \`bigquery-public-data.usa_names.usa_1910_2013\`;" > output.csv