我在Big Query中有一个已保存的查询,但它太大而无法导出为CSV。我没有权限导出到新表,所以有没有办法从bq
cli运行查询并从那里导出?
答案 0 :(得分:1)
在CLI中,您无法直接访问已保存的查询,因为它是截至目前的仅限UI功能,但正如here所述,有一项功能请求。
如果您只想运行一次以获得结果,则可以从用户界面复制查询,然后在使用QUERY="SELECT word, SUM(word_count) as count FROM publicdata:samples.shakespeare WHERE word CONTAINS 'raisin' GROUP BY word"
bq query $QUERY > results.csv
时将其粘贴。
使用文档example query,您可以使用公共数据集尝试以下操作:
cat results.csv
+---------------+-------+
| word | count |
+---------------+-------+
| dispraisingly | 1 |
| praising | 8 |
| Praising | 4 |
| raising | 5 |
| dispraising | 2 |
| raisins | 1 |
+---------------+-------+
的输出应为:
QUERY
只需将--use_legacy_sql
变量替换为您保存的查询即可。
此外,take into account如果您使用带有{{1}}标志的标准或旧版SQL。
参考文档here。
答案 1 :(得分:0)
尽管您可能从官方文档中了解到了什么,但您可以从bq query
获得大量查询结果,但您必须了解多个详细信息。
首先,这是一个例子。我使用following commands从公共数据集usa_names.usa_1910_2013
获取了公共表bigquery-public-data
的所有行:
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,16GiB RAM)相同资源的Compute实例,即使使用所有这些RAM,查询也需要10分钟才能完成(请注意查询本身在服务器端运行,它只是缓冲结果的问题); bq
引用已保存查询的方法; max_rows
,否则它只会返回100行(当前为100行)此参数的默认值); bq query
命令才能达到此大小限制。如果您希望公开表格足以在查询期间达到此限制,请尝试使用samples.wikipedia
数据集中的bigquery-public-data
。我认为这是关于它的!只要确保你在一台强大的机器上运行这些命令,经过几次尝试就可以得到你想要的结果!
P.S。:目前有一项功能请求可以增加您可以从Web UI下载的CSV的大小。 You can find it here