使用Node流式传输大型查询SELECT?

时间:2018-01-15 17:30:54

标签: node.js google-bigquery

我正在开发一个Node.js程序。我们使用Node来每天操作Big Query中存储的数据。

每天我们都有大量的新数据(280 Go)。

如何在一天中对BigQuery发出请求并逐行传输结果?

现在,我们没有流。我们只需要一次请求所有数据。

我可以使用sql LIMIT关键字。但问题是BigQuery在成本计算中忽略了LIMIT。如果我们限制0,10。它探讨了当天的所有数据(280 Go)。同意限制10,10 ...

这是我目前的代码。

    const BigQuery = require('@google-cloud/bigquery');

    // ... Some code ...

    this.bigQuery
        .query(Exporter.enrichQueryWithOptions(`SELECT e.name FROM  events))
        .then(results => {
            const rows = results[0];
            console.log(rows);
        })
        .catch(err => {
            console.error('ERROR:', err);
        });

3 个答案:

答案 0 :(得分:0)

正如人们所指出的,最好能在Bigquery SQL语句中处理所有内容。

但是,如果您必须处理应用程序中的数据。 Bigquery提供了tabledata.list API来直接从表中读取数据。

https://cloud.google.com/bigquery/docs/reference/rest/v2/tabledata/list

答案 1 :(得分:0)

最后,我只使用BigQuery Legacy SQL装饰器来选择我需要的时间间隔。所以,我无法获得我的大桌子的一部分,只为这部分付费。

https://cloud.google.com/bigquery/table-decorators

但请注意,您只能在过去7天的数据中使用装饰器!

答案 2 :(得分:0)

我认为这可能是您需要的:

https://googleapis.dev/nodejs/bigquery/latest/BigQuery.html#createQueryStream

该功能允许您构建查询并通过数据流使用它。