如何将在同一数据流管道执行期间计算的架构写入 BigQuery?

How do I write to BigQuery a schema computed during execution of the same Dataflow pipeline?

我的场景是这里讨论的场景的变体: How do I write to BigQuery using a schema computed during Dataflow execution?

在这种情况下,目标是相同的(在执行期间读取模式,然后将具有该模式的 table 写入 BigQuery),但我想在单个管道中完成它。

例如,我想将 CSV 文件写入 BigQuery 并避免提取文件两次(一次读取架构,一次读取数据)。

这可能吗?如果是这样,最好的方法是什么?


我目前最好的猜测是通过侧面输出将架构读入 PCollection,然后在将数据传递到 BigQueryIO.Write 之前使用它创建 table(使用自定义 PTransform)。

如果您使用 BigQuery.Write 创建 table,那么在创建 table 时需要知道架构。

您提出的在创建 BigQuery.Write 转换时不指定模式的解决方案可能有效,但您可能会遇到错误,因为 table 不存在并且您没有配置 BigQueryIO.Write 在需要时创建它。

您可能需要考虑在主程序中读取足够的 CSV 文件以确定 运行 管道之前的模式。这将避免在运行时确定模式的复杂性。您仍然会承担额外阅读的费用,但希望这是最小的。

或者您创建一个 custom sink 将数据写入 BigQuery。你的Sinks could write the data to GCS. Your finalize method could then create a BigQuery load job。您的自定义接收器可以通过查看记录来推断架构,并使用适当的架构创建 BigQuery table。