2017-07-21 93 views
1

算完成BigQuery的工作行我想獲得工作的行數是用運行:如何使用Node.js的客戶端庫

bigquery.startQuery(options) 

這樣做的簡單的方式,將流結果(如使用):

job.getQueryResultsStream() 

然後依次計數。這顯然不是非常有效的,特別是對於大的結果。另一種方式我覺得是用作業的元數據:

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

在那裏我可以一種「反向工程」的響應,以獲得查詢計劃,看看在最後一步寫入的行數。我能找到在:

statistics.query.queryPlan[statistics.query.queryPlan.length - 1].recordsWritten 

雖然不同的查詢的樣本相信我,這可能會奏效,那感覺就像是「黑客」,這是很難說這將是多麼強勁。似乎我可能需要處理不同的情況(失敗的查詢等)

編輯:下面提出的另一個選項是「SELECT COUNT」ing由原始查詢創建的臨時表(作業元數據中可用)。雖然這絕對是一種簡單的方式來獲得我期待的結果,但它的缺點是需要另一次來回查詢BigQuery服務,這需要幾秒鐘的時間。它是一個0「字節計費」的查詢(計數一個完整的表只使用表元數據),但當作業「知道」它已經寫入輸出的行數時,它似乎是多餘的。

從工作對象中獲得此計數是否存在一個簡單且「正確」的方法,而無需往返BQ服務?也許我錯過了/曲解了一個領域,或者是作業對象中的一個函數返回這個?

+0

爲什麼downvote檢索? – DannyA

回答

1

任何作業都有目標表 - 即使未明確設置它 - 結果仍保存在所謂的匿名錶中,您可以依次查詢以獲取輸出行的數量。所以,下面簡單的額外的查詢就可以了(注意 - 名稱只是作爲一個例子)

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

使用實際的目標表 - 可以從工作configuration.query.destinationTable財產

+0

這會正常工作,但與在查詢計劃中查看相比,它具有需要往返BQ服務(這將花費幾秒鐘)的缺點。我編輯了這個問題來反映這一點。 – DannyA

+0

爲真。多一個電話。仍然是一個返回100%正確結果的選項! :o)如果你喜歡,可以考慮投票 –