首页 文章

在BigQuery Client Libraries和Beam IO之间共享模式定义

提问于
浏览
3

背景:我们正在使用Beam 2.0中的 Cloud 数据流运行器将我们的数据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来获取相同的内容,因此,字段和模式定义不能在一个地方定义,而是在另一个地方重新使用 .

有没有办法在一个地方定义架构并重新使用它?

谢谢,索比

附:我们在Beam中使用Java SDK

1 回答

  • 1

    问了一个类似的问题here .

    我写了一些utils并在GitHub上发布,你可能会感兴趣 .

    ParseToProtoBuffer.py 从BigQuery下载模式并将其解析为Protobuf模式(您可能希望查看Protobuffers以提高管道性能) . 如果将其编译为Java类,则在项目中使用它可以使用 ProtobufUtils.java 中的 makeTableSchema 函数来获取该类的TableSchema . 如果您决定使用Protobuffers开发管道,您可能也想使用 makeTableRow .

    我推到那里的代码是WIP,还没有用于 生产环境 或其他任何东西,但我希望它能为你提供正确的方向 .

相关问题