如何限制 Google Bigquery 中的作业数量 [关闭]
Posted
技术标签:
【中文标题】如何限制 Google Bigquery 中的作业数量 [关闭]【英文标题】:How do I limit the number of jobs in Google Bigquery [closed] 【发布时间】:2018-03-13 10:01:01 【问题描述】:为了更好地了解我们的 CRM (ActiveCampaign) 中发生的情况并创建我们自己的报告,我现在使用 webhook 和 Google Apps 脚本将所有更改发布到 BigQuery 数据库。
这很好用,但是我发现有 1000 个加载作业的限制,并且 CRM 中的每次更改都会创建至少一个,有时甚至更多的加载作业。此限制不能以任何方式增加。所以我正在寻找一种方法来批处理条目并每 10 分钟加载一次。
但是,我不知道如何在由 webhook 触发的 Apps 脚本中创建它,而且我在网上的任何地方都找不到它。有人有建议吗?
【问题讨论】:
我认为 App Engine 中的 Cron 作业、Apache Airflow、Oozie 和 Web 服务(如 here 所述)是限制 BigQuery 作业数量的一些不错的选择。 【参考方案1】:您可以通过在初始 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();
【讨论】:
这听起来正是我所需要的。谢谢! 我实现了它,经过一些调整后它完美运行。非常感谢!【参考方案2】:您可以使用 Google Apps 脚本创建一个网络服务(网络应用程序),该服务将接收请求,然后执行您的批处理操作。
只需在脚本中处理doGet()
或doPost()
方法,然后当脚本发布时,只要对脚本的URL 发出GET
或POST
请求,就会调用函数对应的方法。
请参阅网络应用指南:https://developers.google.com/apps-script/guides/web
【讨论】:
以上是关于如何限制 Google Bigquery 中的作业数量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用服务帐户确定 Google BigQuery 作业的状态?
如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?
Google play 到 BigQuery 转移作业中的错误