【问题标题】:What is the best way to stream data in real time into Big Query (using Node)?将数据实时流式传输到 Big Query(使用 Node)的最佳方式是什么?
【发布时间】:2019-10-28 16:28:19
【问题描述】:

我想实时(或接近实时)将 HTTP 请求流式传输到 BigQuery。

理想情况下,我想使用一个工具,它提供一个端点来将 HTTP 请求流式传输到,并允许我编写简单的 Node,这样: 1. 我可以添加适当的 insertId,以便 BigQuery 可以在必要时对请求进行重复数据删除,并且 2. 我可以批量处理数据,所以我不会一次发送一行(这会导致不必要的 GCP 成本)

我曾尝试使用 AWS Lambdas 或 Google Cloud Functions,但在这些平台上解决此问题的必要设置远远超出了此处用例的需求。我假设许多开发人员都有同样的问题,并且必须有更好的解决方案。

【问题讨论】:

  • 为此推荐的模式是通过 Pub/Sub 和 Cloud Dataflow。所以,它看起来像:streaming data -> Pub/Sub -> Cloud Dataflow -> BigQuery
  • @grahampolley 我看到了用于 pub/sub 到 bigquery 的数据流模板,因此应该添加 pub/sub bw 数据流和 bigquery,如流表示中所示?

标签: node.js aws-lambda google-bigquery google-cloud-functions cloudflare-workers


【解决方案1】:

您可以使用云功能。借助云函数,您可以在 Node JS 中创建自己的 API,然后将其用于 BQ 中的 Streaming 数据。

STREAM 的目标架构如下所示: Pubsub Subscriber (PUSH TYPE) -> Google Cloud Function -> Google Big Query

您可以在批处理模式下使用此 API,也可以在 Cloud Composer(即 Apache Airflow)或 Cloud Scheduler 的帮助下根据您的要求安排您的 API。

BATCH 的目标架构如下所示: Cloud Scheduler/Cloud Composer -> Google Cloud Function -> Google Big Query

【讨论】:

    【解决方案2】:

    由于您正在寻找stream HTTP requests to BigQuery 的方法并批量发送它们以最大程度地降低 Google Cloud Platform 成本,因此您可能需要查看解释此问题的公共文档。 您还可以找到关于如何将流插入 BigQuery 的 Node.js template

    // Imports the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    
    /**
    * TODO(developer): Uncomment the following lines before running the sample.
    */
    // const projectId = "your-project-id";
    // const datasetId = "my_dataset";
    // const tableId = "my_table";
    // const rows = [{name: "Tom", age: 30}, {name: "Jane", age: 32}];
    
    // Creates a client
    const bigquery = new BigQuery({
        projectId: projectId,
    });
    
    // Inserts data into a table
    await bigquery
        .dataset(datasetId)
        .table(tableId)
        .insert(rows);
    console.log(`Inserted ${rows.length} rows`);
    

    对于批处理部分,建议的比例是每个请求使用 500 行,即使它可以达到 10,000 行。有关流式插入的配额和限制的更多信息,请访问公共documentation

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2018-06-12
      • 1970-01-01
      • 2020-10-20
      • 2011-04-05
      • 2019-04-15
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多