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

Mar*_*ane 6 google-apps-script google-bigquery

我正在将apps脚本用作Webhook,用于捕获信息并将其存储在BigQuery中。我曾经能够使用来将数据存储在工作表中,appendRow但是由于数据量越来越大,我势必会寻找替代方法,因此决定使用BigQuery进行存储。

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

这是我的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')
}
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*ria 7

您需要将设置useLegacySqlfalse。关于此的更多见解可以在这里找到

尝试这个 -

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')
}

Run Code Online (Sandbox Code Playgroud)