【问题标题】:Writing and reading to and from BigQuery in one Dataflow job在一项 Dataflow 作业中读写 BigQuery
【发布时间】:2017-05-11 14:37:01
【问题描述】:

在为 Dataflow 构建管道时,我遇到了一个看似简单的问题。我有多个管道从外部源获取数据、转换数据并将其写入多个 BigQuery 表。当这个过程完成后,我想运行一个查询刚刚生成的表的查询。理想情况下,我希望这发生在同一份工作中。

这是要使用 Dataflow 的方式,还是应该在作业之间拆分加载到 BigQuery 和查询表?

如果这在同一个工作中是可能的,那么如何解决这个问题,因为 BigQuerySink 不会生成 PCollection?如果这在同一个工作中是不可能的,有没有办法在另一个工作完成时触发一个工作(即写作工作和查询工作)?

【问题讨论】:

    标签: python google-bigquery google-cloud-dataflow


    【解决方案1】:

    您提到了在单个工作中执行此操作需要发生什么-BigQuerySink 需要生成PCollection。即使它是空的,您也可以将其用作从BigQuery 读取的步骤的输入,以使该步骤等到第一个接收器完成。

    您需要创建自己的 BigQuerySink 版本才能执行此操作。

    如果可能,更简单的选择可能是从您写入 BigQuery 的集合中读取第二步,而不是读取您刚刚放入 BigQuery 的表。例如:

    PCollection<TableRow> rows = ...;
    rows.apply(BigQuery.Write.to(...));
    rows.apply(/* rest of the pipeline */);
    

    如果您想继续处理写入 BigQuery 的元素而不是表格行,您甚至可以更早地执行此操作。

    【讨论】:

    • 感谢您的回答!创建 BiQuerySink 的实现是我要做的,因为第二个答案并不真正适合我的特殊情况。
    • 嗨@Supahsmooth,如果答案可以帮助您解决问题,请考虑投票:stackoverflow.com/help/why-vote。这对那些帮助你的人来说非常有用:)
    • 嗨,Ben,我希望您看一下与数据流和 bigquery this is the link 相关的问题。请看一看。
    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2021-09-03
    相关资源
    最近更新 更多