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

这篇具有很好参考价值的文章主要介绍了云原生数据仓库AnalyticDB Mysql(ADB分析型数据库)-DML语法之新增插入数据详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

云原生数据仓库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,则写入任务完成。文章来源地址https://www.toymoban.com/news/detail-550563.html

到了这里,关于云原生数据仓库AnalyticDB Mysql(ADB分析型数据库)-DML语法之新增插入数据详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql Docker 容器重启后数据库数据丢失分析

    项目复用nacos的mysql数据库且msyql容器已存在,之前已新建好数据库并插入数据。本次需要更新数据库表结构和数据。重启myql导致数据库数据丢失。 另外,本次事故是昨天发生未及时记录,日志不够详细。 本次需要更新数据库表结构和数据,通过dbviewer操作失败报 异常,部分

    2024年02月01日
    浏览(37)
  • 【腾讯云 TDSQL-C Serverless 产品测评】- 云原生时代的TDSQL-C MySQL数据库技术实践

    “腾讯云 TDSQL-C 产品测评活动”是由腾讯云联合 CSDN 推出的针对数据库产品测评及产品体验活动,本次活动主要面向 TDSQL-C Serverless版本,初步的产品体验或针对TDSQL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并发、可靠性等多方面的产品测评。 有幸在CSDN的推广上

    2024年02月11日
    浏览(34)
  • AnalyticDB for PostgreSQL 实时数据仓库上手指南

    2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL,4核16G 50GB 1个月 推荐场景: 构建的企业专属Chatbot 立即试用 简介:  AnalyticDB for PostgreSQL 提供企业级数据仓库云服务,基于开源Greenplum构建,采用MPP架构,支持1000+节点PB级数据的实时分析。 云数据库AnalyticDB for

    2024年02月01日
    浏览(29)
  • 【MySQL数据库 | 第十九篇】SQL性能分析工具

    目录   前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结:         本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更好的对SQL语句进行优化。虽然我们在自己练习的时候对这种优化感知并不明显,但是如果我们要

    2024年02月09日
    浏览(35)
  • 使用Apache Doris自动同步整个 MySQL/Oracle 数据库进行数据分析

    Flink-Doris-Connector 1.4.0 允许用户一步将包含数千个表的整个数据库(MySQL或Oracle )摄取到Apache Doris(一种实时分析数据库)中。 通过内置的Flink CDC,连接器可以直接将上游源的表模式和数据同步到Apache Doris,这意味着用户不再需要编写DataStream程序或在Doris中预先创建映射表。

    2024年02月09日
    浏览(42)
  • 数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库

    通过pandas实现数据库的读,写操作时,首先需要进行数据库的连接,然后通过调用pandas所提供的数据库读写函数与方法来实现数据库的读写操作。 Pandas提供了3个函数用于数据库的读操作 read_sql_query() 可以实现对数据库的查询操作,但是不能直接读取数据库中的某个表,需要

    2024年01月16日
    浏览(38)
  • MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

    本篇博客深入详细地介绍了数据库索引的概念和重要性。内容包含:索引的概念和目标、索引的优点与缺点。此外,博客还深入解析了三种主要的索引结构:B-Tree、B+Tree和Hash,提供了详细的结构解析和优化方法,并通过插图进一步增强了理解。 博客的部分内容专注于对B-Tr

    2024年02月21日
    浏览(40)
  • MySQL的index merge(索引合并)导致数据库死锁分析与解决方案

    在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。 index merge(索引合并):该数据库查询优化的一种技术,在mysql 5.1之后进行引入,它可以在多个索引上进行查询,并将结果合并返回。 在

    2024年02月08日
    浏览(35)
  • 十万字图文详解mysql、redis、kafka、elasticsearch(ES)多源异构不同种类数据库集成、数据共享、数据同步、不同中间件技术实现与方案,如何构建数据仓库、数据湖、数仓一体化?

    数据库大数据量、高并发、高可用解决方案,十万字图文详解mysql、redis、kafka、elasticsearch(ES)多源异构不同种类数据库集成、数据共享、数据同步、不同中间件技术实现与方案,如何构建数据仓库、数据湖、数仓一体化?Delta Lake、Apache Hudi和Apache Iceberg数仓一体化技术架构

    2024年02月07日
    浏览(33)
  • 基于python淘宝商品数据爬虫分析可视化系统 网络爬虫+Flask框架+MySQL数据库 大数据 毕业设计

    python语言、Flask框架、淘宝商品数据、selenium网络爬虫、MySQL数据库、数据分析、Echarts可视化大数据毕业设计、爬取 Selenium网络爬虫淘宝商品数据可视化系统是一个基于Python和Selenium的Web爬虫应用程序,可以实现对淘宝上特定商品的价格、销量、评价等数据进行自动化抓

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包