SQL、DML和DDL

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: SQL、DML和DDL

文章目录


DDL和DML

DDL和DML语句有很多,这里只写在有了sql基础之后,比较特别的部分,如果工作需要其他函数的话可以直接查阅blink文档,这里不赘述了。

DDL:

Data Definition Language 数据定义语言,这部分主要分为stream ,batch,view,函数。

其实很好理解,建议不要直接啃语法,因为本身就没啥难度,看完语法反而有点晕。看一遍下面的步骤就很好理解了:创建原表,然后创建结果表,创建视图进行数据的一些操作,然后将视图中的数据插入结果表中,这就是一个最简单的代码结构了。

  1. 我们先从实例出发,一般的操作步骤如下:创建数据总线(DataHub)源表系统订单是实时产生的,源表语句如下。
    系统订单是实时产生的,源表语句如下
CREATE TABLE online_retailers (
    id                    VARCHAR,  -- 商品ID
    buyer_id              VARCHAR,  -- 买家ID
    site                  VARCHAR,  -- 商品类别
    pay_time              VARCHAR,  -- 订单支付时间
    buy_amount            DOUBLE,   -- 订单金额
    wap                   VARCHAR   -- 购买方式
) WITH (
    type = 'datahub',
    endPoint = 'xxx',
    roleArn='xxx',
    project = 'xxx',
    topic = 'xxx',
  batchReadSize='500'
);

2.创建RDS结果表

RDS结果表语句如下。

CREATE TABLE ads_site_block_trd_pay_ri (
    id                    VARCHAR,
    buyer_id              VARCHAR,
    site                  VARCHAR,
    pay_time              VARCHAR,
    buy_amount            DOUBLE,
    wap                   VARCHAR,
    PRIMARY KEY (id,buyer_id,site)
) WITH (
    type= 'rds',
    url = 'xxx',
    userName = 'xxx',
    password = 'xxx',
    tableName = 'xxx'
);

3.创建一个View视图

如下根据商品ID、买家ID、商品类别、订单支付时间、订单金额和购买方式做分组操作。

CREATE VIEW tmp_ads_site_block_trd_pay_ri AS
SELECT
id,
buyer_id,
site,
date_format(pay_time,'MMdd-yyyy','yyyyMMdd') as pay_time,
SUM(buy_amount) as buy_amount,
wap
FROM
online_retailers
GROUP BY id,buyer_id,site,pay_time,buy_amount,wap;
4.数据聚合后插入RDS结果表
把分组好的数据聚合后插入RDS结果表中,语句如下。
INSERT INTO ads_site_block_trd_pay_ri
SELECT
id,
buyer_id,
site,
pay_time,
buy_amount,
wap
FROM
tmp_ads_site_block_trd_pay_ri
GROUP BY id,buyer_id,site,pay_time,buy_amount,wap;

然后需要知道的就是流和批的概念,stream有创建源表,结果表,维表的语法;batch只有源表和结果表,文档就是这样的,我也不知道为啥。

Stream:

这里介绍的是stream中经常使用的源表,结果表,维表类型,具体的语法很简单,只是更改了with中的参数内容,具体可以参考官方文档:

https://help.aliyun.com/document_detail/62515.html?spm=a2c4g.11186623.6.748.2e2812edqxLSN1

https://yuque.antfin-inc.com/rtcompute/doc/sql-ddl-stream-source

源表:datahub,kafka,sls,tt,continuous odps

Datahub

阿里云流数据处理平台DataHub是流式数据(Streaming Data)的处理平台,提供对流式数据的发布 (Publish),订阅 (Subscribe)和分发功能,让您可以轻松构建基于流式数据的分析和应用。

Kafka作为源表

日志收集系统和消息系统。

从Kakfa读入的数据,都是序列化后VARBINARY(二进制)格式,对读入的每条数据,需要用户编写UDTF将其解析成序列化前的数据结构,Kafka源表数据解析流程一般为:Kafka Source Table -> UDTF -> Blink -> SINK。此外,blink SQL中也支持通过cast函数将varbinary解析为varchar类型

Sls

阿里云自主研发的针对日志数据的实时、大规模集中式管理服务SLS(Simple Log Service,简单日志服务),能够提供一个从日志采集、过滤、处理、聚合到在线查询的完整的海量日志处理平台,满足各种类型的日志处理分析需求,减轻广大开发者的负担。

TT

功能

  1. 实时数据总线
    即Publish/Subscribe数据分发能力,支持数据单份写入,多份读出。
    目前TT数据默认保存3天
  2. 数据同步
    即将TT的数据同步到其他云产品中,弹内主要以ODPS为主。

结果表:hologres,kafka,sls,odps,rds,datahub,metaq,print

Hologress

一款全面兼容PostgreSQL协议并与大数据生态无缝打通的实时交互式分析产品,支持对万亿级数据进行高并发低延时多维分析透视和业务探索,可让您轻松而经济的使用现有BI工具分析所有数据

Rds

Relational database service 关系型数据库

Metaq

MetaQ是什么

meatq是阿里团队的消息中间件。是支撑双11最为核心的系统之一。

MetaQ的使用目的

解耦收发双方,使得系统异步化,同时利用消息中间件堆积消息的功能,可以使得下游系统在可以慢慢消费消息,增强系统的缓冲能力,达到“削峰填谷”的目的

维表:odps维表,rds维表

这里要首先介绍一下维表,以及为什么要进行维表join:

维表作为 SQL 任务中一种常见表的类型,其本质就是关联表数据的额外数据属性,通常在 Join 语句中进行使用。比如源数据有人的身份证号,人名,你现在想要得到人的家庭地址,那么可以通过身份证号去关联人的身份证信息,就可以得到更全的数据。

一般来说,还可以先join维表然后再进行补数据。

Blink SQL中没有专门为维表设计的DDL语法,使用标准的CREATE TABLE语法即可,但是需要额外增加一行PERIOD FOR SYSTEM_TIME的声明,这行声明定义了维表的变化周期,即表明该表是一张会变化的表。

声明一个维表的时候,必须要指名唯一键,维表JOIN的时候,ON的条件必须包含所有唯一键的等值条件。

CREATE TABLE white_list (
  id varchar,
  name varchar,
  age int,
  PRIMARY KEY (id),  -- 用做维表的话,必须有声明的主键
  PERIOD FOR SYSTEM_TIME  -- 定义了维表的变化周期
) with (
  type = 'xxx',
  ...
)

目前只支持源表 INNER/LEFT JOIN 维表

内置的维表提供三种缓存策略,分别是 None, LRU, ALL。不同类型的维表根据存储介质的特征支持其中一种或者多种缓存策略。

• None: 无缓存

• LRU: 最近使用策略缓存,需要配置相关参数:缓存大小(cacheSize)和 缓存超时时间(cacheTTLMs)

• ALL: 全量缓存策略。即在 Job 运行前会将远程表中所有数据 load 到内存中,之后所有的维表查询都会走 cache,cache 命中不到则不存在,并在缓存过期后重新加载一遍全量缓存。

Batch的源表和结果表省略

视图view

视图仅仅用于辅助计算逻辑的描述,不会产生数据的物理存储。视图是一种方便的方法,可以通过提供这些片段名称将SQL转换成可管理的视图块。因此,视图并不占用系统空间。

所以视图相当好用啊,很多代码都会用一堆view。

函数就不多说了

DML

Data Manipulation Language数据操纵语言,这个可说的不多,我认为重要的就一个insert,知道这个代码也都可以看懂了。

语法格式:

INSERT INTO tableName
      [ (columnName[ , columnName]*) ]
          queryStatement;

举例:

INSERT INTO LargeOrders
SELECT * FROM Orders WHERE units > 1000;
INSERT INTO Orders(z, v)
SELECT c,d FROM OO;

Insert into

流计算不支持单独的select 查询,必须有CREATE VIEW 或者是在 INSERT INTO内才能操作。


目录
相关文章
|
17天前
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
26 0
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-SQL概述及DDL
(精度指数的所有位数;标度指小数点后数的位数) 字符串类型
63 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句2(DML)
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进 行增、删、改操作。DML语句主要分为三个大类 本章做演示使用的是上一章创建的表,MySQL基本SQL语句1(DDL) 下面是原本数据库表中的内容 我们使用命令对表进行两个修改如果是需要对全表都进行修改的话,就不需要写条件语句where 此处删除id为1的数据,和前边的修改语句一样,在where后面加入条件 此处删除所有数据,就没有条件了,因此不用写where DML语句是对基
43 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL基本SQL语句1(DDL)
SQL(Structured Query Language)结构化查询语言,用于存取,查询,更新数据以及管理关系型数据库系统SQL指令分为四类DDL Data Defintion language 数据库定义语言 用于完成对数据库对象(数据表,数据库,视图,索引)的创建,删除,修改 DML Data Manipulation language 数据操作语言 用于完成对数据表中的数据添加,删除,修改 DQL
47 0
|
5月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
81 0
|
7月前
|
SQL 安全 数据库
深入理解SQL的数据操作语言(DML)
SQL(Structured Query Language)是一种用于管理和操作关系数据库的强大语言。SQL语言被分为多个子语言,其中之一是DML(Data Manipulation Language),用于执行与数据的操作和管理相关的任务。在本文中,我们将深入探讨DML的各个方面,从基础操作到高级技巧,以帮助初学者更好地理解和使用SQL的DML。
171 1
|
8天前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
2月前
|
SQL 关系型数据库 MySQL
Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
【2月更文挑战第18天】Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
174 2
|
5月前
|
SQL 关系型数据库 MySQL
Mysql数据库 3.SQL语言 DML数据操纵语言 增删改
Mysql数据库 3.SQL语言 DML数据操纵语言 增删改
43 0
|
5月前
|
SQL 存储 关系型数据库
Mysql数据库 1.SQL语言分类 DDL.数据定义语言
Mysql数据库 1.SQL语言分类 DDL.数据定义语言
71 0