如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?
Posted
技术标签:
【中文标题】如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?【英文标题】:How do you run a saved query from Big Query cli and export result to CSV? 【发布时间】:2018-03-01 07:24:31 【问题描述】:我在 Big Query 中有一个已保存的查询,但它太大而无法导出为 CSV。我没有导出到新表的权限,所以有没有办法从bq
cli 运行查询并从那里导出?
【问题讨论】:
【参考方案1】:从 CLI 中,您无法直接访问已保存的查询,因为它现在是一个仅限 UI 的功能,但正如 here 解释的那样,有一个功能请求。
如果您只想运行一次以获得结果,您可以从 UI 中复制查询,然后在使用 bq
时将其粘贴。
使用文档example query,您可以使用公共数据集尝试以下操作:
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 |
+---------------+-------+
只需将 QUERY
变量替换为您保存的查询即可。
此外,take into account 如果您使用带有 --use_legacy_sql
标志的标准或旧版 SQL。
参考文档here。
【讨论】:
【参考方案2】:尽管您可能从官方文档中了解到,您可以从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,所以check out。
以下是需要注意的地方:
不管documentation might seem to say 的具体查询下载限制是什么,这些限制似乎只适用于Web UI,这意味着bq
不受这些限制;
起初,我使用 Cloud Shell 来运行这个 bq
命令,但是行数太大以至于将结果集流式传输到其中会杀死 Cloud Shell 实例!我必须使用至少与n1-standard-4
(4vCPU,16GiB RAM)具有相同资源的 Compute 实例,即使使用所有这些 RAM,查询也花了我 10 分钟才能完成(请注意,查询本身运行服务器-side,只是缓冲结果的问题);
我正在手动复制粘贴查询本身,因为似乎没有办法直接从 bq
引用已保存的查询;
您不必使用标准 SQL,但您必须指定 max_rows
,否则它只会返回 100 行(100 是此参数的当前默认值) ;
您仍将面对与 BigQuery 关联的常见 quotas & limits,因此您可能希望将其作为批处理作业运行,这取决于您。此外,不要忘记查询的最大响应大小为 128 MiB,因此您可能需要将查询拆分为多个 bq query
命令,以免达到此大小限制。如果您想要一个足够大以在查询期间达到此限制的公共表,请尝试使用 bigquery-public-data
数据集中的 samples.wikipedia
表。
我想就是这样!只需确保您在强大的机器上运行这些命令,经过几次尝试,它应该会给您想要的结果!
P.S.:目前有一项功能要求增加您可以从 Web UI 下载的 CSV 文件的大小。 You can find it here.
【讨论】:
以上是关于如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?的主要内容,如果未能解决你的问题,请参考以下文章