将数据实时流式传输到Big Query(使用Node)的最佳方法是什么?

时间:2019-06-14 04:17:56

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

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

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

我尝试使用AWS Lambdas或Google Cloud Functions,但是在那些平台上针对此问题的必要设置远远超出了此处的用例需求。我认为许多开发人员也有同样的问题,因此必须有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

由于您正在寻找一种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中找到有关流插入的配额和限制的更多信息。

答案 1 :(得分:0)

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

STREAM的目标体系结构将如下所示: Pubsub订阅者(推送类型)-> Google云功能-> Google大查询

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

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