flink scala mysql_Flink 读取 MySQL 示例

package org.onepiece.bigdata.windows.JDBCimportorg.apache.flink.api.common.typeinfo.{BasicTypeInfo, TypeInformation}importorg.apache.flink.api.java.io.jdbc.{JDBCAppendTableSink, JDBCInputFormat, JDBCOutputFormat}importorg.apache.flink.table.api.scala.BatchTableEnvironmentimportorg.apache.flink.table.api.{DataTypes, EnvironmentSettings, Types}importorg.apache.flink.types.Rowimportorg.apache.flink.api.java.typeutils.RowTypeInfoimportorg.apache.flink.streaming.api.scala.StreamExecutionEnvironmentimportorg.apache.flink.table.api.scala.StreamTableEnvironmentimportorg.apache.flink.table.api.Table

object mysql_test {importorg.apache.flink.api.scala.extensions._importorg.apache.flink.api.scala._

protected val host_name= "localhost"protected val port= 3306protected val db_name= "vn09jj5"protected val url= s"jdbc:mysql://${host_name}:${port}/${db_name}?useSSL=false&serverTimezone=UTC"val url_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Flink实时计算的结果写入MySQL数据库中,可以使用Flink的JDBC连接器。以下是一个将当天PV写入MySQL示例代码: ```java // 定义MySQL连接信息 final String jdbcUrl = "jdbc:mysql://localhost:3306/test"; final String username = "root"; final String password = "root"; // 定义Flink数据流环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 读取数据流 DataStream<String> input = env.socketTextStream("localhost", 9999); // 对数据流进行处理,计算当天PV DataStream<Tuple2<String, Integer>> result = input .map(new MapFunction<String, Tuple2<String, Integer>>() { @Override public Tuple2<String, Integer> map(String value) throws Exception { // 解析日志数据,获取访问时间和页面URL String[] fields = value.split(","); String time = fields[0]; String url = fields[1]; // 计算当天日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String today = sdf.format(new Date()); // 判断日志时间是否在当天,如果是则返回页面URL和1,否则返回空 if (time.contains(today)) { return new Tuple2<>(url, 1); } else { return null; } } }) .filter(Objects::nonNull) .keyBy(0) .sum(1); // 将结果写入MySQL result.addSink(JdbcSink.sink( "insert into pv(url, pv, date) values (?, ?, ?)", new JdbcStatementBuilder<Tuple2<String, Integer>>() { @Override public void accept(PreparedStatement preparedStatement, Tuple2<String, Integer> t) throws SQLException { // 设置SQL参数 preparedStatement.setString(1, t.f0); preparedStatement.setInt(2, t.f1); preparedStatement.setDate(3, new Date(System.currentTimeMillis())); } }, new JdbcConnectionOptions.JdbcConnectionOptionsBuilder() .withUrl(jdbcUrl) .withUsername(username) .withPassword(password) .build())); // 启动数据流处理 env.execute(); ``` 该代码首先定义了MySQL的连接信息,然后创建了一个数据流环境,并从Socket读取数据流进行处理。处理过程中,首先解析日志数据,判断是否在当天,并计算PV。最后,使用JdbcSink将结果写入MySQL数据库中。 需要注意的是,JdbcSink需要引入以下依赖: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_2.11</artifactId> <version>1.12.2</version> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值