Flink:在 DataStream API 的批处理模式下左连接等效于 Dataset API?
Flink: Left join equivalent of Dataset API in Batch mode of DataStream API?
Flink 文档中提到 DataSet API will be deprecated in future. So I am looking into prototyping this Dataset API to DataStream API in Batch Mode(我相信现在处于 Beta 阶段)迁移。
我们的代码库中有这个(类似的)代码,它在数据集上使用 leftOuterJoin。
DataSet<SomeOutType> joined_out = datasetA.
leftOuterJoin(datasetB, JoinOperatorBase.JoinHint.BROADCAST_HASH_SECOND)
.where((left) -> coalesce(left.getId(), -9999999L))
.equalTo((right) -> right.company_id).with((JoinFunction<SomeTypeA, SomeTypeB, SomeOutType>) (left, right) -> {
SomeOutType recNew = SomeOutType.newBuilder().build();
recNew.setCustomerId(left.getCustomerId());
recNew.setCustomerName((right != null && right.cust_name != null) ? right.cust_name : "Blank");
....
....
....
return recNew;
});
问题是我无法在数据流 API 中找到等效的 Left Join 或 Left Outer Join文档 - Join.
由于他们正在考虑完全弃用 DataSet API,我假设现在应该有一种方法可以在 DataStream API 中执行此 Left Outer Join。
有人可以指导我以正确的方式做到这一点吗?
TIA
数据集上的关系操作(例如,连接)已被弃用,取而代之的是使用 Table/SQL API 提供的关系操作,它与 DataStream [=22= 完全互操作].
参见https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/tableapi/#joins and https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/sql/queries/joins/。
您可以使用 Table 连接器并直接在它们生成的表上执行连接,或者在执行连接之前将数据流转换为表。如果需要进一步处理,您可以从表转换回数据流。考虑到 table/stream 的双重性,这些“转换”实际上并不需要任何成本。参见 https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/data_stream_api/。
FWIW,Flink 1.14 刚刚发布,其中包含许多与此主题相关的改进。特别是,只有在 1.14(及更高版本)中,您才能在批处理模式下将 Table API 与 DataStream API 结合使用。
Flink 文档中提到 DataSet API will be deprecated in future. So I am looking into prototyping this Dataset API to DataStream API in Batch Mode(我相信现在处于 Beta 阶段)迁移。
我们的代码库中有这个(类似的)代码,它在数据集上使用 leftOuterJoin。
DataSet<SomeOutType> joined_out = datasetA.
leftOuterJoin(datasetB, JoinOperatorBase.JoinHint.BROADCAST_HASH_SECOND)
.where((left) -> coalesce(left.getId(), -9999999L))
.equalTo((right) -> right.company_id).with((JoinFunction<SomeTypeA, SomeTypeB, SomeOutType>) (left, right) -> {
SomeOutType recNew = SomeOutType.newBuilder().build();
recNew.setCustomerId(left.getCustomerId());
recNew.setCustomerName((right != null && right.cust_name != null) ? right.cust_name : "Blank");
....
....
....
return recNew;
});
问题是我无法在数据流 API 中找到等效的 Left Join 或 Left Outer Join文档 - Join.
由于他们正在考虑完全弃用 DataSet API,我假设现在应该有一种方法可以在 DataStream API 中执行此 Left Outer Join。
有人可以指导我以正确的方式做到这一点吗? TIA
数据集上的关系操作(例如,连接)已被弃用,取而代之的是使用 Table/SQL API 提供的关系操作,它与 DataStream [=22= 完全互操作].
参见https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/tableapi/#joins and https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/sql/queries/joins/。
您可以使用 Table 连接器并直接在它们生成的表上执行连接,或者在执行连接之前将数据流转换为表。如果需要进一步处理,您可以从表转换回数据流。考虑到 table/stream 的双重性,这些“转换”实际上并不需要任何成本。参见 https://ci.apache.org/projects/flink/flink-docs-stable/docs/dev/table/data_stream_api/。
FWIW,Flink 1.14 刚刚发布,其中包含许多与此主题相关的改进。特别是,只有在 1.14(及更高版本)中,您才能在批处理模式下将 Table API 与 DataStream API 结合使用。