如何将BigQuery查询结果导出至本地文件/Google Cloud Storage?
我完全懂你的痛点——不想导出整张冗余的表,还要先手动创建临时表再导出确实有点繁琐!其实咱们可以用更简洁的方式实现你的需求,分两种场景给你最优方案:
方案1:直接导出查询结果到本地文件
如果目标是本地文件,根本不需要用到bq extract,直接用bq query的输出格式化参数就能一步到位:
bq query --format=csv --use_legacy_sql=false 'SELECT dept_id, SUM(sal) FROM temp.employee GROUP BY dept_id' > employee.csv
--format=csv指定输出格式为CSV(你也可以换成json、tsv等其他格式)> employee.csv把查询结果直接重定向到本地的CSV文件里--use_legacy_sql=false启用BigQuery标准SQL,建议日常使用(如果你的查询是Legacy SQL可以去掉这个参数)
方案2:导出查询结果到Google Cloud Storage(无需手动管理永久表)
如果要导出到GCS,虽然bq extract还是需要表作为源,但咱们可以用临时会话表(会话结束后自动删除,不用手动清理)来简化流程,甚至可以把两步合并成一条命令:
合并版命令
bq query --destination_table #temp_results --use_legacy_sql=false 'SELECT dept_id, SUM(sal) FROM temp.employee GROUP BY dept_id' && bq extract #temp_results gs://XXXX/employee.csv
分步解释
- 第一步用
bq query把查询结果写入临时会话表:
bq query --destination_table #temp_results --use_legacy_sql=false 'SELECT dept_id, SUM(sal) FROM temp.employee GROUP BY dept_id'
#temp_results是临时会话表的名称,注意开头的#——这个表只会在当前BQ CLI会话中存在,会话关闭后会自动被删除,完全不用你手动清理--destination_table指定查询结果的存储位置
- 第二步用
bq extract导出这个临时表到GCS:
bq extract #temp_results gs://XXXX/employee.csv
这种方式既避免了创建永久表占用存储空间,又简化了操作流程,完美解决你的需求~
内容的提问来源于stack exchange,提问作者Munesh
相关产品推荐
相关产品推荐

