【问题标题】:Bigquery API: Running query with destinationTable does not save resultsBigquery API:使用destinationTable 运行查询不会保存结果
【发布时间】:2023-03-08 23:15:01
【问题描述】:

我正在尝试使用 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

任何想法我做错了什么?

【问题讨论】:

    标签: google-apps-script google-bigquery


    【解决方案1】:

    您使用的参数只能通过 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;
        }
    }
    

    【讨论】:

    • 需要稍作修正才能标记为已解决 - 配置的全部内容需要位于另一个“查询”参数后面(例如配置->查询->)。否则,您会从 API 中得到错误。 var configuration = { "query": { "useQueryCache": false,
    • 谢谢。已修复(看起来您提出的更新由于某种原因被 SO 版主拒绝,但我还是申请了)。
    • 您编写的代码出现以下错误:GoogleJsonResponseException: API call to bigquery.jobs.getQueryResults failed with error: Encountered " ").* "" at line 0, column 0 . 期待:")" ... [尝试使用标准 SQL (cloud.google.com/bigquery/docs/reference/standard-sql/…
    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多