Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何限制Google Bigquery中的作业数量_Javascript_Sql_Google Apps Script_Google Bigquery - Fatal编程技术网

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

Javascript 如何限制Google Bigquery中的作业数量,javascript,sql,google-apps-script,google-bigquery,Javascript,Sql,Google Apps Script,Google Bigquery,为了更好地了解我们的CRM(ActiveCampaign)中发生的情况并创建我们自己的报告,我现在使用Webhook和Google Apps脚本将所有更改发布到BigQuery数据库 这非常有效,但是我发现有1000个加载作业的限制,CRM中的每次更改都会创建至少一个,有时甚至更多的加载作业。此限制不能以任何方式增加。因此,我正在寻找一种方法来批处理条目,并每10分钟加载一次 然而,我不知道如何在由webhook触发的应用程序脚本中创建它,而我在网上的任何地方都找不到它。有人有什么建议吗 您可以

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

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


然而,我不知道如何在由webhook触发的应用程序脚本中创建它,而我在网上的任何地方都找不到它。有人有什么建议吗

您可以使用Google应用程序脚本创建一个web服务(web应用程序),该服务将接收请求,然后执行批处理操作

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


请参阅Web应用指南:

您可以使用谷歌应用脚本创建一个Web服务(Web应用),该服务将接收请求,然后执行批处理操作

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


请参阅《Web应用指南》:

您可以通过将事件序列化到初始webhook中的数据存储设备(如Google Sheets)中,然后使用基于时间的触发器读取保存的事件并将其发送到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();
  }
}
函数doPost(e){
var hdd=SpreadsheetApp.openById(“某些id”);
/*根据事件的参数选择要记录到的工作表*/
var参数=e.参数,扇区=”;
如果(…){
扇区=“某些图纸名称”;
}否则如果(…){
sector=“其他图纸名称”
}
…//对需要立即处理的事件执行其他操作。
//序列化以便稍后进行批处理。
hdd.getSheetByName(扇区).appendRow([JSON.stringify(e)]);
}
//大量火灾事件。创建一个基于时间的触发器,以便经常调用此函数。
函数refirevents(){
var sectors=SpreadsheetApp.openById(“某些id”).getSheets();
对于(变量i=0;i
您可以将事件序列化到初始webhook中的数据存储设备(如Google Sheets)中,然后使用基于时间的触发器读取保存的事件并将其发送到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();
  }
}
函数doPost(e){
var hdd=SpreadsheetApp.openById(“某些id”);
/*根据事件的参数选择要记录到的工作表*/
var参数=e.参数,扇区=”;
如果(…){
扇区=“某些图纸名称”;
}否则如果(…){
sector=“其他图纸名称”
}
…//对需要立即处理的事件执行其他操作。
//序列化以便稍后进行批处理。
hdd.getSheetByName(扇区).appendRow([JSON.stringify(e)]);
}
//大量火灾事件。创建一个基于时间的触发器,以便经常调用此函数。
函数refirevents(){
var sectors=SpreadsheetApp.openById(“某些id”).getSheets();
对于(变量i=0;i
我认为上文所述的应用引擎中的Cron作业、Apache Airflow、Oozie和Web服务是限制BigQuery作业数量的好选择。我认为上文所述的应用引擎中的Cron作业、Apache Airflow、Oozie和Web服务是限制BigQuery作业数量的好选择。这听起来正是我需要的。非常感谢。我实现了它,经过一些调整后,它工作得非常好。非常感谢你!这听起来正是我需要的。非常感谢。我实现了它,经过一些调整后,它工作得非常好。非常感谢你!