Apache flink 弗林克:数据流上没有外部连接?

Apache flink 弗林克:数据流上没有外部连接?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我惊讶地发现,在Flink()中,DataStream没有外部连接 对于数据集,除了常规的联接(),您还有所有选项:leftOuterJoin、righouterjoin和fullOuterJoin。但是对于DataStream,您只需要简单的旧连接 这是因为DataStream的一些基本属性使得不可能有外部联接吗?或者我们可以期待在未来(接近?)发生这种情况 对于我正在处理的问题,我真的可以在DataStream上使用外部联接。。。有没有办法实现类似的行为?您可以使用DataStream.co

我惊讶地发现,在Flink()中,
DataStream
没有外部连接

对于
数据集
,除了常规的
联接
(),您还有所有选项:
leftOuterJoin
righouterjoin
fullOuterJoin
。但是对于
DataStream
,您只需要简单的旧连接

这是因为
DataStream
的一些基本属性使得不可能有外部联接吗?或者我们可以期待在未来(接近?)发生这种情况


对于我正在处理的问题,我真的可以在
DataStream
上使用外部联接。。。有没有办法实现类似的行为?

您可以使用
DataStream.coGroup()转换实现外部联接。
CoGroupFunction
接收两个迭代器(每个输入一个迭代器),为某个键的所有元素提供服务,如果找不到匹配元素,则迭代器可能为空。这允许实现外部连接功能


在Flink的下一个版本中,对外部联接的一流支持可能会添加到DataStream API中。我目前不知道有任何这样的努力。但是,在中创建问题可能会有所帮助。

您可以使用
DataStream.coGroup()转换实现外部联接。
CoGroupFunction
接收两个迭代器(每个输入一个迭代器),为某个键的所有元素提供服务,如果找不到匹配元素,则迭代器可能为空。这允许实现外部连接功能


在Flink的下一个版本中,对外部联接的一流支持可能会添加到DataStream API中。我目前不知道有任何这样的努力。但是,在中创建问题可能会有所帮助。

一种方法是使用以下api从流->表->流开始:

下面是一个java示例:

    DataStream<String> data = env.readTextFile( ... );
    DataStream<String> data2Merge = env.readTextFile( ... );

    ...

    tableEnv.registerDataStream("myDataLeft", data, "left_column1, left_column2");
    tableEnv.registerDataStream("myDataRight", data2Merge, "right_column1, right_column2");

    String queryLeft = "SELECT left_column1, left_column2 FROM myDataLeft";
    String queryRight = "SELECT right_column1, right_column2 FROM myDataRight";

    Table tableLeft = tableEnv.sqlQuery(queryLeft);
    Table tableRight = tableEnv.sqlQuery(queryRight);

    Table fullOuterResult = tableLeft.fullOuterJoin(tableRight, "left_column1 == right_column1").select("left_column1, left_column2, right_column2");
    DataStream<Tuple2<Boolean, Row>> retractStream = tableEnv.toRetractStream(fullOuterResult, Row.class);
DataStream data=env.readTextFile(…);
DataStream data2Merge=env.readTextFile(…);
...
tableEnv.registerDataStream(“myDataLeft”,数据,“left_column1,left_column2”);
tableEnv.registerDataStream(“myDataRight”,data2Merge,“right_column1,right_column2”);
String queryLeft=“从myDataLeft中选择left_column1,left_column2”;
String queryRight=“从myDataRight中选择右列1,右列2”;
Table tableLeft=tableEnv.sqlQuery(queryLeft);
tableRight=tableEnv.sqlQuery(queryRight);
Table fullOuterResult=tableleleft.fullOuterJoin(tableRight,“left_column1==right_column1”)。选择(“left_column1,left_column2,right_column2”);
DataStream retractStream=tableEnv.toRetractStream(fullOuterResult,Row.class);

一种方法是使用以下api从流->表->流开始:

下面是一个java示例:

    DataStream<String> data = env.readTextFile( ... );
    DataStream<String> data2Merge = env.readTextFile( ... );

    ...

    tableEnv.registerDataStream("myDataLeft", data, "left_column1, left_column2");
    tableEnv.registerDataStream("myDataRight", data2Merge, "right_column1, right_column2");

    String queryLeft = "SELECT left_column1, left_column2 FROM myDataLeft";
    String queryRight = "SELECT right_column1, right_column2 FROM myDataRight";

    Table tableLeft = tableEnv.sqlQuery(queryLeft);
    Table tableRight = tableEnv.sqlQuery(queryRight);

    Table fullOuterResult = tableLeft.fullOuterJoin(tableRight, "left_column1 == right_column1").select("left_column1, left_column2, right_column2");
    DataStream<Tuple2<Boolean, Row>> retractStream = tableEnv.toRetractStream(fullOuterResult, Row.class);
DataStream data=env.readTextFile(…);
DataStream data2Merge=env.readTextFile(…);
...
tableEnv.registerDataStream(“myDataLeft”,数据,“left_column1,left_column2”);
tableEnv.registerDataStream(“myDataRight”,data2Merge,“right_column1,right_column2”);
String queryLeft=“从myDataLeft中选择left_column1,left_column2”;
String queryRight=“从myDataRight中选择右列1,右列2”;
Table tableLeft=tableEnv.sqlQuery(queryLeft);
tableRight=tableEnv.sqlQuery(queryRight);
Table fullOuterResult=tableleleft.fullOuterJoin(tableRight,“left_column1==right_column1”)。选择(“left_column1,left_column2,right_column2”);
DataStream retractStream=tableEnv.toRetractStream(fullOuterResult,Row.class);

好的,我已经创建了问题,如果有帮助的话:。我将尝试
coGroup
:)Hi@Fabian,是否可以使用
connect
实现此功能?好的,我已经创建了问题,如果有帮助的话:。我将尝试使用
coGroup
:)Hi@Fabian,是否可以使用
connect
实现此功能?如何处理该流?它将包含多个带有true/false的行。您如何处理该流?它将包含多个带有true/false的行