javascript - 如何从 bigquery API 查询 bigquery View

标签 javascript mysql google-apps-script google-api google-bigquery

我在 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/

相关文章:

javascript - $.noUiSlider 垂直 slider 的反向

javascript - 动画片。扩展 div 高度而不直接设置其高度( Angular 应用程序)

javascript - 如何计算JavaScript中多个数组的交集?什么是 [等于 : function] mean?

google-apps-script - Google Apps 脚本在两个单独的 Google 表格之间执行索引和匹配功能

google-apps-script - 使用Google脚本将多个表格行插入文档中

javascript - CSS 或 JavaScript 中的只读 div

mysql - 在 select 上减去 2 列可以防止第二列上出现 NULL 而不使用 IF?

mysql - mySQL 之后无法从 JSON 获取值

php - Mysql WHERE NOT EXISTS(查询)OR(查询)

javascript - 仅搜索和删除我在 Google 云端硬盘共享文件夹中创建的文件的脚本