【问题标题】:How to query a bigquery view from bigquery APIs如何从 bigquery API 查询 bigquery 视图
【发布时间】:2016-05-23 08:54:08
【问题描述】:

我在 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 子句并使用下面的一个

 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.

【问题讨论】:

  • 视图类查询和表类查询应该没有区别,都应该是有效的 SQL 查询。也许您的错误来自其他地方。
  • @Pentium10 ,我同意,但只有当我将表名更改为查看名时才会出现此错误
  • 发布 SQL 可能有问题。
  • @Pentium10 sql 很好,因为当我在 bigquery 控制台中粘贴相同的查询时,我得到了输出。 SELECT SUM(finalprice)/100.0 FROM [Insights.redemption] WHERE role = 'customer' AND (STRFTIME_UTC_USEC(ordercreatedat * 1000 + 19800000, '%Y-%m-%d') BETWEEN '2016-05-11' AND ' 2016-05-12')
  • @Pentium10 实际上,在控制台中执行上述查询时,我必须添加无限计费层,在代码中我将其设置为 5,这可能是问题,但我尝试将其增加到 10 ..没有成功

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


【解决方案1】:

在您插入作业时,似乎没有设置“configuration.query.maximumBillingTier”属性。使用 'JobConfigurationQuery' 和其他类的方法似乎已被放弃,因为在当前文档中没有提及它们,我需要求助于使用 Wayback Machine 来find them

2013 年 11 月 12 日最新可用的 document 仅定义了一些配置属性的 getter 和 setter,而“maximumBillingTier”不是其中之一。

我建议像current documentation 的使用示例中那样手动设置请求属性,而不是依赖“旧”对象构造函数,因为它们似乎只是为了兼容性目的而留下的并且不完整.

顺便说一下,与表相比,视图需要更高的计费层级的原因是,视图只是logical table,并且在查询视图本身时必须重新执行定义视图的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多