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字段添加watermark,watermark是Flink里的时间机制,之后的文章再做详细介绍。 connector:主要定义连接配置,像Kafka,Elasticsearch等。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进行数据处理,包括从启动Docker镜像到执行各种需求,如数据过滤、分组聚合、窗口操作、写入Kafka和ES。详细展示了每个需求的SQL语句及执行结果,提供了一种便捷的Flink学习和实践方式。
最低0.47元/天 解锁文章
2081

被折叠的 条评论
为什么被折叠?



