如何让我的客户将 BigQuery 查询结果导出为 CSV
Posted
技术标签:
【中文标题】如何让我的客户将 BigQuery 查询结果导出为 CSV【英文标题】:How can I let my clients export BigQuery query results as CSV 【发布时间】:2016-05-12 21:46:42 【问题描述】:所以我在 Google App Engine 上用 Java 开发了一个后端 API。该 API 用于通过在 BigQuery 上运行查询来返回实时统计信息。
我还在 AngularJS 中开发了前端,它与后端 API 通信并允许用户登录并查看聚合统计信息。
我想让我的用户将数据从 BigQuery 导出为 CSV(直接通过我的前端应用程序)。
我不确定实现这一目标的最佳方法是什么。非常感谢您的帮助。
【问题讨论】:
也许我应该提一下,我需要一个可扩展的解决方案。每天导出到 GCS 的次数限制为 1000 次,所以我不太喜欢这个选项。此外,我希望我的用户导出的数据可能包含多达数百万条记录。 【参考方案1】:根据您的需要,我可以看到您采用以下两种方式之一:
以 CSV 格式运行 export job to Google Cloud Storage,然后从 GCS 下载导出的 CSV。
从tabledata.list API 读取数据,在您的服务器上将 fv 格式转换为 CSV 并创建一个可下载的 CSV 文件。
我可能会推荐第一个选项。导出作业可能会更好地扩展,因为它们对于大型表通常比重复调用 tabledata.list 的性能更高。它还避免了编写自定义代码来将数据转换为 CSV 的需要。
【讨论】:
实际上我们也需要一个替代方案,因为它需要太长时间。查询需要 2 分钟,但导出 100 行再次需要 1-2 分钟。这会在 3-4 分钟内结束,这太长了,需要改进它。您还有其他想法吗? 与 BigQuery 中的大多数操作一样,导出作业并未针对少量行进行优化。正在努力提高出口工作的速度,但还处于早期阶段,我无法提供预计到达时间。鉴于当前的 BigQuery 系统,上面的建议是我能想到的最好的。在您的情况下,只有 100 行,使用 tabledata.list 的性能可能会更好。【参考方案2】:导出到 GCS 目前是我们的扩展解决方案,也许您可以联系团队为您提供一些特殊配额。返回直接 CSV 输出的 tabledata.list 即将被弃用,另一种方法是使用 bq cli 的 head 命令和 --format=csv,但这不是规模的解决方案。
【讨论】:
以上是关于如何让我的客户将 BigQuery 查询结果导出为 CSV的主要内容,如果未能解决你的问题,请参考以下文章