【问题标题】:How can I let my clients export BigQuery query results as CSV如何让我的客户将 BigQuery 查询结果导出为 CSV
【发布时间】:2016-05-12 21:46:42
【问题描述】:

所以我在 Google App Engine 上用 Java 开发了一个后端 API。该 API 用于通过在 BigQuery 上运行查询来返回实时统计信息。

我还在 AngularJS 中开发了前端,它与后端 API 通信并允许用户登录并查看聚合统计信息。

我想让我的用户将数据从 BigQuery 导出为 CSV(直接通过我的前端应用程序)。

我不确定实现这一目标的最佳方法是什么。非常感谢您的帮助。

【问题讨论】:

  • 也许我应该提一下,我需要一个可扩展的解决方案。每天导出到 GCS 的次数限制为 1000 次,所以我不太喜欢这个选项。此外,我希望我的用户导出的数据可能包含多达数百万条记录。

标签: java google-app-engine google-bigquery google-cloud-dataflow


【解决方案1】:

根据您的需要,我可以看到您采用以下两种方式之一:

  1. 以 CSV 格式运行 export job to Google Cloud Storage,然后从 GCS 下载导出的 CSV。

  2. 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,但这不是规模的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多