javascript - 使用分页时 BigQuery 找不到工作
问题描述
我一直在使用从这里获取的 AppScript 函数,稍作修改,它似乎工作正常,它只接受一个查询并返回一个 2D 数组。但是,如果查询很大并且返回的内容totalRows
超过rows
并且因此需要分页,则该作业似乎不会持久,因此我在之后收到以下错误while (queryResults.pageToken)
:
API call to bigquery.jobs.getQueryResults failed with error: Not found: Job cellular-nuance-292711:job_-i4Dk9W7JVKF2-W_5
该作业似乎从未出现在作业历史记录中或使用 bq 命令行工具。本质上,它会在第一次调用时返回数据,但不可能多次查询同一个作业,因为它会消失。
这是我的功能:
function runQuery(query) {
var request = {
query: query,
useLegacySql: false
};
var queryResults = BigQuery.Jobs.query(request, bigQuerySettings.projectId);
var jobId = queryResults.jobReference.jobId;
var projectId = bigQuerySettings.projectId; // This is just a mock declaration, it's actually declared elsewhere in the actual code
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
}
我一直在添加大量日志,并且可以确认该作业在第一次尝试后肯定会正确返回,并且行中甚至还有数据 - 问题只是当有一个分页标记时,因为totalRows
大于rows
.
解决方案
原来我只需要在最后一部分添加位置:
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
pageToken: queryResults.pageToken,
location: bigQuerySettings.location
});
rows = rows.concat(queryResults.rows);
}
推荐阅读
- angular - 如何将托管在 docker 容器中运行的 tomcat 上的角度前端连接到也在 docker 容器中运行的 springboot 后端?
- go - 如果列表项具有键==值,则从列表中获取值
- c# - 用c#中列表中的连续元素替换字符串占位符
- typescript - 如何使用自定义匹配器扩展 jest expect 的 extendExport typescript 命名空间
- three.js - 具有 JPG 纹理的自定义 three.js 着色器。每一帧的图像解码和 texTexture2D 调用都会导致大量丢帧
- flask - 有没有办法使用 wtforms 遍历 Flask 中的 Form 中的 FormField?
- php - 数据库中的数据不会传递给 laravel 中的 view.blade
- laravel - Flutter - 包含令牌的字符串被存储并返回前导斜杠和引号。如何删除它们?
- jquery - ChartJs 没有以不同的颜色显示线条颜色
- html - 如何为 html5 视频标签停用 IO 全屏模式