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的主要内容,如果未能解决你的问题,请参考以下文章

BigQueryIO.write() 使用 SQL 函数

BigQueryIO - 为每个项目写入两个表

为啥 Apache Beam BigQueryIO 每次运行都使用相同的 JobId?

BigQueryIO.write DynamicDestination withCreateDisposition - 集群字段

表行中的 BigqueryIO 架构

Apache Beam、BigQueryIO、writeTableRows() 与 write()