google-apps-script - Bigquery API : Running query with destinationTable does not save results

标签 google-apps-script google-bigquery

我正在尝试使用 Google Apps 脚本来自动执行每日聚合过程。这个想法是在一个数据集中的几个表上运行,并将它们的结果保存到第二个数据集中的表中。我的用户对两个相关数据集都有权限。

我的请求如下

        var request = {
        "maxResults": 10000,
        "useQueryCache": false,
        "destinationTable": {
              "projectId": "project_name_obfuscated",
              "datasetId": "project_114151_shared",
              "tableId": "test123"
            },
        "writeDisposition": "WRITE_TRUNCATE",
        "createDisposition": "CREATE_IF_NEEDED",
        "allowLargeResults": true,
        "query": "query syntax here"
      };

  var queryResults = BigQuery.Jobs.query(request, "project_name_obfuscated");

(出于保密原因,我混淆了项目的名称和查询本身)。

查询实际上运行良好,但是,它没有保存到我定义的指定项目/数据集/表中。

在 BQ UI 中,我看到如下内容:
Job ID: project_name_obfuscated:job_NhkQpi110p3i5yoOO7nzXp3tTKY
Start Time: 5:47pm, 20 Oct 2014
End Time: 5:47pm, 20 Oct 2014
Bytes Processed: 0 B
Destination Table: project_name_obfuscated:_138c3340e691065e8db0b55781b5a41c6b4bcd49.anonev_SOiiRC10lfetj000kcj4rmXNc5E

任何想法我做错了什么?

最佳答案

您使用的参数只能通过 Jobs.query 方法中的 Jobs.insert 获得。 Jobs.query 旨在用于快速、同步的查询,并且不支持 Jobs.insert(异步版本)中可用的所有选项。

尝试类似:

var configuration = {
  "query": {
    "useQueryCache": false,
    "destinationTable": {
          "projectId": "project_name_obfuscated",
          "datasetId": "project_114151_shared",
          "tableId": "test123"
        },
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "query": "query syntax here"
  }
};
var job = {
    "configuration": configuration
};

var jobResult = BigQuery.Jobs.insert(job, "project_name_obfuscated");

var jobId = jobResult.jobReference.jobId;

// The job might not actually be done; wait until it is marked
// complete.
var sleepTimeMs = 500;
while (true) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
      "maxResults": 10000);
    if (!queryResults.jobComplete) {
      break;
    }
}

关于google-apps-script - Bigquery API : Running query with destinationTable does not save results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26468803/

相关文章:

unit-testing - 测试 Gmail 插件

google-apps-script - Array.indexOf(value) - 没有在 GAS 中给出正确的索引号

google-bigquery - Bigquery 中数组对之间的余弦相似度

python - BigQuery : result set in UI and from API have different number of rows. 为什么?

google-bigquery - Google BigQuery 是否支持 Parquet 文件格式?

javascript - 将日期/时间设置为 00 :00:00

google-apps-script - Google API 返回响应 200 空 JSON

javascript - 谷歌应用程序脚本中的每个循环

google-bigquery - BigQuery FIRST_VALUE 和 IGNORE_NULLS - 为什么它会这样工作?

java - 将大查询结果附加到java appengine中的现有表