【Flink】流执行引擎中的Table API与SQL应用(1.从CSV中获取数据并通过筛选后打印在控制台 )

该文介绍了如何使用ApacheFlink的流处理引擎和TableAPI从CSV文件中读取数据,创建表并注册,然后通过查询条件筛选出指定名字的学生信息,最后将查询结果转换为DataStream并打印到控制台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从CSV中获取数据并通过筛选后打印在控制台

1. 在流处理引擎中创建表执行环境

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tableenv = TableEnvironment.getTableEnvironment(env);

2. 创建表(注册表)并将CSV数据写入表中

TableSource 目前仅支持 CsvTableSource一种,也就是想要从数据源获取数据写入表时,只有csv文件可以直接使用TableSource进行读取,其他都需要先读取到DataStream,然后再将DataStream数据导入表,或者将DataStream转换为Table

String[] fields = new String[]{"id","name","age"};
TypeInformation[] fieldtype = new TypeInformation[]{Types.STRING,Types.STRING,Types.INT};
TableSource tsource = new CsvTableSource("../datasets/stuinfo.csv",fields,fieldtype);
tableenv.registerTableSource("student",tsource);

stuinfo.csv数据如下

1001,zhangsan,18
1002,lisi,20
1003,wangwu,23
1004,zhaoliu,25

3.1 通过Table API的方法查看表中名称为 wangwu 的学生信息

// scan表示扫表全表,即查询所有字段,如果只想获取个别字段,可以使用select方法
Table t1 = tableenv.scan("student").where("name='wangwu'");

3.2 通过SQL查看表中名称为 wangwu 的学生信息

Table t1 = tableenv.sqlQuery("select * from student where name='wangwu'");

4. 将查询结果转换为DataStream,并将结果输出到控制台

// Tuple类型因为必须声明每个参数类型,所以需要TypeInformation.of(new TypeHint<>(){})来进行声明
DataStream<Tuple3<String, String,Integer>> ds = tableenv.toAppendStream(t1,TypeInformation.of(new TypeHint<Tuple3<String, String,Integer>>(){}));
ds.print();

5. 完整代码

// 流执行引擎
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 表执行引擎
StreamTableEnvironment tableenv = TableEnvironment.getTableEnvironment(env);

/*
表注册: registerTableSource -- CsvTableSource
 */
 // 字段名称
String[] fields = new String[]{"id","name","age"};
// 字段类型
TypeInformation[] fieldtype = new TypeInformation[]{Types.STRING,Types.STRING,Types.INT};
TableSource tsource = new CsvTableSource("E:\\IDEAProject\\Flink_Case\\FlinkDemo\\src\\main\\java\\gongcheng21\\datasets\\stuinfo.csv",fields,fieldtype);
// 注册表
tableenv.registerTableSource("student",tsource);

/*
表数据处理
*/
// 查看表中数据
Table t1 = tableenv.scan("student").where("name='wangwu'");
// 将表转换为DataStream类型
DataStream<Tuple3<String, String,Integer>> ds = tableenv.toAppendStream(t1,TypeInformation.of(new TypeHint<Tuple3<String, String,Integer>>(){}));
// 将数据打印在控制台
ds.print();
env.execute();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhouwhui

这是一个你请我恰饭的机会呀!

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

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

打赏作者

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

抵扣说明:

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

余额充值