我想做的是读取一个现有表并生成一个新表,该表具有与原始表相同的架构以及一些额外的列(从原始表的某些列计算得出)。可以在不通知我的情况下增加原始表架构(我在数据流作业中使用的字段不会更改),因此我希望始终读取架构而不是定义一些包含架构的自定义类。
在 Dataflow SDK 1.x 中,我可以通过以下方式获取 TableSchema
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 已成为包私有(private)类。
我阅读了 Get TableSchema from BigQuery result PCollection<TableRow> 中的回复但我不想对 BigQuery 进行单独的查询。由于该响应现在已经快 2 年了,SO 社区是否还有其他想法或想法?
最佳答案
由于 BigQueryI/O 现在的设置方式。它需要在管道开始运行之前查询表模式。这是一个很好的功能想法,但在单个管道中不可行。在您链接的示例中,表架构是运行管道之前的查询。
如果添加了新列,那么不幸的是必须重新启动新管道。
关于java - BigQueryIO 读取获取 TableSchema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50242240/