首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Big query cli运行保存的查询并将结果导出到CSV?

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

Stack Overflow用户
提问于 2018-03-01 15:24:31
回答 2查看 2.4K关注 0票数 0

我在Big query中保存了一个查询,但它太大了,无法导出为CSV。我没有导出到新表的权限,所以有没有一种方法可以从bq cli运行查询并从那里导出?

EN

回答 2

Stack Overflow用户

发布于 2018-03-02 03:34:37

从命令行界面,你不能直接访问你保存的查询,因为它是一个只有UI的功能,但是,正如here所解释的,有一个功能请求。

如果您只想运行一次来获得结果,那么可以从UI复制查询,然后在使用bq时粘贴它。

使用docs example query,您可以对公共数据集尝试以下操作:

代码语言:javascript
运行
复制
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的输出应该是:

代码语言:javascript
运行
复制
+---------------+-------+
|     word      | count |
+---------------+-------+
| dispraisingly |     1 |
| praising      |     8 |
| Praising      |     4 |
| raising       |     5 |
| dispraising   |     2 |
| raisins       |     1 |
+---------------+-------+

只需用您保存的查询替换QUERY变量即可。另外,如果您使用的是带有--use_legacy_sql标志的标准SQL或遗留SQL,则为take into account

参考文档here

票数 1
EN

Stack Overflow用户

发布于 2018-03-02 17:44:45

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

首先,这里有一个例子。我使用following commands从公共数据集bigquery-public-data获得了公共表usa_names.usa_1910_2013的所有行

代码语言:javascript
运行
复制
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,所以它会进行校验。

这里是需要注意的地方:

  • 当涉及到具体的查询下载限制时,不管documentation might seem to say是什么,这些限制似乎只适用于Web,这意味着bq不受这些限制的影响;
  • 一开始,我使用Cloud Shell来运行这个bq命令,但是行数太大了,以至于将结果集流式传输到它中会杀死Cloud Shell实例!我必须使用至少与n1-standard-4相同的资源的计算实例(4vCPU,16GiBRAM),即使有这么多内存,查询也需要10分钟才能完成(请注意,查询本身运行在服务器端,这只是一个缓存results);
  • I'm手动复制粘贴查询本身的问题,因为似乎没有一种方法可以直接从bq引用保存的查询;
  • 您不必使用标准SQL,但您必须指定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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49044582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档