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

Apache Flink 漫谈系列 - SQL概览

发布时间:2018-11-15 10:22:07 所属栏目:教程 来源:孙金城
导读:一、SQL简述 SQL是Structured Query Language的缩写,最初是由美国计算机科学家Donald D. Chamberlin和Raymond F. Boyce在20世纪70年代早期从 Early History of SQL 中了解关系模型后在IBM开发的。该版本最初称为[SEQUEL: A Structured English Query Lang

利用pageAccessSession_tab测试数据,我们按地域统计连续的两个访问用户之间的访问时间间隔不超过3分钟的的页面访问量(PV).

  1. SELECT 
  2. region, 
  3. SESSION_START(rowtime, INTERVAL '3' MINUTE) AS winStart, 
  4. SESSION_END(rowtime, INTERVAL '3' MINUTE) AS winEnd, 
  5. COUNT(region) AS pv 
  6. FROM pageAccessSession_tab 
  7. GROUP BY region, SESSION(rowtime, INTERVAL '3' MINUTE) 

d. Result

Apache Flink 漫谈系列 - SQL概览

十二、UDX

Apache Flink 除了提供了大部分ANSI-SQL的核心算子,也为用户提供了自己编写业务代码的机会,那就是User-Defined Function,目前支持如下三种 User-Defined Function:

  • UDF - User-Defined Scalar Function
  • UDTF - User-Defined Table Function
  • UDAF - User-Defined Aggregate Funciton

UDX都是用户自定义的函数,那么Apache Flink框架为啥将自定义的函数分成三类呢?是根据什么划分的呢?Apache Flink对自定义函数进行分类的依据是根据函数语义的不同,函数的输入和输出不同来分类的,具体如下:

Apache Flink 漫谈系列 - SQL概览

1. UDF

a. 定义

用户想自己编写一个字符串联接的UDF,我们只需要实现ScalarFunction#eval()方法即可,简单实现如下:

  1. object MyConnect extends ScalarFunction { 
  2. @varargs 
  3. def eval(args: String*): String = { 
  4. val sb = new StringBuilder 
  5. var i = 0 
  6. while (i < args.length) { 
  7. if (args(i) == null) { 
  8. return null 
  9. sb.append(args(i)) 
  10. i += 1 
  11. sb.toString 
  12. }} 

b. 使用

  1. ... 
  2. val fun = MyConnect 
  3. tEnv.registerFunction("myConnect", fun) 
  4. val sql = "SELECT myConnect(a, b) as str FROM tab" 
  5. ... 

2. UDTF

a. 定义

用户想自己编写一个字符串切分的UDTF,我们只需要实现TableFunction#eval()方法即可,简单实现如下:

(编辑:晋中站长网)

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

热点阅读