Google cloud dataflow 使用数据流Java代码连接嵌套结构表

Google cloud dataflow 使用数据流Java代码连接嵌套结构表,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我的目标是连接两个表,其中第二个表是普通表,第一个表是嵌套结构表。联接键在第一个表的嵌套结构中可用。在本例中,介绍如何使用数据流java代码连接这两个表。WithKeys(org.apache.beam.sdk.transforms.WithKeys)接受直接列名,不允许像firstTable.columnname。请找个人来帮我解决这个案子。 如果两个表同样大,请考虑使用COCONGPYBYKEY转换。在此操作之前,您必须将数据转换为两个由正确键键入的PCollection 如果一个表比另一

我的目标是连接两个表,其中第二个表是普通表,第一个表是嵌套结构表。联接键在第一个表的嵌套结构中可用。在本例中,介绍如何使用数据流java代码连接这两个表。WithKeys(org.apache.beam.sdk.transforms.WithKeys)接受直接列名,不允许像
firstTable.columnname
。请找个人来帮我解决这个案子。

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


如果一个表比另一个表小得多,则将较小的PCollection作为边输入,在较大的PCollection上输入ParDo(如上所述)可能是一个更好的选择。

如果我们的集合具有Unnest类型,CoGroupByKey将用于连接两个集合,因为WithKey()可以从非NEST集合读取公共键。但是,如果公用键位于嵌套集合内部,则CoGbkResult的值为空,因为公用键位于嵌套结构内部,因此它不匹配,并且抛出的集合为空。在这种情况下,您认为我们是否需要在每次加入集合之前对嵌套集合进行取消测试,或者我们对加入嵌套集合是否有其他想法?我附上了屏幕截图供参考。是,我相信您将不得不从元素中取消最新的键,并使用正确的键定义一组PCollection。谢谢您的回复。你能用java做个例子吗?我只是按照下面的stackoverflow链接加入这个集合。WithKeys方法无法接受嵌套的基于列的集合分组,如“firstTable.columnname”。您是否可以帮助,如何在WithKeys函数中赋予嵌套列联接。您想试试BeamSQL吗?BeamSQL允许对嵌套类型的内部字段进行联接。是否有理由在输出表中使用此嵌套结构?我们可以将输出展平为:Cusname、Custno、headerid、cr.date、lineid、item desc吗?我已经回答了同样的问题,在python和ApacheBeam中,这个问题可能会对您有所帮助。在ParDo addkeysnested函数中,我从嵌套字段获取键值。通过使用此代码,您不需要取消字段的测试。所以我们不需要更改表的模式结构。