如何限制Google Bigquery中的作业数量

时间:2018-03-13 10:01:02

标签: javascript sql google-apps-script google-bigquery

为了更好地了解我们的CRM(ActiveCampaign)中发生的情况并创建我们自己的报告,我现在使用webhooks和Google Apps脚本将所有更改发布到BigQuery数据库。

这非常有效,但是我发现有1000个加载作业的限制,并且CRM中的每个更改都会创建至少一个,有时更多的加载作业。不能以任何方式增加此限制。所以我正在寻找一种批处理条目并每10分钟加载一次的方法。

我不知道如何在由webhook触发的Apps脚本中创建它,我无法在网上找到它。有没有人有建议?

2 个答案:

答案 0 :(得分:3)

您可以通过在最初的webhook中将事件序列化为数据存储设备(如Google表格),然后使用基于时间的触发器来读取已保存的事件并将其发送到BigQuery,从而为事件处理添加时间延迟。

function doPost(e) {
  var hdd = SpreadsheetApp.openById("some id");
  /* Pick the sheet to log to based on parameters of the event */
  var params = e.parameters, sector = "";
  if(...) {
    sector = "some sheet name";
  } else if(...) {
    sector = "some other sheet name"
  }
  ... // Do other stuff with event that needs immediate handling.
  // Serialize for batch processing later.
  hdd.getSheetByName(sector).appendRow([JSON.stringify(e)]);
}
// Fire events in bulk. Create a time based trigger to call this function every so often.
function refireEvents() {
  var sectors = SpreadsheetApp.openById("some id").getSheets();
  for(var i = 0; i < sectors.length; ++i) {
    var events = sectors[i].getDataRange().getValues();
    var sheetName = sectors[i].getName();
    for(var r = 0; r < events.length; ++r) {
      var event = JSON.parse(events[r][0]); // Assuming only single column of data
      /* Do stuff with the event response that was originally done in the webhook */
    }
    // Remove handled events.
    sectors[i].clearContent();
  }
}

答案 1 :(得分:0)

您可以使用Google Apps脚本创建将接收请求然后执行批处理操作的Web服务(Web应用程序)。

只需处理脚本中的doGet()doPost()方法,然后在发布脚本时,只要GETPOST请求,就会调用函数对应的方法是脚本的URL。

请参阅网络应用指南:https://developers.google.com/apps-script/guides/web