Javascript 如何限制Google Bigquery中的作业数量
为了更好地了解我们的CRM(ActiveCampaign)中发生的情况并创建我们自己的报告,我现在使用Webhook和Google Apps脚本将所有更改发布到BigQuery数据库 这非常有效,但是我发现有1000个加载作业的限制,CRM中的每次更改都会创建至少一个,有时甚至更多的加载作业。此限制不能以任何方式增加。因此,我正在寻找一种方法来批处理条目,并每10分钟加载一次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触发的应用程序脚本中创建它,而我在网上的任何地方都找不到它。有人有什么建议吗 您可以
然而,我不知道如何在由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作业数量的好选择。这听起来正是我需要的。非常感谢。我实现了它,经过一些调整后,它工作得非常好。非常感谢你!这听起来正是我需要的。非常感谢。我实现了它,经过一些调整后,它工作得非常好。非常感谢你!