加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Apache Flink 漫谈系列 - 一连查询(Continuous Queries)

发布时间:2018-11-08 14:09:06 所属栏目:教程 来源:孙金城
导读:一、现实题目 我们知道在流计较场景中,数据是绵绵不断的流入的,数据流永久不会竣事,那么计较就永久不会竣事,假如计较永久不会竣事的话,那么计较功效何时输出呢?本篇将先容Apache Flink操作一连查询来对流计较功效举办一连输出的实现道理。 二、数据管
副问题[/!--empirenews.page--]

一、现实题目

我们知道在流计较场景中,数据是绵绵不断的流入的,数据流永久不会竣事,那么计较就永久不会竣事,假如计较永久不会竣事的话,那么计较功效何时输出呢?本篇将先容Apache Flink操作一连查询来对流计较功效举办一连输出的实现道理。

二、数据打点

在先容一连查询之前,我们先看看Apache Flink对数据的打点和传统数据库对数据打点的区别,以MySQL为例,如下图:

MySQL

如上图所示传统数据库是数据存储和查询计较于一体的架构打点方法,这个很明明,oracle数据库不行能打点MySQL数据库数据,反之亦然,每种数据库厂商都有本身的数据库打点和存储的方法,各自有特有的实现。在这点上Apache Flink海纳百川(也有corner case),将data store 举办抽象,分为source(读) 和 sink(写)两种范例接口,然后团结差异存储的特点提供常用数据存储的内置实现,虽然也支持用户自界说的实现。

那么在宏观计划上Apache Flink与传统数据库一样都可以对数据表举办SQL查询,并将产出的功效写入到数据存储内里,那么Apache Flink上面的SQL查询和传统数据库查询的区别是什么呢?Apache Flink又是怎样做到求同(语义沟通)存异(实现机制差异),美满支持ANSI-SQL的呢?

三、静态查询

传统数据库中对表(好比 flink_tab,有user和clicks两列,user主键)的一个查询SQL(select * from flink_tab)在数据量应承的环境下,会立即返回表中的全部数据,在查询功效表现之后,对数据库表flink_tab的DML操纵将与执行的SQL无关了。也就是说传统数据库下面临表的查询是静态查询,将计较的最终查询的功效当即输出,如下:

  1. select * from flink_tab; 
  2. +----+------+--------+ 
  3. | id | user | clicks | 
  4. +----+------+--------+ 
  5. | 1 | Mary | 1 | 
  6. +----+------+--------+ 
  7. 1 row in set (0.00 sec) 

当我执行完上面的查询,查询功效当即返回,上面环境汇报我们表 flink_tab内里只有一笔记录,id=1,user=Mary,clicks=1; 这样传统数据库表的一条查询语句就完全竣事了。传统数据库表在查询那一刻我们这里叫Static table,是指在查询的那一刻数据库表的内容不再变革了,查询举办一次计较完成之后表的变革也与本次查询无关了,我们将在Static Table 上面的查询叫做静态查询。

四、一连查询

什么是持续查询呢?持续查询产生在流计较上面,在 《Apache Flink 漫谈系列 - 流表对偶(duality)性》 中我们提到过Dynamic Table,持续查询是浸染在Dynamic table上面的,永久不会竣事的,跟着表内容的变革计较在不绝的举办着...

五、静态/一连查询特点

静态查询和一连查询的特点就是《Apache Flink 漫谈系列 - 流表对偶(duality)性》中所提到的批与流的计较特点,批一次查询返回一个计较功效就竣事查询,流一次查询不绝批改计较功效,查询永久不竣事,表格表示如下:

Apache Flink 漫谈系列 - 一连查询(Continuous Queries)

六、静态/一连查询相关

接下来我们以flink_tab显露实操纵为例,体验一下静态查询与一连查询的相关。若是我们对flink_tab表再举办一条增进和一次更新操纵,如下:

  1. MySQL> insert into flink_tab(user, clicks) values ('Bob', 1); 
  2. Query OK, 1 row affected (0.08 sec) 
  3.  
  4. MySQL> update flink_tab set clicks=2 where user='Mary'; 
  5. Query OK, 1 row affected (0.06 sec) 

这时辰我们再举办查询 select * from flink_tab ,功效如下:

  1. MySQL> select * from flink_tab; 
  2. +----+------+--------+ 
  3. | id | user | clicks | 
  4. +----+------+--------+ 
  5. | 1 | Mary | 2 | 
  6. | 2 | Bob | 1 | 
  7. +----+------+--------+ 
  8. 2 rows in set (0.00 sec) 

那么我们望见,沟通的查询SQL(select * from flink_tab),计较功效完全 不 一样了。这声名沟通的sql语句,在差异的时候执行计较,获得的功效也许纷歧样(有点像空话),就如下图一样:

Apache Flink 漫谈系列 - 一连查询(Continuous Queries)

假设不绝的有人在对表flink_tab做操纵,同时有一小我私人间歇性的提倡对表数据的查询,上图我们只是在三个时刻点举办了3次查询。而且在这段时刻内数据表的内容也在变革。引起上面变革的DML如下:

  1. MySQL> insert into flink_tab(user, clicks) values ('Llz', 1); 
  2. Query OK, 1 row affected (0.08 sec) 
  3.  
  4. MySQL> update flink_tab set clicks=2 where user='Bob'; 
  5. Query OK, 1 row affected (0.01 sec) 
  6. Rows matched: 1 Changed: 1 Warnings: 0 
  7.  
  8. MySQL> update flink_tab set clicks=3 where user='Mary'; 
  9. Query OK, 1 row affected (0.05 sec) 
  10. Rows matched: 1 Changed: 1 Warnings: 0 

到此刻我们不难想象,上面图内容的焦点要点如下:

  • 时刻
  • 表数据变革
  • 触发计较
  • 计较功效更新

接下来我们操作传统数据库现有的机制模仿一下一连查询...

1. 无PK的 Append only 场景

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读