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

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

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

接下来我们把上面隐式存在的时刻属性timestamp作为表flink_tab_ts(timestamp,user,clicks三列,无主键)的一列,再写一个 触发器(Trigger) 示例调查一下:

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

  1. // INSERT 的时辰查询一下数据flink_tab_ts,将功效写到trigger.sql中 
  2. DELIMITER ;; 
  3. create trigger flink_tab_ts_trigger_insert after insert 
  4. on flink_tab_ts for each row 
  5. begin 
  6. select ts, user, clicks from flink_tab_ts into OUTFILE '/Users/jincheng.sunjc/testdir/atas/trigger.sql'; 
  7. end ;; 
  8. DELIMITER ; 

上面的trigger要将查询功效写入当地文件,默认MySQL是不应承写入的,我们查察一下:

  1. MySQL> show variables like '%secure%'; 
  2. +--------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +--------------------------+-------+ 
  5. | require_secure_transport | OFF | 
  6. | secure_file_priv | NULL | 
  7. +--------------------------+-------+ 
  8. 2 rows in set (0.00 sec) 

上面secure_file_priv属性为NULL,声名MySQL不应承写入file,我必要修改my.cnf在添加secure_file_priv=''打开写文件限定;

  1. MySQL> show variables like '%secure%'; 
  2. +--------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +--------------------------+-------+ 
  5. | require_secure_transport | OFF | 
  6. | secure_file_priv | | 
  7. +--------------------------+-------+ 
  8. 2 rows in set (0.00 sec) 

下面我们对flink_tab_ts举办INSERT操纵:

对flink_tab_ts举办INSERT操纵

我们再来看看6次trigger 查询计较的功效:

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

各人到这里发明我写了Trigger的存储进程之后,每次在数据表flink_tab_ts举办DML操纵的时辰,Trigger就会触发一次查询计较,产出一份新的计较功效,调查上面的查询功效发明,功效表不断的增进(Append only)。

2. 有PK的Update场景

我们操作flink_tab_ts的6次DML操纵和自界说的触发器TriggerL来先容了什么是一连查询,做处理赏罚静态查询与一连查询的相关。那么上面的演示目标是为了声名一连查询,全部操纵都是insert,没有基于主键的更新,也就是说Trigger发生的功效都是append only的,那么各人想一想,假如我们操纵flink_tab这张表,按主键user举办插入和更新操纵,同样操作Trigger机制来举办一连查询,功效是奈何的的呢? 初始化表,trigger:

  1. drop table flink_tab; 
  2. create table flink_tab( 
  3. user VARCHAR(100) NOT NULL, 
  4. clicks INT NOT NULL, 
  5. PRIMARY KEY (user) 
  6. ); 
  7.  
  8. DELIMITER ;; 
  9. create trigger flink_tab_trigger_insert after insert 
  10. on flink_tab for each row 
  11. begin 
  12. select user, clicks from flink_tab into OUTFILE '/tmp/trigger.sql'; 
  13. end ;; 
  14. DELIMITER ; 
  15.  
  16. DELIMITER ;; 
  17. create trigger flink_tab_trigger_ after update 
  18. on flink_tab for each row 
  19. begin 
  20. select ts, user, clicks from flink_tab into OUTFILE '/tmp/trigger.sql'; 
  21. end ;; 
  22. DELIMITER ; 

(编辑:湖南网)

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

热点阅读