Google bigquery 在BigQuery客户端库和Beam IO之间共享架构定义

Google bigquery 在BigQuery客户端库和Beam IO之间共享架构定义,google-bigquery,google-cloud-dataflow,apache-beam,apache-beam-io,Google Bigquery,Google Cloud Dataflow,Apache Beam,Apache Beam Io,背景: 我们正在使用Beam 2.0中的cloud data flow runner将数据ETL到BigQuery中的仓库中。我们希望使用BigQuery客户端库(Beta版)在beam管道填充数据之前创建数据仓库的模式。(原因:完全控制表定义,例如分区,易于创建DW实例,即数据集,将ETL逻辑与DW设计分离,以及代码模块化) 问题: Beam中的BigQury IO使用com.google.api.services.bigquery.model下的TableFieldSchema和TableS

背景: 我们正在使用Beam 2.0中的cloud data flow runner将数据ETL到BigQuery中的仓库中。我们希望使用BigQuery客户端库(Beta版)在beam管道填充数据之前创建数据仓库的模式。(原因:完全控制表定义,例如分区,易于创建DW实例,即数据集,将ETL逻辑与DW设计分离,以及代码模块化)

问题: Beam中的BigQury IO使用com.google.api.services.bigquery.model下的TableFieldSchema和TableSchema类来表示bigquery字段和模式,而bigquery客户端库使用com.google.cloud.bigquerypackage下的TableDefinition来表示相同的内容,因此,字段和模式定义不能在一个地方定义,也不能在另一个地方重复使用

有没有办法在一个地方定义模式并重用它

谢谢, 索比


p、 我们正在Beam中使用Java SDK,有人问了一个类似的问题

我写了一些UTIL,并在上面发表了它们,你可能会感兴趣

py从BigQuery下载模式并将其解析为模式(您可能还需要查看Protobuffers以提高管道性能)。如果您将其编译成Java类,请在项目中使用它。您可以使用ProtobufUtils.Java中的
makeTableSchema
函数来获取该类的表模式。如果您决定使用Protobuffers开发管道,那么您可能还需要使用
makeTableRow

我在那里推出的代码是WIP,还没有在生产中使用,但我希望它能让您朝着正确的方向前进