[英]Program Google Apps Script to throw error when BigQuery "Resources exceeded during query execution"
我正在使用腳本來運行視圖並使用查詢結果來更新 BigQuery 中的表。 然后,我在 Data Studio 中將這些表用於表/可視化。
我注意到的一個問題是,有時我的視圖會突然拋出一個錯誤“查詢執行期間資源超出”。 但是,我的 Google Apps 腳本將成功運行,但表格將保持不變,因為無法執行視圖。 因此,我的 Data Studio 可視化和表格中的數據將是陳舊的。 除非我 go 編輯視圖並看到它拋出錯誤,否則我將無法知道這一點。
有什么方法可以在我的腳本中添加一些內容,以便當 Bigquery 拋出“查詢執行期間超出資源”錯誤時腳本將失敗或通知我? 這樣我就不會因為錯誤而在不知不覺中擁有過時的數據。
var configuration = {
"query": {
"useQueryCache": false,
"destinationTable": {
"projectId": "abc-123",
"datasetId": "report_tables",
"tableId": "dashboard_1"
},
"writeDisposition": "WRITE_TRUNCATE",
"createDisposition": "CREATE_IF_NEEDED",
"allowLargeResults": true,
"useLegacySql": false,
"query": "SELECT * FROM `abc-123.report_tables.dashboard_1_view`"
}
};
var job = {
"configuration": configuration
};
var jobResult = BigQuery.Jobs.insert(job, "abc-123");
Logger.log(jobResult);
}
我希望你能幫我在上面的腳本中添加一些子句,這樣當 BigQuery 視圖中的資源超出時,這將無法執行或以某種方式通知我,所以我知道 go 更正 BigQuery 中的問題。
謝謝您的幫助!
您的函數成功了,因為BigQuery上的所有作業/查詢都是異步的。 行var jobResult = BigQuery.Jobs.insert(job, "abc-123");
僅將作業/查詢提交給BigQuery服務以開始執行。 然后您的函數返回。
因此,您需要等待並輪詢作業的status
,然后再執行以下操作以處理任何錯誤:
[..]
var job = BigQuery.Jobs.insert(job, "abc-123");
Logger.log(job.status.state);
var jobId = job.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (job.status.state !== "DONE") {
Utilities.sleep(sleepTimeMs);
job = BigQuery.Jobs.get("abc-123", jobId);
Logger.log(job.status.state);
}
if(job.status.errors != null && job.status.errors.length > 0) {
Logger.log("FAILED:" + job.status.errors);
} else {
Logger.log("SUCCEEDED")
}
[..]
樣本輸出(失敗):
[19-06-03 19:54:48:557 AEST] RUNNING
[19-06-03 19:54:49:161 AEST] RUNNING
[19-06-03 19:54:49:789 AEST] RUNNING
[19-06-03 19:54:50:368 AEST] RUNNING
[19-06-03 19:54:51:147 AEST] RUNNING
[19-06-03 19:54:51:783 AEST] RUNNING
[19-06-03 19:54:52:356 AEST] RUNNING
[19-06-03 19:54:52:957 AEST] RUNNING
[19-06-03 19:54:53:564 AEST] RUNNING
[19-06-03 19:54:54:151 AEST] RUNNING
[19-06-03 19:54:54:748 AEST] RUNNING
[19-06-03 19:54:55:338 AEST] RUNNING
[19-06-03 19:54:55:954 AEST] RUNNING
[19-06-03 19:54:56:539 AEST] RUNNING
[19-06-03 19:54:57:107 AEST] RUNNING
[19-06-03 19:54:57:724 AEST] RUNNING
[19-06-03 19:54:58:513 AEST] RUNNING
[19-06-03 19:54:59:524 AEST] RUNNING
[19-06-03 19:55:00:144 AEST] RUNNING
[19-06-03 19:55:00:993 AEST] RUNNING
[19-06-03 19:55:01:613 AEST] RUNNING
[19-06-03 19:55:02:219 AEST] RUNNING
[19-06-03 19:55:02:989 AEST] RUNNING
[19-06-03 19:55:03:557 AEST] RUNNING
[19-06-03 19:55:04:123 AEST] RUNNING
[19-06-03 19:55:04:684 AEST] RUNNING
[19-06-03 19:55:05:408 AEST] RUNNING
[19-06-03 19:55:06:018 AEST] RUNNING
[19-06-03 19:55:06:603 AEST] RUNNING
[19-06-03 19:55:07:215 AEST] RUNNING
[19-06-03 19:55:07:789 AEST] RUNNING
[19-06-03 19:55:08:424 AEST] RUNNING
[19-06-03 19:55:08:985 AEST] RUNNING
[19-06-03 19:55:09:580 AEST] RUNNING
[19-06-03 19:55:10:184 AEST] RUNNING
[19-06-03 19:55:10:802 AEST] RUNNING
[19-06-03 19:55:11:391 AEST] RUNNING
[19-06-03 19:55:11:984 AEST] RUNNING
[19-06-03 19:55:12:564 AEST] RUNNING
[19-06-03 19:55:13:154 AEST] RUNNING
[19-06-03 19:55:13:752 AEST] RUNNING
[19-06-03 19:55:14:372 AEST] RUNNING
[19-06-03 19:55:14:974 AEST] RUNNING
[19-06-03 19:55:15:661 AEST] RUNNING
[19-06-03 19:55:16:227 AEST] RUNNING
[19-06-03 19:55:16:815 AEST] RUNNING
[19-06-03 19:55:17:416 AEST] RUNNING
[19-06-03 19:55:18:002 AEST] DONE
[19-06-03 19:55:18:003 AEST] FAILED:{"reason":"resourcesExceeded","message":"Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 121% of limit.\nTop memory consumer(s):\n ORDER BY operations: 99%\n other/unattributed: 1%\n"}
樣本輸出(成功):
[19-06-03 19:59:48:206 AEST] RUNNING
[19-06-03 19:59:48:820 AEST] RUNNING
[19-06-03 19:59:49:433 AEST] RUNNING
[19-06-03 19:59:50:015 AEST] DONE
[19-06-03 19:59:50:016 AEST] SUCCEEDED
需要考慮的是,使用Google Apps腳本將所有這些都與您的個人Google帳戶(而不是服務帳戶)相關聯。 這可能對您來說還可以,但是在企業中,這是不可以的。
最后,我可能會將您的腳本移動到Cloud Build中。 我認為它更強大,可維護,更易於使用和靈活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.