51、Flink 的 旁路输出 代码示例

1、创建标签

OutputTag<String> outputTag = new OutputTag<String>("sideout") {};

2、获取侧流输出结果

DataStream.getSideOutput(outputTag);

3、完整代码示例

package com.xu.flink.datastream.day12;

import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.ProcessFunction;
import org.apache.flink.util.Collector;
import org.apache.flink.util.OutputTag;

public class _03_SideOutPut {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        OutputTag<String> outputTag = new OutputTag<String>("sideout") {};

        DataStreamSource<Integer> source = env.fromData(1, 2, 3, 4);
        SingleOutputStreamOperator<String> process = source.process(new ProcessFunction<Integer, String>() {
            @Override
            public void processElement(Integer value, ProcessFunction<Integer, String>.Context ctx, Collector<String> out) throws Exception {
                if (value % 2 == 0) {
                    out.collect("main=>" + value);
                } else {
                    ctx.output(outputTag, "side=>" + value);
                }
            }
        });

        /**
         * 主流=>:6> main=>2
         * 主流=>:8> main=>4
         * 侧流=>:7> side=>3
         * 侧流=>:5> side=>1
         */
        process.print("主流=>");
        process.getSideOutput(outputTag).print("侧流=>");

        env.execute();
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于 Flink SQL API 的单元测试代码示例,该代码测试了一个简单的 Flink SQL 查询: ```java import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.Table; import org.apache.flink.table.api.bridge.java.BatchTableEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.types.Row; import org.junit.Test; import static org.junit.Assert.assertEquals; public class FlinkSqlUnitTest { @Test public void testFlinkSql() throws Exception { // 创建执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env); // 创建测试数据 env.setParallelism(1); env.fromElements(Tuple2.of("Alice", 23), Tuple2.of("Bob", 35), Tuple2.of("Charlie", 40)) .toTable(tEnv, "name, age"); // 执行测试任务 Table result = tEnv.sqlQuery("SELECT * FROM name_age WHERE age > 30"); // 验证测试结果 tEnv.toRetractStream(result, Row.class) .returns(Types.TUPLE(Types.BOOLEAN, Types.ROW_NAMED(new String[]{"name", "age"}, Types.STRING, Types.INT))) .map(tuple -> tuple.f1) .returns(Types.ROW_NAMED(new String[]{"name", "age"}, Types.STRING, Types.INT)) .addSink(new StreamSinkFunction<>()); // 执行测试任务 env.execute(); } } ``` 该代码使用 Flink 的 StreamTableEnvironment,创建了一个简单的表,然后执行了一个 Flink SQL 查询,查询年龄大于 30 的人的信息。最后,使用 Flink 的 TestingUtils 工具类来验证测试结果是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫爱吃小鱼粮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值