如何在执行相同的Dataflow管道期间向BigQuery写入计算的模式?

时间:2015-06-06 20:58:38

标签: google-cloud-dataflow

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

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

例如,我想将一个CSV文件写入BigQuery并避免两次获取文件(一次读取模式,一次读取数据)。

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

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

1 个答案:

答案 0 :(得分:2)

如果使用BigQuery.Write创建表,则在创建表时需要知道模式。

您提议的在创建BigQuery.Write转换时未指定架构的解决方案可能有效,但您可能会收到错误,因为该表不存在且您没有配置BigQueryIO.Write如果需要,可以创建它。

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

或者你创建一个custom sink 将数据写入BigQuery。您的Sinks可以将数据写入GCS。然后,您的finalize方法可以创建BigQuery load job。您的自定义接收器可以通过查看记录来推断架构,并使用适当的架构创建BigQuery表。