Google bigquery 如何在google bigquery中设置作业依赖关系?
我有一些工作,比如一个是从google云存储桶加载一个文本文件到bigquery表,另一个是计划查询,通过一些转换将数据从一个表复制到另一个表,我希望第二个工作取决于第一个工作的成功,如果有可能的话,我们如何在bigquery中实现这一点 非常感谢Google bigquery 如何在google bigquery中设置作业依赖关系?,google-bigquery,Google Bigquery,我有一些工作,比如一个是从google云存储桶加载一个文本文件到bigquery表,另一个是计划查询,通过一些转换将数据从一个表复制到另一个表,我希望第二个工作取决于第一个工作的成功,如果有可能的话,我们如何在bigquery中实现这一点 非常感谢 致以最诚挚的问候,现在,开发人员需要整合运营链。 可以使用云函数(supports、Node.js、Go、Python)或云运行容器(支持gcloudapi、任何编程语言)完成 基本上你需要 分配工作 获取工作id 轮询作业id 作业完成后触发其他步
致以最诚挚的问候,现在,开发人员需要整合运营链。 可以使用云函数(supports、Node.js、Go、Python)或云运行容器(支持gcloudapi、任何编程语言)完成 基本上你需要
B:函数执行查询(将数据复制到另一个表)
C:获取作业id-触发另一个函数时稍有延迟 I:函数获取作业ID
J:作业的投票准备好了吗?
K:如果还没有准备好,就再推迟一点开火
L:如果准备就绪,则触发下一步-可以是专用函数或参数化函数如果要使用编排工具,尤其是如果要将此任务设置为定期作业。 我们使用,这是一个基于的托管服务,来进行工作流编排,效果非常好。它具有自动重试、监视、警报等功能
您可能想尝试一下。可以使用云功能(CF)或调度程序(airflow)解决您的场景。第一种方法是事件驱动的,立即处理数据。对于调度程序,预期数据可用性延迟 正如前面所说的,一旦您提交了BigQuery作业,您就会得到作业ID,在完成之前需要对其进行检查。然后根据您可以分别处理成功或失败后操作的状态 如果要开发CF,请注意有一些限制,如执行时间(最多9分钟),如果BigQuery作业需要9分钟以上才能完成,则必须解决这些限制。CF的另一个挑战是幂等性,确保如果同一数据文件事件出现多次,处理不应导致数据重复
可选地,您可以考虑使用一些事件驱动的无服务器开放源代码项目,如-谷歌云存储BigQueQualter,加载后转换。 下面是bqtail规则的一个示例
规则.yamlWhen:
Prefix: "/mypath/mysubpath"
Suffix: ".json"
Async: true
Batch:
Window:
DurationInSec: 85
Dest:
Table: bqtail.transactions
Transient:
Dataset: temp
Alias: t
Transform:
charge: (CASE WHEN type_id = 1 THEN t.payment + f.value WHEN type_id = 2 THEN t.payment * (1 + f.value) END)
SideInputs:
- Table: bqtail.fees
Alias: f
'On': t.fee_id = f.id
OnSuccess:
- Action: query
Request:
SQL: SELECT
DATE(timestamp) AS date,
sku_id,
supply_entity_id,
MAX($EventID) AS batch_id,
SUM( payment) payment,
SUM((CASE WHEN type_id = 1 THEN t.payment + f.value WHEN type_id = 2 THEN t.payment * (1 + f.value) END)) charge,
SUM(COALESCE(qty, 1.0)) AS qty
FROM $TempTable t
LEFT JOIN bqtail.fees f ON f.id = t.fee_id
GROUP BY 1, 2, 3
Dest: bqtail.supply_performance
Append: true
OnFailure:
- Action: notify
Request:
Channels:
- "#e2e"
Title: Failed to aggregate data to supply_performance
Message: "$Error"
OnSuccess:
- Action: query
Request:
SQL: SELECT CURRENT_TIMESTAMP() AS timestamp, $EventID AS job_id
Dest: bqtail.supply_performance_batches
Append: true
- Action: delete
基本上,您可以使用云日志来了解GCP中几乎所有类型的操作 BigQuery也不例外。查询作业完成后,您可以在日志查看器中找到相应的日志 下一个问题是如何锚定您想要的确切查询,实现这一点的一种方法是使用带标签的查询(意味着将标签附加到您的查询)[1] 例如,您可以使用下面的
bq
命令发出带有foo:bar
标签的查询
bq query \
--nouse_legacy_sql \
--label foo:bar \
'SELECT COUNT(*) FROM `bigquery-public-data`.samples.shakespeare'
然后,当您转到日志查看器并发出下面的日志过滤器时,您将找到由上述查询生成的日志
resource.type="bigquery_resource"
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.labels.foo="bar"
下一个问题是如何为下一个工作负载基于此日志发出事件。然后,云酒吧/酒吧开始发挥作用
基于日志模式发布事件的两种方法是:
[2]
[3] 您需要立即编写脚本。当BigQuery作业完成时,有一个高投票率的功能请求来获取事件,因此您可以自动化该链。您好,您能否提供一个如何编写脚本的示例?用什么语言?谢谢