云原生数据仓库AnalyticDB Mysql(ADB分析型数据库)-DML语法之新增插入数据

ADB分析型数据库,是阿里云平台上资源,原名叫云原生数据仓库AnalyticDB Mysql,俗称ADB分析型数据库,那么ADB的语法与mysql关系型数据库语法存在一定的差异。
本文为笔记,介绍ADB的DML语法的应用。

1. INSERT INTO

INSERT INTO用于向表中插入数据,主键重复时会自动忽略当前写入数据不做更新,作用等同于INSERT IGNORE INTO。

语法:

INSERT [IGNORE] INTO table_name [( column_name [, …] )][VALUES][(value_list[, …])][query]; IGNORE:可选参数,判断是否有与之相同的主键数据,新记录不会被写入。
column_name:可选参数,列名。
query:通过定义查询,将一行或多行数据插入表中。

注意:
如果插入数据时不指定列名,则要插入的数据必须和CREATE TABLE语句中声明的列的顺序一致。

示例:

CREATE TABLE adb_order.order_info (order_no varchar NOT NULL COMMENT '订单号',stt_ym varchar NOT NULL COMMENT '统计年月',mount decimal(16, 2) NOT NULL COMMENT '订单金额',order_num int NOT NULL COMMENT '订单量',PRIMARY KEY (order_no)
)
PARTITION BY HASH KEY (stt_ym) PARTITION NUM 128
TABLEGROUP adb_order_test
OPTIONS (UPDATETYPE='realtime')
COMMENT '订单表表'

向order_info 表中插入一条数据。

INSERT INTO order_info (order_no,stt_ym,mount ,order_num)
values('034656','202201',1542.5,36);

向order_info 表中插入多条数据。

INSERT INTO order_info (order_no,stt_ym,mount ,order_num)
values
('034656','202201',1542.5,36),
('025479','202201',2623.5,30),
('028752','202201',1263.5,40);

向order_info 表中插入多条数据时,可以省略列名(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致)。

INSERT INTO order_info
values
('034656','202201',1542.5,36),
('025479','202201',2623.5,30),
('028752','202201',1263.5,40);

向order_info 表中插入多条数据,可以省略列名(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致)。

INSERT INTO order_info
values
('034656','202201',1542.5,36),
('025479','202201',2623.5,30),
('028752','202201',1263.5,40);

2. INSERT SELECT FROM

对于可以通过其他表得到本表数据的,可以通过INSERT SELECT FROM将数据复制到本表。

语法:

INSERT INTO table_name
[( column_name [, …] )]
query;       column_name:列名
query:可以是SELECT FROM TABLE或者SELECT FROM VIEW。

示例:
以指定列名的方式,从order_info1,order_info2 表中复制某几列数据到new_order_info 表中。

INSERT INTO new_order_info (order_no, order_name, mount,stt_ym)
SELECT a.order_no, b.order_name, a.mount, b.stt_ym
FROM order_info1 a,order_info2 b
WHERE a.order_no = b.order_no
and b.stt_ym = '202201';

不指定指定列名的方式(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致),从order_info1,order_info2 表中复制某几列数据到new_order_info 表中。

INSERT INTO new_order_info
SELECT a.order_no, b.order_name, a.mount, b.stt_ym
FROM order_info1 a,order_info2 b
WHERE a.order_no = b.order_no
and b.stt_ym = '202201';

3. REPLACE INTO

用于实时覆盖写入数据,写入数据时,会先根据主键判断写入的数据是否已经存在于表中,
如果待写入数据已经存在,则先删除该行数据,然后插入新的数据。
如果待写入数据不存在,则直接插入新数据。

语法:

REPLACE INTO table_name [(column_name,...)]
VALUES ({常量|NULL|DEFAULT},...),(...),...

示例:
向order_info 表中插入一条数据。

REPLACE INTO order_info (order_no,stt_ym,mount ,order_num)
values('034656','202201',1542.5,36);

向order_info 表中插入多条数据,可以省略列名(插入的数据必须和CREATE TABLE语句中声明的列的顺序一致)。

REPLACE INTO order_info
values
('034656','202201',1542.5,36),
('025479','202201',2623.5,30),
('028752','202201',1263.5,40);

4. REPLACE SELECT FROM

将其他表中的数据实时覆盖写入目标表中。写入数据时,根据主键判断待写入的数据是否已经存在于表中,如果已经存在,则先删除该行数据,然后插入新的数据;如果不存在,则直接插入新数据。

语法:

REPLACE INTO table_name
[(column_name,...)]
query;    query:可以是SELECT FROM TABLE或者SELECT FROM VIEW。
column_name:列名

示例:
以指定列名的方式,从order_info1,order_info2 表中复制某几列数据到new_order_info 表中。

REPLACE INTO new_order_info (order_no, order_name, mount,stt_ym)
SELECT a.order_no, b.order_name, a.mount, b.stt_ym
FROM order_info1 a,order_info2 b
WHERE a.order_no = b.order_no
and b.stt_ym = '202201';

5. INSERT OVERWRITE INTO SELECT

表数据的高性能写入方式INSERT OVERWRITE INTO SELECT,覆盖写入

应用场景:
INSERT OVERWRITE INTO SELECT常规的使用场景包括:

  1. 进行分区级数据写入。
  2. 进行数据初始化(全量写入)。
  3. 进行大批量数据写入操作,不建议用于少量数据的写入。

功能原理:
写入任务是通过外表方式将外部数据批量写入到AnalyticDB MySQL内部的。需要在AnalyticDB MySQL中定义对应数据源的外表,然后通过INSERT OVERWRITE INTO SELECT语句将外表数据写入AnalyticDB MySQL表。

每个表的写入任务串行执行,即单表写入并发为1,无法调整。为保证单任务写入性能,防止集群负载过高,集群写入任务并发默认为2,不建议调整。
说明 如有需要调整写入并发数,请提交工单联系技术支持,由技术支持评估调整。

INSERT OVERWRITE INTO SELECT的基本特性如下。

  1. 资源消耗大:该写入模式在进行高性能写入时会消耗大量集群资源,建议在业务低峰期使用。
  2. 批量可见:写入任务完成前数据不可见,任务完成后该任务写入的数据批量可见。如果目标表中已存在数据,INSERT OVERWRITE INTO SELECT命令执行结束之前,目标表中的数据不会发生任何变化;INSERT OVERWRITE INTO SELECT命令执行结束后,系统自动将数据写入目标表中,目标表的原数据将被清空。
  3. 分区覆盖:通过INSERT OVERWRITE INTO SELECT写入的分区数据会覆盖目标表同一分区的数据。
  4. 自动构建索引:写入时同步构建索引,写入任务完成,目标表则具备索引,可提升查询性能。

注意事项:
不能同时通过INSERT OVERWRITE INTO SELECT和实时写入方式(INSERT INTO、REPLACE INTO、DELETE、UPDATE)向同一个表中写入数据,否则实时写入的数据会被丢弃。

语法:

INSERT OVERWRITE INTO table_name [(column_name,...)]
query;table_name:表名。
column_name:列名。
query:SELECT查询语句。

query中的查询数据必须和目标表CREATE TABLE语句中声明的列的顺序与类型一致,或少于目标表列。SELECT语句中的列数比目标表中的列数多,会写入失败;如果SELECT语句中的列数比目标表中的列数少,写入数据时,目标表中多出的列会自动填充默认值,无默认值时值为NULL。

示例:
以指定列名的方式,从order_info1,order_info2 表中复制某几列数据到new_order_info 表中。

INSERT OVERWRITE INTO new_order_info (order_no, order_name, mount,stt_ym)
SELECT a.order_no, b.order_name, a.mount, b.stt_ym
FROM order_info1 a,order_info2 b
WHERE a.order_no = b.order_no
and b.stt_ym = '202201';

以指定列名的方式,从order_info1 表中选择order_no列到new_order_info 表中order_no列。

INSERT OVERWRITE INTO new_order_info (order_no)
SELECT order_no
FROM order_info1
WHERE tt_ym = '202201';

异步写入:

  1. 提交任务
    通常使用SUBMIT JOB提交异步任务,由后台调度执行。示例语句如下。
SUBMIT JOB
INSERT OVERWRITE new_adb_table
SELECT * FROM adb_table_name
  1. 写入调优
    在写入任务前增加Hint(/* direct_batch_load=true*/)可以加速写入任务。该Hint可以在节约大量资源的情况下进一步提高写入性能。示例语句如下。
/* direct_batch_load=true*/
SUBMIT JOB
INSERT OVERWRITE new_adb_table
SELECT * FROM adb_table_name

说明 仅3.1.5及以上内核版本支持/* direct_batch_load=true*/。若使用后性能无明显优化,可提交工单进行升级与优化。查看内核版本,请参见如何查看实例版本信息。
3. 进度查询
通过SUBMIT JOB提交写入任务后会返回job_id。以该job_id为条件查询写入任务的状态,示例语句如下。

show job status where job='<job_id>'

返回结果status列为FINISH,则写入任务完成。

云原生数据仓库AnalyticDB Mysql(ADB分析型数据库)-DML语法之新增插入数据详解相关推荐

  1. 阿里云原生数据仓库AnalyticDB MySQL版学习

    阿里云原生数据仓库AnalyticDB MySQL版是融合数据库.大数据技术于一体的阿里云原生企业级数据仓库服务.AnalyticDB MySQL版支持高吞吐的数据实时增删改.低延时的实时分析和复杂E ...

  2. 云原生数据仓库AnalyticDB MySQL版用户手册

    控制流函数 - 云原生数据仓库AnalyticDB MySQL版 - 阿里云 [ps:常用的adb函数] 备注:一些mysql函数adb不支持

  3. 前沿分享|阿里云数据库解决方案架构师 王宏宇:云原生数据仓库AnalyticDB在零售行业的深度应用和业务价值

    简介:本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,阿里云数据库解决方案架构师 王宏宇关于"云原生数据仓库AnalyticDB在零售行业的深度应用和业 ...

  4. 云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验

    简介:2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定.除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下面我 ...

  5. 双11专刊|云原生数据仓库AnalyticDB支撑双11,大幅提升分析实时性和用户体验

    简介:2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定.除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下面我 ...

  6. 云原生数据仓库 AnalyticDB 支撑双11,大幅提升分析实时性和用户体验

    一 前言 2021年双十一刚刚落幕,已连续多年稳定支持双十一大促的云原生数据仓库AnalyticDB,今年双十一期间仍然一如既往的稳定.除了稳定顺滑的基本盘之外,AnalyticDB还有什么亮点呢?下 ...

  7. 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录

    北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...

  8. 原生数据库PolarDB和云原生数据仓库AnalyticDB的优势在哪里?

    原生数据库PolarDB和云原生数据仓库AnalyticDB的优势在哪里? 李飞飞,现任阿里巴巴集团副总裁.高级研究员,阿里云智能数据库事业部总负责人.美国计算机协会ACM杰出科学家,加入阿里巴巴之前 ...

  9. 以“升舱”之名,谈谈云原生数据仓库AnalyticDB的核心技术

    背景 说到升舱,我们首先想到的是飞机经济舱升级到商务舱.头等舱.阿里云企业级云原生数据仓库AnalyticDB(以下简称ADB)[1]在帮助以金融机构为主的行业数字化转型和传统数仓升级项目中,也引用了 ...

最新文章

  1. python实现人像美颜
  2. SQL注入原理及产生过程
  3. C# 温故知新 基础篇(7) 接口思维导图
  4. c语言读写nfc,Android NFC M1卡读写芯片卡读写(CPU卡读写)(RFID读写)
  5. 亚洲综合竞争力排名发布:韩国位居第1,中国第9,大家怎么看?
  6. MySQL初识-架构-安装-初始化-连接-管理工具-数据文件
  7. php study是什么,phpstudy与wamp区别的区别是什么?
  8. python *args 和 **kwargs
  9. python自动批量发邮件脚本_python自动发送邮件脚本
  10. 黑暗城堡(最短路径树)
  11. WLAN中的MIMO技术详解
  12. POJ 1185 炮兵阵地
  13. AI识别照片是谁,人脸识别face_recognition开源项目安装使用 | 机器学习
  14. 中国己内酰胺市场前景策略分析与投资调研评估报告2022年版
  15. 【转】SD Card - UHS-I UHS Speed Class 1
  16. WPS Word二级标题自动编号,本来应该是2.1,可是却变成1.3,怎么办?
  17. QT Linux实现AT指令处理框架
  18. 09-面向对象综合训练综合练习
  19. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中
  20. SF笔试编程1:幸运数

热门文章

  1. 用户福利-ArchSummit全球架构师峰会 优惠码
  2. makefile编写知识小结
  3. 仿【得物】微信小程序实战全教程
  4. html5 签到墙,创意头脑风暴!5种个性签名墙设计超有范儿
  5. 评价类问题解决方法及模型汇总
  6. 【课设分享】基于51单片机的恒温控制器系统
  7. mysql 每个分类前十名_一文解决所有MySQL分类排名问题
  8. 如何将iPhone升级到ios 14
  9. 公众号查题接口 搜题搭建
  10. 台式计算机品牌及价格,全球十大台式电脑品牌 联想拥有良好的品质和适合的价格...