背景: 我们正在使用Beam 2.0中的云数据流运行器将我们的数据ETL存入我们的BigQuery仓库。我们希望使用BigQuery客户端库(Beta)在光束管道填充数据之前创建数据仓库的模式。 (理由:完全控制表定义,例如分区,创建DW实例的简易性,即数据集,ETL逻辑与DW设计的分离以及代码模块化)
问题: Beam中的BigQury IO使用com.google.api.services.bigquery.model下的TableFieldSchema和TableSchema类来表示BigQuery字段和模式,而BigQuery Client Libraries使用com.google.cloud.bigquerypackage下的TableDefinition来表示相同的内容,因此字段和模式定义不能在一个地方定义,而是在另一个地方重复使用。
有没有办法在一个地方定义架构并重新使用它?
谢谢, 瑟比
P.S。我们在Beam中使用Java SDK
答案 0 :(得分:1)
提出了类似的问题here。
我写了一些实用工具,并在GitHub上发布了您可能感兴趣的内容。
ParseToProtoBuffer.py 从BigQuery下载架构并将其解析为Protobuf架构(您可能希望查看Protobuffers以提高管道性能)。如果将其编译为Java类,请在项目中使用它,您可以使用 ProtobufUtils.java 中的makeTableSchema
函数来获取该类的TableSchema。如果您决定使用Protobuffers开发管道,则可能还需要使用makeTableRow
。
我推到那里的代码是WIP,还没有用于生产或其他任何东西,但我希望它能为你提供正确的方向。