开发者学堂课程【数据仓库 ACP 认证课程:【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/928/detail/14625
【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3
3.删除数据/分区/表
AnalyticDB for MySQL提供多种数据删除方式,主要语句为DELETE与TRUNCATE。推荐策略为∶
l 数据删除频率低、基于主键为条件的删除,可通过DELETE FROM WHERE PK='xx'删除数据。
l 数据删除频率低、基于任意条件的删除,可通过DELETE删除数据。
如果数据删除频率低一般都用DELETE完成,删除大量数据可以通过TRUNCATE完成,并且TRUNCATE可以删除表中某一分区。
l 通过TRUNCATE TABLE db_name.table_name PARTITION partition_name册除指定二级分区。
l 通过TRUNCATE TABLE db_name.table_name删除指定表(包括所有二级分区)数据。
4.批量导入数据
AnalyticDB for MySQL支持多种数据源,实现数据导入导出。批量导入适用于大数据量导入的场景,导入过程中可以查询旧数据,导入操作完成后一键切换新数据。导入失败时,支持回滚新数据,不影响查询旧数据。
l 从大数据系统、大存储环境导入数据,采用INSERT OVERWRITE INTO SELECT方式处理,如从MaxCompute、OSS导入数据到AnalyticDB for MySQL;
l 批量导入单个表时,导入任务会在系统中串行执行;批量导入多个表时,导入任务会在系统中并行执行,默认并行执行2个任务;
1. 实时导入数据
l AnalyticDB for MySQL实时导入适用于小数据量导入的场景。
l 从业务系统实时导入数据时采用INSERTINTO SELECT FROM,把一个表的数据导入另一个表中。
l 实时导入任务使用AnalyticDB for MySQL中的资源,如果查询数据期间需要导入数据,建议在QPS(Query Per Second,每秒查询率)较低时进行导入操作。导入会耗费资源,如果在用户查询高峰期导入数据,会对正常业务带来影响。
四、操作演示——创建数据仓库并完成数据同步
把RDS MySQL中一张表的数据导入进ADB MySQL中,实现数据导入。
过程分为6个步骤:
1. 在ADB MySQL创建高权限账号
2. 创建数据库
3创建RDS MySQL外表
4.创建AnalyticDB MySQL表
5.转储RDS MySQL的数据到AnalyticDB MySQL中
6.导入数据验证
实验以ADS官方文档进行操作。通过已经建好的ADS MySQL集群以及RDS实例,将数据从RDS中导入进ADS MySQL中。RDS MySQL实例需与AnalyticDB MySQL集群在同一个VPC下。
为了保证AnalyticDB MySQL能访问RDS,需要将RDS设置白名单。默认白名单为1.27.0.1,表示禁止所有地址访问。复制专有网络的地址后修改RDS白名单
RDS数据库创建账号登录DMS。使用root创建数据库账号,获取最高权限。设置密码。
访问数据库在数据库连接中获取地址,获取地址后创建外部表可以用到。
此时需要创建两个表,一个是adb数据局的表,一个是外部表,通过外部表来实现数据的导入导出。首先需要登录到集群当中,创建账号,创建一个最高权限的账号,名称为root,同时设置密码。
此时对于adb mysql集群来说,如果想要通过外表的方式导入数据,需要打开网络,然后此时可以连接集群,在集群中创建对应数据库及web的映射表。
默认数据库有两个,此时需要创建一个自己的数据库,命名为adb.demo,此时可以访问它,在adb当中再创建一张外部表,创建语句为:
CREATE TABLE IF NOT EXISTS goods_external_table (
goods_id bigint(20) NOT NULL,
price double NOT NULL, class bigint(20) NOT NULL,
name varchar(32) NOT NULL,
update_time timestamp,
PRIMARY KEY (goods_id)
)
ENGINE='mysql' TABLE_PROPERTIES='{
"url":"jdbc:mysql://rm-bp1925ru5x6pzt2m3.mysql.rds.aliyuncs.com.3306/test_adb",
"tablename":"goods",
"username":"root",
"password":"zhou_123456"
}';
此时已经完成了外部表的创建,此时需要在adb mysql当中创建自己的表,代码如下:
CREATE TABLE IF NOT EXISTS mysql_import_test (
goods_id bigint(20) NOT NULL,
price double NOT NULL,
class bigint(20) NOT NULL,
name varchar(32) NOT NULL,
update_time timestamp, PRIMARY KEY (goods_id)
)
DISTRIBUTED BY HASH(goods_id);
此时有了外部表和一个adb的表,此时可以通过insert来完成数据的导入导出,此时执行代码如下:
Insert inte mysql_import_test select * from good_external_table;
//导入操作
此时执行,可以看到执行一条语句成功,此时打开表,可以看到已经显示。
此时完成了一次数据导入的过程。把rds mysql的数据导入到了adb mysql当中。
此时案例演示结束。
五、试题
1. 在AnalyticDB MySQL中,_____尽可能需要将Join的字段作为分布键。例如订单表和用户表通过user_id做join,这两张表都可用user_id做分布。
A,.本地化原则
B. 均匀性原则
C. 分布式原则
D. 复制原则
解析:
A,此种方式可以保证join在本节点完成,不需要做数据的传输,又例如提高性能。
2. 在AnalyticDB MySQL版中,冷数据指的是访问频次较低的数据,采用______存储,满足存储空间的需求。
A. SSD
B. HDD
C. SSHD
D. SHDD
解析:
B,AnalyticDB MySQL一个显著的特征是实现了冷热数据分层,在创建表时,可以指定表是以热、冷还是温数据存储。热数据是存储在SSD(准确的说是ESSD)冷数据是存在OSS。
3. 在AnalyticDB MySQL版中,为什么需要全量同步?
A. 源库历史数据的binlog可能已经删除
B. 开启同步钱源表中已有数据,必须通过全量数据同步来同步
C. 全量同步可以并行拉取和同步,大量历史数据的同步性能较好
D. AnalyticDB MySQL端的表结构需要全量同步来创建。
解析:
AC,源库历史数据的binlog可能已经删除,此时无法通过日志触放的方式来完成数据的导入,只能通过全量方式来实现。同时,全量同步根据主键来进行划分,划分之后每一部分数据可以并行来处理,具有较好的性能。
4. 在AnalyticDB MySQL版中,下列有关查询优化手段说法正确的是_______。
A. 查询过滤条件中指定分部间或分区建可以进行分区裁剪,减少扫描数据量。
B. 过滤条件中的列确保创建索引,才能支持条件下推
C. 对于筛选率比较低的过滤条件,可以指定列no-index进行调选
D. 聚集索引可以建多个,比如既要按照卖家id频繁访问,又要按照品牌id频繁访问,那可以建2个聚集索引
解析:
ABC,一个表上只能创建一个聚集索引,因为聚集索引会造成数据重分布,如果有多个聚集索引,数据不知按哪个进行分布。
六、回顾与总结