如何使用 Dataflow Python SDK 读取 BigQuery 嵌套表

Posted

技术标签:

【中文标题】如何使用 Dataflow Python SDK 读取 BigQuery 嵌套表【英文标题】:How to read BigQuery nested tables using Dataflow Python SDK 【发布时间】:2016-11-29 10:40:30 【问题描述】:

如何使用 Apache Beam Python SDK 读取嵌套结构?

lines = p | io.Read(io.BigQuerySource('project:test.beam_in'))

结果

"reason": "invalidQuery",
"message": "Cannot output multiple independently repeated fields at the same time. Found classification_item_distribution and category_cat_name"

是否可以读取嵌套结构?

【问题讨论】:

【参考方案1】:

这是 BigQuery 的一个属性。执行此类查询的两种方法是禁用结果展平(通过 BigQuery)或显式展平查询中的字段。

对于当前的 Python SDK,只有后者可用 - 有关在何处以及如何调用 FLATTEN 函数的指南,请参阅“Flattening Google Analytics data (with repeated fields) not working anymore”。

如果您愿意订阅更新或讨论,禁用扁平化的功能将归档为BEAM-877。

【讨论】:

谢谢。有趣的是,Java SDK 允许嵌套结构而无需任何额外配置。【参考方案2】:

您现在可以通过在创建源代码时添加 flatten_results=False 直接在 Beam Python 中读取嵌套结果:

lines = p | io.Read(io.BigQuerySource('project:test.beam_in', flatten_results=False))

查看来源here。

【讨论】:

以上是关于如何使用 Dataflow Python SDK 读取 BigQuery 嵌套表的主要内容,如果未能解决你的问题,请参考以下文章

如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员

从 BigQuery 缓慢更改查找缓存 - Dataflow Python 流式 SDK

通过 python SDK 创建 GCP Dataflow 模板问题

数据流:将 Top 模块与 Python SDK 一起使用:单元素 PCollection

如何使用 python 将字典写入 Dataflow 中的 Bigquery

无法在Dataflow SDK 2.1.0中创建可执行Jar