BigQueryIO读取得到TableSchema

时间:2018-05-08 21:04:14

标签: java google-bigquery google-cloud-dataflow

我想要做的是读取一个现有的表并生成一个新表,该表具有与原始表相同的模式以及一些额外的列(从原始表的某些列计算)。可以在不通知我的情况下增加原始表模式(我在数据流作业中使用的字段不会更改),因此我希望始终读取模式,而不是定义包含模式的一些自定义类。

在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已成为包私有类。

我在Get TableSchema from BigQuery result PCollection<TableRow>中阅读了回复,但我不想对BigQuery单独进行查询。由于该响应现在已有近2年的历史,SO社区还有其他想法或想法吗?

1 个答案:

答案 0 :(得分:1)

由于现在如何设置BigQueryI / O.它需要在pipleine开始运行之前查询表模式。这是一个很好的功能概念,但在单个管道中不可行。在示例中,您在运行管道之前将表模式链接为查询。

如果添加了新列,那么不幸的是必须重新启动新管道。