【发布时间】:2017-07-21 06:24:04
【问题描述】:
我想获取运行的作业的行数:
bigquery.startQuery(options)
这样做的幼稚方法是流式传输结果(例如使用):
job.getQueryResultsStream()
并一一数一数。这显然不是很有效,尤其是对于大型结果。我想到的另一种方法是使用作业的元数据:
job.on('complete', function(metadata) {...}
我可以对响应进行“逆向工程”,以获取查询计划,并查看最后一步中写入的行数。我可以在以下位置找到:
statistics.query.queryPlan[statistics.query.queryPlan.length - 1].recordsWritten
虽然不同查询的样本使我确信这可能有效,但感觉就像是“黑客”,很难说它有多强大。似乎我可能需要处理不同的情况(查询失败等)
编辑:下面建议的另一个选项是“选择计数”由原始查询创建的临时表(在作业元数据中可用)。虽然这绝对是获得我正在寻找的结果的一种直接方法,但它的缺点是需要另一个往返来查询 BigQuery 服务,这需要几秒钟的时间。这是一个 0“字节计费”的查询(计算一个完整的表只使用表元数据),但当作业“知道”它已写入输出的行数时,它似乎是多余的。
是否有一种直接且“正确”的方法可以从作业对象中获取此计数,而无需往返 BQ 服务?可能是我遗漏/误解的字段,或者作业对象中返回 this 的函数?
【问题讨论】:
-
为什么要投反对票?
标签: google-bigquery