如何使用 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