如何使用node.js客户端库

时间:2017-07-21 06:24:04

标签: google-bigquery

我想获取使用以下命令运行的作业的行数:

bigquery.startQuery(options)

这种天真的方式是流式传输结果(例如使用):

job.getQueryResultsStream()

逐一计算。这显然不是很有效,特别是对于大的结果。我想到的另一种方法是使用作业的元数据:

job.on('complete', function(metadata) {...}

我可以对响应进行“逆向工程”,获取查询计划,并查看最后一步中写入的行数。我可以在:

找到它
statistics.query.queryPlan[statistics.query.queryPlan.length - 1].recordsWritten

虽然不同查询的样本让我确信这可行,但感觉就像是“黑客”,并且很难说它会有多强大。好像我可能需要处理不同的情况(查询失败等)

编辑:下面建议的另一个选项是“SELECT COUNT”由原始查询创建的临时表(在作业元数据中可用)。虽然这绝对是获得我正在寻找的结果的简单方法,但它的缺点是需要另一次往返来查询BigQuery服务,这需要几秒钟。这是一个0“字节计费”查询(计算完整表仅使用表元数据),但当作业“知道”它已写入输出的行数时,它似乎是多余的。

是否有直接且“正确”的方式从作业对象获取此计数,而无需往返BQ服务?也许是我错过/误解的字段,或者作业对象中的函数返回这个?

2 个答案:

答案 0 :(得分:1)

任何作业都有目标表 - 即使您没有明确设置它 - 结果仍保存在所谓的匿名表中,您可以依次查询以获取输出行的计数。因此,简单的额外查询将起作用(注意 - 名称仅作为示例)

SELECT COUNT(1) 
FROM `yourProject._0511743a77ca76c1b55482d7cb1f8e91ac5c7b36.anon17286defe54b5c07ba6810a71abfdba6388ac4e0`   

要使用的实际目标表 - 可以从作业的configuration.query.destinationTable属性中检索

答案 1 :(得分:0)

   job.on('complete', function(metadata) {
    console.log(metadata.statistics.query.numDmlAffectedRows)
   }
相关问题