我在bigquery中有一个视图,它包含来自不同数据集和表的字段,现在我想通过我的谷歌脚本查询这个视图。正确的做法是什么。
事实上,目前我已经在bigquery中创建了一个单独的表,并查询表而不是视图,但我需要视图,因为当依赖关系表更新时,视图会得到更新。
如果我正在使用该表,它运行良好,但在视图的情况下,我得到以下错误:
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 {
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来找到它们。
2013年12月11日发布的最新文档仅为少数配置属性定义了getter和setter,"maximumBillingTier"不是其中之一。
我建议按照当前文档中的使用示例手动设置请求属性,而不是依赖于"旧"对象构造函数,因为它们似乎只是出于兼容性目的而留下的,而且是不完整的。
顺便说一句,视图需要比表更高的计费层的原因是,视图只是一个逻辑表,定义视图的查询必须在查询视图本身时重新执行。