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