无法通过Apps脚本在BigQuery中使用插入或更新语句

问题描述 投票:4回答:1

我正在将apps脚本用作Webhook,应该用来捕获信息并将其存储在BigQuery中。我以前可以使用appendRow将数据存储在工作表中,但是由于数据量越来越大,因此我不得不寻找替代方法,因此决定使用BigQuery进行存储。

[当我使用标准SQL查询通过BigQuery控制台插入/更新数据时,它可以完美运行,但在使用应用程序脚本时效果不佳。

这是我的doGet函数,应该捕获数据并运行BigQuery.Jobs.query,但是它失败了,并且没有更新表-

var projectId = 'MyProjectID';
var datasetId = 'MyDatasetID';
var tableId = 'MyTableID';

function doGet(e) {
  var params = JSON.stringify(e.parameters);
  var jsonMapping = JSON.parse(params)
  var email = jsonMapping["email"][0]
  var number = jsonMapping["number"][0]
  var request = {
    'query': "INSERT INTO `" + projectId + "."+ datasetId + "." + tableId + "` VALUES ('" + email + "','" + number + "')"
  }
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;
  return ContentService.createTextOutput('Successful')
}

有人可以告诉我我做错了什么吗?由于截断而无法看到完整的错误,并且在下一次运行时弹出窗口完全消失:(

google-apps-script google-bigquery
1个回答
5
投票

您需要将useLegacySql设置为false。对此可以找到更多的见解here

尝试一下-

var projectId = 'MyProjectID';
var datasetId = 'MyDatasetID';
var tableId = 'MyTableID';

function doGet(e) {
  var params = JSON.stringify(e.parameters);
  var jsonMapping = JSON.parse(params)
  var email = jsonMapping["email"][0]
  var number = jsonMapping["number"][0]
  var request = {
    'query': "INSERT INTO `" + projectId + "."+ datasetId + "." + tableId + "` VALUES ('" + email + "','" + number + "')",
    'useLegacySql': false
  }
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;
  return ContentService.createTextOutput('Successful')
}

© www.soinside.com 2019 - 2024. All rights reserved.