BigQuery API不返回数据集最新表 表量增多后Apps Script查询异常
问题根因
你当前的代码仅获取了BigQuery表列表的第一页数据,从你贴的返回结果中可见nextPageToken字段,说明还有剩余的表数据在后续分页中未被拉取,你确认存在的更新表刚好在后续分页里,所以会永远返回第一页里的最新表。日志截断只是Google Apps Script的打印输出长度限制,和结果错误无关。
修改后的完整代码
function findNewestTables() { const projectId = 'Projectname'; const datasetId = 'Datasetname'; let allTables = []; let pageToken = null; // 分页拉取全量表数据 do { const params = pageToken ? { pageToken: pageToken } : {}; const data = BigQuery.Tables.list(projectId, datasetId, params); if (data.tables) { allTables = allTables.concat(data.tables); } pageToken = data.nextPageToken; } while (pageToken); let maxSoFar = 0; let id = ""; allTables.forEach(table => { const time = parseInt(table.creationTime); if(time > maxSoFar){ maxSoFar = time; id = table.id; } }); const formattedId = id.replace(":", "."); // 不需要打印全量数据可以删掉下一行,避免日志截断提示 // console.log(allTables); console.log(formattedId); return formattedId; };
关键修改说明
- 新增了分页拉取逻辑,循环调用接口直到没有
nextPageToken为止,保证拿到数据集中的所有表 - 合并所有分页的表数据后再遍历判断最新创建的表,避免遗漏后续分页的更新表
- 可删除全量数据打印的代码,彻底消除日志截断的提示,不影响功能正常运行
内容的提问来源于stack exchange,提问作者dfriebe
相关产品推荐
相关产品推荐

