【问题标题】:What is the best place to run BigQuery queries in Google Cloud platform?在 Google Cloud 平台中运行 BigQuery 查询的最佳位置是什么?
【发布时间】:2018-10-21 22:35:55
【问题描述】:

我有一些包含数千行的文件需要插入到 Google BigQuery 中,因此,由于执行时间超过了 AppEngine 中 60 秒的请求限制,我将 BQ 查询移到了任务队列中。

目前,它工作得很好,但我不知道这是否是放置 BQ 查询的最佳位置。我这样说是因为请求最多需要 3 分钟才能完成,而且我认为这有点慢。您认为查询 BQ 有更快/更好的地方吗?

PS:我正在使用 google bigquery api 发送查询。

【问题讨论】:

  • 不太清楚您是如何使用 BigQuery 的,但也许像 Composer 这样的东西会起作用。
  • 我在 AppEngine 任务队列中通过 Rest API 使用 BigQuery。你现在看清楚了吗?
  • 任务队列对我来说看起来不错。您可以根据需要将 bq 数据拆分到尽可能多的后续/并行任务中以进行扩展。对于查询端,这可能很有用:stackoverflow.com/questions/48572241/…

标签: google-app-engine google-cloud-platform google-bigquery


【解决方案1】:

有两种选择:

  1. 您包含数据的文件已格式化以用于 BQ 加载作业。在这种情况下 - 您开始在任务队列中加载作业 - 并将您从 REST 调用获得的作业 ID 存储到数据存储区。并退出任务队列。作为另一个进程,您设置每分钟运行一次的 appengine cron,只需检查所有正在运行的 jobid 并更新状态(来自 cron 的进程作为任务队列运行并使用 - 所以它将在 10 分钟以内)如果发生更改并在需要时启动另一个进程。在这种情况下,我认为它的可扩展性非常好

  2. 您处理文件并以某种方式手动插入行 - 在这种情况下,最好的操作是使用 pubsub 或再次在任务队列中启动多个任务 - 通过手动将数据拆分成小块并使用 BQ 流插入 API - 当然这取决于你的行的大小 - 但我发现每个进程 1000-5000 个记录在这里效果很好。

【讨论】:

    【解决方案2】:

    也可以查看Potens.io(也可以在Cloud Launcher获得)

    Magnus - 作为 Potens 套件的一部分的工作流自动化器 - 支持所有 BigQuery、云存储和大多数 Google API 以及多个简单的实用程序类型任务,如 BigQuery 任务、导出到存储任务、循环任务等等

    披露:我是这些工具的创造者和 Potens 团队的领导者

    【讨论】:

    • 感谢您的产品,但我实际上有一个可行的解决方案,我只是要求围绕任务队列和 BigQuery 的最佳实践。
    【解决方案3】:

    如果您在 Google Cloud Storage 中有文本文件,则 Cloud Dataflow 可能是适合您情况的自然解决方案{1}。

    您可以使用 Google 提供的模板在创建 Cloud Dataflow 管道{2}的过程中节省一些时间。 通过这种方式,您可以创建一个批处理管道,将数据从 Google Cloud Storage(文件)移动(并根据需要进行转换)到 BigQuery。

    {1}:https://cloud.google.com/dataflow/

    {2}:https://cloud.google.com/dataflow/docs/templates/provided-templates#cloud-storage-text-to-bigquery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2013-03-31
      • 1970-01-01
      • 2018-09-13
      • 2023-03-28
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多