PCollection<Entity> 到 PCollection<TableRows>
Posted
技术标签:
【中文标题】PCollection<Entity> 到 PCollection<TableRows>【英文标题】:PCollection<Entity> to PCollection<TableRows> 【发布时间】:2017-06-23 09:27:13 【问题描述】:我正在尝试使用 Dataflow 在 Datastore 中查询我的所有类型,并将它们写入 BigQuery 中的日期分段分区。阅读部分很容易使用DatastoreIO.read()
并给我一个PCollection<Entity>
。
BigQuery 需要 PCollection<TableRow>
,我可以隐式地从一个转换为另一个吗?我的数据涉及一些不可预测的字段(例如嵌入属性中的包数据),因此我无法显式转换所有字段。
另外,如果与此事相关,我想使用SerializableFunction
为每个数据存储实体动态设置目标表(即 YYYYMMDD_kind)
【问题讨论】:
【参考方案1】:您必须自己将PCollection<Entity>
转换为PCollection<TableRow>
。 BigQueryIO.write()
的 API 需要 TableRow
。要转换它们,您需要在 PCollection<Entity>
的顶部应用 ParDo
。
附带说明,您还可以不使用 Dataflow 将 Datastore 备份直接加载到 BigQuery。见here。
【讨论】:
ParDo 可以自动检测列类型吗? 什么意思?您需要指定I
(输入)和O
(输出)的类型-在您的情况下分别为Entity
和TableRow
。
我的意思是我必须手动分配每个属性吗?例如 row.id = entity.id
是的,据我所知这是唯一的方法。以上是关于PCollection<Entity> 到 PCollection<TableRows>的主要内容,如果未能解决你的问题,请参考以下文章
如何从光束中的 PCollection<string> 获取所有文件元数据
是否可以从 PubSub 读取消息并将其数据分隔在 PCollection<String> 的不同元素中?如果是这样,怎么做?
如何从谷歌数据流管道中的多个输入 PCollection 生成一个输出 PCollection?