我在Big query中保存了一个查询,但它太大了,无法导出为CSV。我没有导出到新表的权限,所以有没有一种方法可以从bq cli运行查询并从那里导出?
发布于 2018-03-02 17:44:45
尽管您可能已经从官方文档中了解了什么,但您可以从bq query获得大型查询结果,但您必须了解多个细节。
首先,这里有一个例子。我使用following commands从公共数据集bigquery-public-data获得了公共表usa_names.usa_1910_2013的所有行
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此命令的结果是一个包含5552454行的CSV文件,其中前两行包含头信息。这个表中的行数是5552452,所以它会进行校验。
这里是需要注意的地方:
bq不受这些限制的影响;bq命令,但是行数太大了,以至于将结果集流式传输到它中会杀死Cloud Shell实例!我必须使用至少与n1-standard-4相同的资源的计算实例(4vCPU,16GiBRAM),即使有这么多内存,查询也需要10分钟才能完成(请注意,查询本身运行在服务器端,这只是一个缓存results);bq引用保存的查询;max_rows,因为否则它将只返回100行(100是此SQL的当前缺省值),因为它仍然面对与BigQuery关联的通常quotas & limits,所以您可能希望将其作为批处理作业运行,这取决于您。此外,不要忘记,一个查询的最大响应大小是128 MiB,因此您可能需要将查询拆分为多个bq query命令,以避免达到此大小限制。如果您想要一个足够大以在查询期间达到此限制的公用表,请尝试bigquery-public-data dataset中的samples.wikipedia one。我想就是这样了!只要确保你在一台健壮的机器上运行这些命令,在几次尝试之后,它应该会给你你想要的结果!
P.S.:目前有一个功能请求,要求增加可从Web下载的CSV的大小。You can find it here。
https://stackoverflow.com/questions/49044582
复制相似问题