简介:本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL。内容将从以下3个部分介绍:1、SQL的基本概念;2、SQL的语法说明;3、SQL 实战;

作者 | 周凯波(宝牛),阿里巴巴技术专家

本文由阿里巴巴技术专家周凯波(宝牛)分享,主要介绍如何跑通第一个SQL。内容将从以下3个部分介绍:

1、SQL的基本概念
2、SQL的语法说明
3、SQL 实战

一、SQL的基本概念

1.SQL 分类

SQL分为四类,分别是数据查询语言(DQL)、数据操纵语言(DML)、数据定义(DDL)语言和数据控制语言(DCL)。今天将介绍前三种语言的使用。

接下来介绍几个基本概念。

2.SQL 开发

Scripts,即SQL文本。在SQL文本里面可以写上文介绍的前三种语言;
Schema,即元数据。SQL里面需要使用的表和函数,是通过Schema进行定义的;
Artifacts,即UDF Jar包;

3.Catalog

在 Flink SQL里,Catalog是管理元数据的。Catalog通过Catalog.DB.Table来定位一张表。除了DB和Table,Catalog还能注册函数,如UDF、UDTF和UDAF。

在Flink Catalog里,有三种Catalog实现:

● 第一个是GenericInMemoryCatalog,是内存版的Catalog。平常在使用 Flink SQL的时候,默认是内存版的Catalog。当程序运行结束,第二次重新运行的时候,会重新生成一个Catalog实例。
● 第二个是HiveCatalog,Flink里比较好的支持了HiveCatalog,可以从Hive HMS里读取元数据,同时也可以往Hive里注册表,写数据到Hive里面去。
● 第三个Catalog是 VVP平台里面开发的Catalog,即VvpCatalog,它实现了Flink Catalog的接口,底层是使用的数据库。

4.Deployment

Deployment是一个作业的描述,目前有两种任务类型,JAR和SQL。

Deployment上有升级策略(Upgrade strategy)和恢复策略(Restore strategy)。Upgrade strategy是指Deployment运行后,用户可以对Deployment的参数进行修改,这个修改如何影响Deployment的运行就是由不同的升级策略决定的;Restore strategy 指启动 Flink任务时,是否从 Savepoint/Checkpoint进行恢复就是不同的恢复策略。

Flink的版本和配置,常用的Flink的参数都可以在这里进行配置。例如:Task Managers 数量,Jobmanager和Taskmanager 的 CPU 和内存等。

Deployment上除了作业描述外,还有期望状态和实际状态。期望状态是指用户所期望的目标状态,例如当要将运行中的作业停止时,期望状态就是Canceled;操作完成的实际运行状态就是实际状态。

总的来说,Deployment是一个任务的描述模板。VVP平台内部的状态机会根据Deployment的期望状态和实际状态来控制作业的实际运行。

5.Job

Deployment启动时会生成一个Job,这个Job对应一个具体的 Flink Job。同一时间,一个Deployment上只会有一个正在运行的Job。

二、SQL的语法说明

1.语法说明

首先看下图的语句,分别是创建源表和创建结果表。

下图是注册函数。函数的注册分为两步,第一步上传JAR包,然后在系统上可以勾选自动注册;第二种是使用 Flink 语法进行手工注册。

使用函数有两种方式,第一是内置函数的使用,如下图UPPER是 Flink 自带的函数;第二种是自定义函数,像MyScalarFunc。

在VVP平台里,也支持 Flink 里的Temporary Table,可以将它理解为临时表,只在当前会话周期内有效。在下图例子中,我们创建了两个Temporary Table,读取datagen_source表中的数据,输出到blackhole_sink表。

下图是Temporary View的语法示例。前面两段是一样的临时表;第三条语句是创建了一个tmp_view,它代表从Datagen_source的查询。在Flink里面Temporary View可以理解为让SQL的书写变得更简单,它不会对数据进行一个持久化,和数据库里面View概念是不一样的。第四条语句是从 view里面读取数据并写入到sink表里。

下图是Statement set的语法示例,这个语法目前在 Flink 1.11版本里还没有,但是在VVP平台做了一些支持。

如上图,BEGIN STATEMENT SET和END这两个语句之间可以写多条 insert into语句。上图的例子是读取datagen_source 表往两张sink表同时写。这个语句提交后会启动一个完整的Flink Job,里面会有1个source和两个sink。

2.SQL的应用范围

Create Table,它注册的表会写入系统Catalog里,在VVP平台上面会写到VvpCatalog中,并进行持久化。好处是适合多个query共享元数据。

Create Temporary Table,临时表。它会写到内存版的Catalog里,不会持久化。所以它适合不需要共享元数据的场景,只给当前query使用。

Create Temporary View,主要目的是简化SQL语句。如果不通过Create Temporary View,对于逻辑复杂的SQL写起来会相当复杂,可读性也很差。

Statement Set,适合需要输出到多个下游的场景。

三、SQL 实战

接下来向大家展示销量统计的实例。如下图所示,需求是统计每小时成交量。

我们首先创建两张表,一个是源表,一个是结果表。下图是创建源表的语句,数据源来自kafka,然后定义watermark是5秒钟。

下图是结果表,也是一个kafka表。

下图是查询语句,从源表读取数据后,会通过tumble window窗口聚合对数据做一个统计,这样就求出了每小时的成交量。

1.实战演示

打开VVP的界面,左侧有SQL编辑器,在这个编辑器左边有三栏,第一栏是Scripts,写SQL文本的地方;第二栏是Schemas,用来定义元数据;第三栏是Artifacts, 用来注册UDF。

首先定义一张datagen_source的表。点击右上角的验证按钮,验证通过后点击旁边的运行。点击运行之后,可以在下面看到运行的结果,运行成功后点击左侧的Schemas,可以找到刚刚创建的datagen_source表。

然后再创建一张sink表,connector类型是blackhole。然后验证并运行。

这样两张表都已经注册到Catalog里面去了,默认的Catalog名字是VVP,Database名字是Default。

接下来就可以写SQL语句。比如说写一条INSERT INTO语句,写完之后点验证并运行。在运行这条INSERT INTO语句时,系统会提示是否要创建一个SQL作业,点击确认,补充名称等信息,SQL作业就创建好了。

点击启动这个作业,启动过程中可以在页面上看到关于这个作业的很多信息和配置。

2.UDF实战展示

UDF开发完成后会打一个JAR包,然后点SQL编辑器左侧的Artifacts,然后点“+”号,将JAR 包上传上来。

上传完毕,完善JAR 包名称等信息后,点确认完成。JAR包上传过程中,VVP系统会对JAR 包进行解析。解析之后系统会提示是否注册,勾选需要注册的内容,点击创建Function。

然后如下图,上面就是已注册的Function,下面是可用Function,可以选择继续注册或关掉窗口。

如果不需要这个函数了,可以在页面左侧找到已经注册的Function,点击右侧尾部图标,选择Drop Function。若想重新注册,有两种方法,第一可以点击管理Function;第二通过 Flink的注册函数手动注册。
用注册好的Function创建SQL作业。

在创建页面下拉可以看到很多高级配置,只修改自己需要的配置即可。

3.Temporary table的使用

上面的例子是注册在Catalog里的,如果不想每次都在Catalog里面进行注册,那就可以直接使用 Temporary table。

如下图将table的创建和INSERT INTO全部写在一起,这样就可以直接创建一个新的SQL作业,而不用提前在Catalog里注册了。

4.Temporary View

将前面Temporary View例子页面中的语句复制到VVP平台的SQL编辑器中,直接点击运行就可以创建一个作业。

5.Statement Set

将前面Statement Set例子页面中的语句复制到编辑器中,直接点击运行就可以创建一个作业。启动后,可以通过下图看到运行情况,这个任务从一个源表中读取数据输出到了两个不同的sink表中。

6.查询实战

将前面SQL 实战中创建源表、结果表和查询页面的语句分别复制粘贴到VVP平台的SQL编辑器并启动运行。从下图可以看到这个读写kafka的任务运行起来了。

原文链接:https://developer.aliyun.com/article/781172?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

如何跑通第一个 SQL 作业相关推荐

  1. 如何跑通第一个 DataStream 作业?

    简介:本文由阿里巴巴技术专家叶佳纯(自知)分享,主要介绍如何在实时计算 Flink 版中跑通 DataStream 作业. 作者 | 叶佳纯(自知),阿里巴巴技术专家 本文由阿里巴巴技术专家叶佳纯(自 ...

  2. Verilog0.2:跑通第一个Vivado工程

    Verilog0.2:跑通第一个Vivado工程 在本文中,你将能学会: 学会基本使用Vivado 学会一些FPGA开发中的基本概念 用VScode代替Vivado写代码 接触到管脚约束及其细节 文章 ...

  3. 在Rockchip RK3399 Pro开发板上跑通第一个Qt程序

    在Rockchip RK3399 Pro开发板上跑通第一个Qt程序 准备工作:将Qt从Windows移植到Linux 一.交叉编译器的准备 下载交叉编译工具 安装交叉编译工具 二.交叉编译Qt库 三. ...

  4. 2019,我是如何转向战略成功,并成功跑通一个现金流项目的

    2019年来得快,去的也快. 2019年年初,我儿子蹦出来了,现在才知道,他当时有多乖. 2019年年初,我辞去稳定的外企工作,放弃了还不错的薪水,离开了舒服的工作环境和团队,开始了第一次创业. 20 ...

  5. 复现经典目标跟踪算法ByteTrack之路:调通第一个demo

    复现经典目标跟踪算法ByteTrack之路:调通第一个demo ByteTrack源论文地址:https://arxiv.org/pdf/2110.06864.pdf ByteTrack开源代码地址: ...

  6. 顶级测试框架Jest指南:跑通一个完美的程序,就是教出一群像样的学生

    facebook三大项目:yarn jest metro,有横扫宇宙之势. 而jest项目的宗旨为:减少测试一个项目所花费的时间成本和认知成本. --其实,它在让你当一个好老师. jest文档非常简略 ...

  7. 【全网唯一】全网唯一能够跑通的,跑不通你来找我~用node.js完成微信支付下单功能,且只需要一个文件wxpay.js就解决业务流程的node.js程序

    先吐为敬! 最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆"代码拷贝党"."留一手"."缺斤少两"."不 ...

  8. 【历史上的今天】8 月 17 日:Oracle 创始人出生;第一个 COBOL 程序成功跑通!...

    透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 8 月 17 日,在科技历史上,都有哪些关键事件发生呢? 1944 年 8 月 17 日:Oracle(甲骨文)创始人 ...

  9. aistarter助手程序未运行_师傅领进门之6步教你跑通一个AI程序!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 源码下载地址请点击原文查看. 初学机器学习,写篇文章mark一下,希望能为将入坑者解点惑.本文介绍一些机器学习的入门知识,从安装环境到跑通机 ...

最新文章

  1. mysql sys库 oom_MySQL 5.6因为OOM导致数据库重启
  2. php:Mcrypt响应慢的原因解决备注
  3. Python中的__new__()方法的使用
  4. 坚持早起21天,每月多赚1000元
  5. 【信仰充值中心】Firefox 96 后续更新一览
  6. 多名员工拉横幅讨薪却跑错地方?暴风集团回应...
  7. Redis-数据结构02-简单动态字符串(sds)
  8. 第二章 驱动程序调测方法与技巧
  9. configure: error: Package requirements (commoncpp 6.2.2) were not met
  10. 马鞍数55c语言_c语言超全练习题(全面更新)
  11. webgl存本地文件_Unity发布WebGL后加载本地文件
  12. 阵列天线方向图-均匀圆形/圆柱阵列matlab仿真
  13. 【洛谷】3957 跳房子
  14. 2022华为机试真题 C++ 实现 【字符串子序列II】
  15. MultiSigWallet实例
  16. 寄存器与锁存器的区别
  17. 洛谷P1618 Java解法
  18. quickfix的使用
  19. 智慧监狱解决方案-最新全套文件
  20. You-Get实现从Web下载媒体内容

热门文章

  1. 厉害了,在Pandas中用SQL来查询数据,效率超高
  2. 又一款超酷的 Python 可视化神器:cutecharts
  3. java反射 面试题_使用Java反射更改私有静态最终字段
  4. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程
  5. stm32 web 参数_老司机们都是怎么学习STM32的?
  6. Eclipse Git 克隆项目的时候出现Internal error; consult Eclipse error log
  7. WordPress强制跳转https教程
  8. 2017广西邀请赛重现赛
  9. HTML5新增的一些特性
  10. [代码整洁]自我感悟