BigQueryIO 读取获取 TableSchema
Posted
技术标签:
【中文标题】BigQueryIO 读取获取 TableSchema【英文标题】:BigQueryIO read get TableSchema 【发布时间】:2018-05-08 21:04:13 【问题描述】:我想要做的是读取现有表并生成一个新表,该表与原始表具有相同的架构加上一些额外的列(从原始表的某些列计算)。原始表架构可以在不通知我的情况下增加(我在数据流作业中使用的字段不会改变),所以我想始终阅读架构而不是定义一些包含架构的自定义类。
在 Dataflow SDK 1.x 中,我可以通过
final DataflowPipelineOptions options = ...
final String projectId = ...
final String dataset = ...
final String table = ...
final TableSchema schema = new BigQueryServicesImpl()
.getDatasetService(options)
.getTable(projectId, dataset, table)
.getSchema();
对于 Dataflow SDK 2.x,BigQueryServicesImpl 已成为包私有类。
我阅读了Get TableSchema from BigQuery result PCollection<TableRow> 中的回复,但我不希望单独对 BigQuery 进行查询。由于该响应现在已经快 2 年了,SO 社区是否还有其他想法或想法?
【问题讨论】:
【参考方案1】:由于现在如何设置 BigQueryI/O。它需要在管道开始运行之前查询表模式。这是一个很好的功能想法,但在单个管道中不可行。在您链接的示例中,表架构是运行管道之前的查询。
如果添加了新列,那么很遗憾必须重新启动新的管道。
【讨论】:
以上是关于BigQueryIO 读取获取 TableSchema的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Apache Beam BigQueryIO 每次运行都使用相同的 JobId?
BigQueryIO.write DynamicDestination withCreateDisposition - 集群字段