Google cloud dataflow 如何将在执行同一数据流管道期间计算的模式写入BigQuery?

Google cloud dataflow 如何将在执行同一数据流管道期间计算的模式写入BigQuery?,google-cloud-dataflow,Google Cloud Dataflow,我的场景与这里讨论的场景不同: 在本例中,目标是相同的(在执行期间读取一个模式,然后使用该模式将一个表写入BigQuery),但我希望在单个管道中完成它 例如,我希望将CSV文件写入BigQuery,并避免两次获取该文件(一次读取模式,一次读取数据) 这可能吗?如果是,最好的方法是什么 我目前的最佳猜测是通过一个侧面输出将模式读入一个PCollection,然后在将数据传递给BigQueryIO.Write之前使用它创建表(使用自定义PTTransform)。如果您使用它创建表,那么在创建表

我的场景与这里讨论的场景不同:

在本例中,目标是相同的(在执行期间读取一个模式,然后使用该模式将一个表写入BigQuery),但我希望在单个管道中完成它

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

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


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

如果您使用它创建表,那么在创建表时需要知道模式

您提出的在创建转换时不指定架构的解决方案可能会起作用,但可能会出现错误,因为该表不存在,并且您没有配置BigQueryIO。如果需要,请编写以创建它

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

或者,您可以创建一个
将数据写入BigQuery。您可以将数据写入地面军事系统。然后,finalize方法可以创建一个BigQuery。您的自定义接收器可以通过查看记录推断模式,并使用适当的模式创建BigQuery表。

您认为直接使用BigQueryTableInserter是否可取?我可能建议创建自定义接收器,而不是使用BigQuery TableInserter。我更新了我的答案来描述这一点。可能是