Google bigquery 如何在google bigquery中设置作业依赖关系?

Google bigquery 如何在google bigquery中设置作业依赖关系?,google-bigquery,Google Bigquery,我有一些工作,比如一个是从google云存储桶加载一个文本文件到bigquery表,另一个是计划查询,通过一些转换将数据从一个表复制到另一个表,我希望第二个工作取决于第一个工作的成功,如果有可能的话,我们如何在bigquery中实现这一点 非常感谢 致以最诚挚的问候,现在,开发人员需要整合运营链。 可以使用云函数(supports、Node.js、Go、Python)或云运行容器(支持gcloudapi、任何编程语言)完成 基本上你需要 分配工作 获取工作id 轮询作业id 作业完成后触发其他步

我有一些工作,比如一个是从google云存储桶加载一个文本文件到bigquery表,另一个是计划查询,通过一些转换将数据从一个表复制到另一个表,我希望第二个工作取决于第一个工作的成功,如果有可能的话,我们如何在bigquery中实现这一点

非常感谢


致以最诚挚的问候,

现在,开发人员需要整合运营链。 可以使用云函数(supports、Node.js、Go、Python)或云运行容器(支持gcloudapi、任何编程语言)完成

基本上你需要

  • 分配工作
  • 获取工作id
  • 轮询作业id
  • 作业完成后触发其他步骤
  • 如果使用云函数

  • 将文件放入专用的GCS存储桶中
  • 设置一个监控该存储桶的GCF,当上传一个新文件时,它将执行一个导入GCS的功能-等待操作结束
  • 在GCF结束时,您可以触发下一步的其他功能
  • 云功能的另一个用例:

    答:触发器启动GCF
    B:函数执行查询(将数据复制到另一个表)
    C:获取作业id-触发另一个函数时稍有延迟

    I:函数获取作业ID
    J:作业的投票准备好了吗?
    K:如果还没有准备好,就再推迟一点开火

    L:如果准备就绪,则触发下一步-可以是专用函数或参数化函数

    如果要使用编排工具,尤其是如果要将此任务设置为定期作业。 我们使用,这是一个基于的托管服务,来进行工作流编排,效果非常好。它具有自动重试、监视、警报等功能


    您可能想尝试一下。

    可以使用云功能(CF)或调度程序(airflow)解决您的场景。第一种方法是事件驱动的,立即处理数据。对于调度程序,预期数据可用性延迟

    正如前面所说的,一旦您提交了BigQuery作业,您就会得到作业ID,在完成之前需要对其进行检查。然后根据您可以分别处理成功或失败后操作的状态

    如果要开发CF,请注意有一些限制,如执行时间(最多9分钟),如果BigQuery作业需要9分钟以上才能完成,则必须解决这些限制。CF的另一个挑战是幂等性,确保如果同一数据文件事件出现多次,处理不应导致数据重复

    可选地,您可以考虑使用一些事件驱动的无服务器开放源代码项目,如-谷歌云存储BigQueQualter,加载后转换。 下面是bqtail规则的一个示例

    规则.yaml

    When:
      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"
    
    下一个问题是如何为下一个工作负载基于此日志发出事件。然后,云酒吧/酒吧开始发挥作用

    基于日志模式发布事件的两种方法是:

  • 日志路由器:将发布/子主题设置为目标[1]
  • 基于日志的度量:创建通知通道为发布/订阅的警报策略[2]
  • 因此,下一个工作负载可以订阅发布/订阅主题,并在上一个查询完成时触发

    希望这有帮助~

    [1]
    [2]

    [3]

    您需要立即编写脚本。当BigQuery作业完成时,有一个高投票率的功能请求来获取事件,因此您可以自动化该链。您好,您能否提供一个如何编写脚本的示例?用什么语言?谢谢