用于自动化Bigquery运行的应用程序脚本,但没有做任何事情

时间:2017-03-29 10:33:12

标签: google-apps-script google-bigquery

我将此问题作为一个新问题发布,因为它与我在此问题上的原始问题略有不同。

我有一个应用程序脚本来在BigQuery中运行查询。该脚本正在运行并与BigQuery进行通信,但该作业并未按预期工作。我目前在BigQuery中收到以下错误:

  

已存在:表fiery-cabinet-111 ****:***。Test4(错误代码:重复)

这是脚本:

layout_gravity

2 个答案:

答案 0 :(得分:1)

您正在编写查询结果的表已存在。您需要将WRITE_DISPOSITION设置为:

  1. WRITE_TRUNCATE :如果表已存在,BigQuery将覆盖表数据。
  2. WRITE_APPEND :如果该表已存在,BigQuery会将数据附加到表中。
  3. WRITE_EMPTY :如果该表已存在且包含数据,则表示重复'作业结果中返回错误。
  4. 默认值为WRITE_EMPTY。

    https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query

    configuration.query.writeDisposition

答案 1 :(得分:0)

您的选择查询中似乎缺少数据集名称。更改查询以包括数据集名称

query: 'SELECT *' +
       'FROM 11****101.Test2;',

并通过查看执行记录和日志来验证语法

请注意,如果您具有访问权限并且语法(即项目,表和数据集名称)正确,您的代码将只使用BigQuery记录表插入作业,然后完成。

完成的脚本与完成的BigQuery作业不同,因为您必须轮询作业状态。例如,您可以尝试插入已存在的表,这将成功发布作业,但在执行时失败(取决于设置的参数)。

请尝试以下操作以获取已完成的查询状态

var queryResults = BigQuery.Jobs.insert(job, projectId);

  var jobId = queryResults.jobReference.jobId;
  var response = 'Running'

  var sleepTimeMs = 500;
  while (response != 'DONE') {
    Utilities.sleep(sleepTimeMs);
    response = BigQuery.Jobs.get(projectId, jobId).status.state;
  }

  Logger.log('Job status : ' + queryResults.status);  
相关问题