我在 bigquery 中有一个 View ,其中包含来自不同数据集和表的字段,现在我想通过我的 google 脚本查询这个 View 。这样做的正确方法是什么。
实际上,目前我已经在 bigquery 中创建了一个单独的表并查询该表而不是 View ,但我需要 View ,因为 View 将在依赖表更新时更新。
如果我正在使用该表,它工作正常,但在查看时出现以下错误:
Exception: Response Code: 404. Message: Not Found.
用于返回查询结果的 Bigquery api。
try {
var job = BigQuery.newJob();
var config = BigQuery.newJobConfiguration();
var queryConfig = BigQuery.newJobConfigurationQuery();
queryConfig.setQuery(sql);
queryConfig.setMaximumBillingTier(5);
config.setQuery(queryConfig);
job.setConfiguration(config);
var jobid = BigQuery.Jobs.insert(job, projectNumber).jobReference;
queryResults = BigQuery.Jobs.getQueryResults(projectNumber, jobid.jobId);
}
catch (err) {
Logger.log(err);
Browser.msgBox(err);
return;
}
// Check on status of the Query Job : MONTHLY
while (queryResults.getJobComplete() == false) {
try {
queryResults = BigQuery.Jobs.getQueryResults(projectNumber, queryResults.jobId);
//queryResults = BigQuery.Jobs.getQueryResults(projectNumber, job.id);
}
catch (err) {
Logger.log(err);
Browser.msgBox(err);
return;
}
}
return queryResults;
如果我注释掉第一个 try 子句并使用下面的子句
try {
var queryRequest = BigQuery.newQueryRequest();
queryRequest.setQuery(sql).setTimeoutMs(100000);
queryResults = BigQuery.Jobs.query(queryRequest, projectNumber);
//Browser.msgBox(queryResults);
}
catch (err) {
Logger.log(err);
Browser.msgBox(err);
return;
}
然后它开始给我
Exception: Query exceeded resource limits for tier 1. Tier 3 or higher required.
最佳答案
它看起来像'configuration.query.maximumBillingTier ' 插入作业时未设置属性。使用“JobConfigurationQuery”和其他类的方法似乎已被放弃,因为在当前文档中没有提及它们,我需要求助于使用 Wayback Machine 来 find them .
最近可用的document从 11/12/2013 开始只为一些配置属性定义 getter 和 setter,'maximumBillingTier' 不是其中之一。
我建议像 current documentation 的使用示例中那样手动设置请求属性,而不是依赖于“旧的”对象构造函数,因为它们似乎只是出于兼容性目的而保留并且不完整。
顺便说一下, View 需要比表更高的计费层的原因是因为 View 只是一个 logical table。并且定义 View 的查询必须在查询 View 本身时重新执行。
关于javascript - 如何从 bigquery API 查询 bigquery View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386638/