【问题标题】:PCollection<Entity> to PCollection<TableRows>PCollection<Entity> 到 PCollection<TableRows>
【发布时间】:2017-06-23 09:27:13
【问题描述】:

我正在尝试使用 Dataflow 在 Datastore 中查询我的所有类型,并将它们写入 BigQuery 中的日期分段分区。阅读部分很容易使用DatastoreIO.read() 并给我一个PCollection&lt;Entity&gt;。

BigQuery 需要 PCollection&lt;TableRow&gt;,我可以隐式地从一个转换为另一个吗?我的数据涉及一些不可预测的字段(例如嵌入属性中的包数据),因此我无法显式转换所有字段。

另外,如果与此事相关,我想使用SerializableFunction 为每个数据存储实体动态设置目标表(即 YYYYMMDD_kind)

【问题讨论】:

    标签: google-app-engine google-bigquery google-cloud-dataflow


    【解决方案1】:

    您必须自己将PCollection&lt;Entity&gt; 转换为PCollection&lt;TableRow&gt;。 BigQueryIO.write() 的 API 需要 TableRow。要转换它们,您需要在 PCollection&lt;Entity&gt; 的顶部应用 ParDo。

    附带说明,您还可以不使用 Dataflow 将 Datastore 备份直接加载到 BigQuery。见here。

    【讨论】:

    • ParDo 可以自动检测列类型吗?
    • 什么意思?您需要指定I(输入)和O(输出)的类型-在您的情况下分别为Entity和TableRow。
    • 我的意思是我必须手动分配每个属性吗?例如 row.id = entity.id
    • 是的,据我所知这是唯一的方法。
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    相关资源
    最近更新 更多