在Zeppelin中有2种不同模式的SQL可以使用

  • %flink.ssql (Streaming SQL,用StreamTableEnvironment 来执行 SQL)
  • %flink.bsql (Batch SQL, 用BatchTableEnvironment 来执行SQL)

支持的SQL 语句类型

  • DDL(Data Definition Language)
  • DML(Data Manipulation Language)
  • DQL(Data Query Language)
  • Flink 定制语句(比如set,help等等)

Zeppelin SQL 重要 Feature

Zeppelin的SQL开发环境和 Flink自带的Sql-Client类似,但是提供了更多实用的feature。

同时支持Batch SQL 和 Streaming SQL

用过Sql-client的话,你就会知道你要么使用Batch Sql 要么使用 Streaming Sql, 而在Zeppelin中你可以同时使用两种不同场景的Sql。%flink.ssql 用来执行 Streaming Sql, %flink.bsql 用来执行 Batch Sql。

多语句支持

你可以在Zeppelin 的每一个Paragraph中写多条SQL语句,每条SQL语句以分号间隔。按顺序从上到下执行。

Comment支持

你可以在SQL中穿插comment,有2种comment

  • 以 — 开头的单行comment
  • / / 包围的多行comment

image.png

Job并行度支持

你可以设置每个Paragraph的local properties:parallelism 来控制Flink SQL Job的并行度。
image.png

Multiple insert支持

有些情况下你会有多条Insert语句读同一个Source,但是会写到不同的Sink,默认情况下每条SQL语句都会独立运行一个Flink Job, 如果你想合并多条Insert语句到同一个Flink Job的话,你就需要设置 runAsOne 为true,如下图
image.png

JobName的设置

对于Insert语句的Flink Job,你可以通过设置 jobName 的方式来指定 job name(如下图)。 注意只有insert 才支持设置jobName,select语句不支持。另外这种设置 jobName 的方式只能用于单条insert 语句,对于上面的Multiple insert 并不支持。
image.png

Streaming SQL 结果可视化

Zeppelin 对于 Select 语句的结果以流式的方式可视化。Zeppelin支持的可视化类型有3种。

  • Single 模式
  • Update 模式
  • Append 模式

Single模式

  1. Single模式适合当输出结果是一行的情况,不适用用图形化的方式展现,用文本的方式更适合。比如下面的Select语句。这条Sql语句永远只有一行数据,但这行数据会持续不断的更新。这种模式的数据输出格式是html形式,用户可以用template来指定输出模板,{i} 是第 i 列的placeholder
  1. %flink.ssql(type=single, parallelism=1, refreshInterval=3000, template=<h1>{1}</h1> until <h2>{0}</h2>)
  2. select max(event_ts), count(1) from sink_kafka

flink_single_mode.gif

Update模式

  1. Update模式适合多行输出的情况,比如下面的select group by语句。这种模式会定期更新这多行数据,输出是Zeppelintable格式,所以可以用Zeppelin自带的可视化控件。
  1. %flink.ssql(type=update, refreshInterval=2000, parallelism=1)
  2. select status, count(1) as pv from sink_kafka group by status

flink_update_mode.gif

Append模式

  1. Append模式适合时间序列数据,随着时间不断有新数据输出,但不会覆盖原有数据,只会不断append的情况。比如下面的基于窗口的group by语句。Append模式要求第一列数据类型是timestamp,这里的start_time就是timestamp类型。
  1. %flink.ssql(type=append, parallelism=1, refreshInterval=2000, threshold=60000)
  2. select TUMBLE_START(event_ts, INTERVAL '5' SECOND) as start_time, status, count(1) from sink_kafka
  3. group by TUMBLE(event_ts, INTERVAL '5' SECOND), status

flink_append_mode.gif

SQL 段落执行顺序

和 Scala 和Python 段落不一样,SQL段落是可以并行同时跑多个的。默认情况下,%flink.bsql 和 %flink.ssql 各自最多跑10个段落,你可以通过设置 zeppelin.flink.concurrentBatchSql.max 和 zeppelin.flink.concurrentStreamSql.max 来调整最大并发数。

视频教程

SQL 入门

Flink on Zeppelin 10. SQL 入门.mp4 (12.02MB)

Streaming 数据可视化 Single模式

Flink on Zeppelin 11. Streaming 数据可视化 Single模式.mp4 (23.24MB)

Streaming 数据可视化 Update模式

Flink on Zeppelin 12. Streaming 数据可视化 Update模式.mp4 (14.98MB)

Streaming 数据可视化 Append模式

Flink on Zeppelin 13. Streaming 数据可视化 Append模式.mp4 (17.71MB)

Streaming ETL

Flink on Zeppelin 15. Streaming ETL.mp4 (14.9MB)

Flink 最佳实践1

Flink on Zeppelin 20. Flink 最佳实践1.mp4 (15.79MB)

Flink 最佳实践2

Flink on Zeppelin 21. Flink 最佳实践2.mp4 (41.22MB)

钉钉群+公众号

Flink on Zeppelin 3群钉钉.JPG image.png