【问题标题】:Join Nested Structure Table using Dataflow Java code使用 Dataflow Java 代码加入嵌套结构表
【发布时间】:2019-04-02 09:53:41
【问题描述】:

我的目标是连接两个表,其中第二个表是正常的,第一个是嵌套结构表。连接键在第一个表的嵌套结构中可用。在这种情况下,如何使用数据流 java 代码连接这两个表。 WithKeys (org.apache.beam.sdk.transforms.WithKeys) 接受直接列名,它不允许像firstTable.columnname。有人可以帮助解决这个问题。

【问题讨论】:

  • 是否有理由在输出表中有这种嵌套结构?我们可以将输出扁平化为:Cusname、Custno、headerid、cr.date、lineid、item desc 吗?这会让事情变得更容易 tbh ..
  • 我已经回答了同样的问题here,它在带有 apache Beam 的 python 中,可能对你有帮助。在 ParDo addkeysnested 函数中,我从嵌套字段中获取键值。通过使用此代码,您无需取消嵌套字段。所以我们不需要改变表的模式结构。

标签: google-cloud-dataflow apache-beam


【解决方案1】:

如果两个表同样大,请考虑使用here 中描述的 CoGroupByKey 转换。在此操作之前,您必须将您的数据转换为两个由正确键键入的 PCollections。

如果一个表明显小于另一个表,则将较小的 PCollection 作为侧输入提供给 ParDo,而不是较大的 PCollection,如 here 所述。

【讨论】:

  • 如果我们的集合具有 Unnest 类型,CoGroupByKey 将适用于连接两个集合,因为通用键可以通过 WithKey() 从非嵌套集合中读取。但是如果通用键在嵌套集合内,则 CoGbkResult具有空值,因为公共键出现在嵌套结构内部,所以它不匹配并且抛出集合是空的。在这种情况下,您认为我们每次加入集合之前都需要取消嵌套集合,还是我们有其他加入嵌套集合的想法?我附上屏幕截图以供参考。
  • 是的,我相信您必须从元素中取消嵌套键并使用正确的键定义 PCollections 的 KV。
  • 感谢您的回复。你能举个java的例子吗?
  • 我只是按照下面的 stackoverflow 链接加入集合。 WithKeys 方法不能接受基于嵌套列的分组集合,如“firstTable.columnname”。您能否提供帮助,如何在 WithKeys 函数中加入嵌套列。 stackoverflow.com/questions/50175971/…
  • 你想试试 BeamSQL 吗? BeamSQL 允许在嵌套类型的内部字段上进行 JOIN。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多