Flink SQL-Client探索

本文介绍了如何使用Flink SQL-Client进行数据处理,包括从启动Docker镜像到执行各种需求,如数据过滤、分组聚合、窗口操作、写入Kafka和ES。详细展示了每个需求的SQL语句及执行结果,提供了一种便捷的Flink学习和实践方式。

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

SQL-Client 就是一个便于大家学习和写 demo 的一个 Flink-SQL 工具,这次文章的基本流程还是根据社区云邪大佬的公开课,和 官方 wiki 的步骤执行的,这里就大体自己捣鼓了一遍记录一下。



前提准备


从 GitHub 上 clone ververica/sql-training 的 Docker 镜像
地址为:https://github.com/ververica/sql-training 包含如下镜像:

执行 docker-compose up -d加载镜像

执行 docker-compose exec sql-client ./sql-client.sh启动 sql-client 看到松鼠就代表跑起来了!

执行 docker-compose down终止


具体实践


执行show tables;
我们先看一下自带了这几张表

如果你想自己自定义表需要到 sql-training/build-image/training-config.yaml下去自定义表结构,具体操作可以参照官方的文档,这次主要用到 Rides这张表

Rides 的表结构是这样的

字段 类型 含义
rideId BIGINT 行为 ID(包含两条记录,一条入一条出)
taxiId BIGINT 出租车 ID
isStart BOOLEAN 开始 or 结束
lon FLOAT 经度
lat FLOAT 维度
rideTime TIMESTAMP 时间
psgCnt INT 乘客数

这里我们顺便介绍下training-config.yaml里的结构,sql-client 目前是提供了配置的方式定义表结构,如下:

  • type:声明是一个 source 还是 sink
  • update-mode:表里面的数据是什么行为 append 模式 update 模式
  • schema:表结构字段的定义。
  • 具体介绍一下rideTime事件发生的时间,需要基于这个时间来做一些窗口的操作,因此要把这个字段声明为rowtime字段添加watermarkwatermark是Flink里的时间机制,之后的文章再做详细介绍。
  • connector:主要定义连接配置,像KafkaElasticsearch等。
  • format:定义如何去解析定义的格式。

我们先来简单的执行一个 SQL 语句 select * from Rides;看一下 Rides表数据

这时候打开 http://localhost:8081/ (Flink Web)可以发现刚才的 SQL 任务已经跑起来了

同时终端也运行出了结果
在这里插入图片描述


需求 1(filter)


现在有这么一个需求,统计出现在纽约的行车记录。这里我们需要进行一个过滤的操作,我们需要有个自定义的 UDF ,具体思路是,表里面有经度和维度这两个字段,通过这个可以来开发一个是否在纽约的 UDF。(这里官方 Demo 里已经帮我们写好了2333)代码都在 sql-training/build-image/sql-udfs下的IsInNYC,继承 ScalarFunction类实现 eval方法。

public class IsInNYC extends ScalarFunction {
   
   

	// geo boundaries of the area of NYC
	private static double LON_EAST = -73.7;
	private static double LON_WEST = -74.05;
	private static double LAT_NORTH = 41.0;
	private static
### Flink SQL-client 1.19.1 版本特性 Flink 社区持续改进和完善 SQL-client 功能,在 1.19.1 版本中引入了一系列增强功能和优化措施。此版本增强了对复杂查询的支持,提升了性能表现,并增加了更多连接器选项来满足多样化的应用场景需求。 - **增强的查询处理能力**:支持更复杂的嵌套子查询结构以及多层聚合操作。 - **性能提升**:通过对内部执行计划生成机制进行了调整,减少了不必要的计算开销;同时针对分布式环境下的资源调度策略也做了相应优化[^1]。 - **新增加的数据源连接器**:除了已有的 Kafka 和 Hive 连接器外,还加入了对于 MongoDB、Elasticsearch 等多种外部存储系统的集成支持[^2]。 ### 安装指南 为了安装 Flink SQL-client 1.19.1,需先获取对应版本的二进制包并将其解压至目标目录: ```bash wget https://archive.apache.org/dist/flink/flink-1.19.1/flink-1.19.1-bin-scala_2.12.tgz tar -xzvf flink-1.19.1-bin-scala_2.12.tgz -C /opt/ cd /opt/flink-1.19.1 ``` 接着按照官方文档说明配置好必要的环境变量 `FLINK_HOME` 及路径设置,确保可以从任意位置调用 Flink 命令行工具[^3]。 最后根据实际应用情况下载所需的额外组件或插件,例如 MySQL CDC Connector: ```bash sudo -u flink wget https://repo1.maven.org/maven2/com/ververica/flink-connector-mysql-cdc/2.3.0/flink-connector-mysql-cdc-2.3.0.jar -P $FLINK_HOME/lib/ ``` 请注意上述命令中的链接指向的是特定版本(此处为 2.3.0),具体应依据项目需求选择合适的依赖项版本。 ### 使用教程 启动 Flink SQL-client 后可以通过交互式的命令提示符来进行各种数据库操作。下面是一个简单的例子展示如何创建一张基于 CSV 文件格式输入流上的表,并对其进行基本统计分析: ```sql CREATE TABLE my_table ( id BIGINT, name STRING, age INT ) WITH ( 'connector' = 'filesystem', 'path' = '/tmp/input.csv', 'format' = 'csv' ); SELECT COUNT(*), AVG(age) FROM my_table; ``` 此外还可以利用预加载好的 JDBC 或者其他类型的连接器实现与其他关系型数据库之间的无缝对接,方便快捷地完成数据迁移任务或是构建实时ETL管道[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值