如何限制 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 发出GETPOST 请求,就会调用函数对应的方法。

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

【讨论】:

以上是关于如何限制 Google Bigquery 中的作业数量 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中的服务限制

如何使用服务帐户确定 Google BigQuery 作业的状态?

如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?

Google play 到 BigQuery 转移作业中的错误

使用 Google.Cloud.BigQuery.V2 的 BigQuery 加载作业的幂等性

无法将表从 BigQuery 导出到 Google Cloud Storage