有没有办法在 Google Dataflow 中创建具有数据相关架构的 Bigquery 表?

Posted

技术标签:

【中文标题】有没有办法在 Google Dataflow 中创建具有数据相关架构的 Bigquery 表?【英文标题】:Is there a way to create a Bigquery table with data-dependent schema in Google Dataflow? 【发布时间】:2015-08-05 00:32:39 【问题描述】:

我正在尝试创建一个 Bigquery 表作为数据流的一部分。这些示例显示将架构作为 TableFieldSchema 实例传递。但是,我拥有的表架构是数据相关的,因此最多可以创建为 PCollection 中的一个元素。例如:

PCollection<TableRow> quotes = ...;

  quotes.apply(BigQueryIO.Write
      .named("Write")
      .to("my-project:output.output_table")
      .withSchema(schema)
      .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE)
   .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));

这里 schema 需要是 TableFieldSchema,但我将它作为 PCollection

【问题讨论】:

Writing different values to different BigQuery tables in Apache Beam的可能重复 【参考方案1】:

很遗憾,我们没有内置 API 来写入具有动态架构的 BigQuery 表。也就是说,我们正在努力提高该领域的灵活性。目前没有估算值,但我们希望尽快得到。

同时,针对其他 *** 问题提出了一些解决方法:

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

【讨论】:

很抱歉在这里成为菜鸟。所以,我可以编写一个自定义源,但我仍然会得到一个 PCollection,而不是一个 tablefieldSchema。我想我正在努力如何编写这样的函数:public static TableFieldSchema convFn(PCollection&lt;TableFieldSchema&gt;) schColl) 我想我正在寻找类似于 Apache Spark 的rdd.collect() 自定义源/接收器还不支持侧输入,因此可能很难同时传递 PCollection 和 PCollection。也就是说,如果模式可以在自定义接收器中计算,而不是传递给它,那可能是可行的。

以上是关于有没有办法在 Google Dataflow 中创建具有数据相关架构的 Bigquery 表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 google-dataflow 中读取 cassandra

我可以在 BigQuery 和 Google Cloud Dataflow 中使用相同的编程语言吗?

有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?

TableRow.get上的Google Cloud Dataflow,BigQueryIO和NullPointerException

在 Dataflow 中创建作业时出错(当前用户不能充当服务帐户)

无法在 DataFlow Apache Beam 中创建通用日期转换类