阿里云大数据ACP认证学习笔记之——————AnalyticDB for MySQL
基本概念OLTP:On-Line Transaction Processing,联机事务处理,例如MySQL和PostgreSQL的数据存储,适合频繁的数据插入和修改。OLAP:On-Line Transaction Processing,联机分析处理,采用关系模型进行数据存储,例如ADB MySQL,适合海量数据的计算分析。OLAP(联机事务处理)系统分为MOLAP(多维OLAP)、ROLAP(
·
基本概念
- OLTP:On-Line Transaction Processing,联机事务处理,例如MySQL和PostgreSQL的数据存储,适合频繁的数据插入和修改。
- OLAP:On-Line Transaction Processing,联机分析处理,采用关系模型进行数据存储,例如ADB MySQL,适合海量数据的计算分析。OLAP(联机事务处理)系统分为MOLAP(多维OLAP)、ROLAP(关系OLAP)和HOLAP(混合型OLAP)三种。
- DTS:Data Transmission Service,数据传输服务。
- CBO:Cost-Based Optimization,分析型数据库高度智能的优化策略。
- ECU:弹性计算单元,拥有多种型号,每种型号的ECU,标识着不同的vCPU核数、内存大小、磁盘空间大小;以及初始的ECU数量(必须是偶数个,至少两个),ECU型号DB创建后不可修改,ECU数量可以在使用中随时调整(扩容/缩容)。
- 聚集列:数据存储支持按一列或多列进行排序,保证该列中值相同或相近的数据保存在磁盘同一位置。
- multivalue:多值列,用于表示一个列中(Cell)有多个不确定的值,一个多值列字段可以包含多种ADB支持的数据类型。可使用in,contains条件对该列的单个值进行查询;不允许在没有进行枚举查询时对该列直接select或在group by中使用该列。
- 支持json索引。
- ADS支持事务,默认为强一致性。
表组
表组类似于传统数据库中的Schema,分为维度表组(系统自带)和普通表组。
- 维度表组
- 维度表组用于存放维度表(特征上是一种数据量较小但是需要和任何表进行关联的表);
- 目前有且仅有一个,并且在分析型数据库数据库建立时会自动创建,用户不可修改和删除;
- 维度表数据量较小;
- 维度表可以和任意表组的任意表进行关联,并且创建时不需要配置分区信息。
- 普通表组
- 表组在创建时需要指定两个参数executeTimeout & minRedundancy,minRedundancy表示该表组的副本数,默认为2,可配置为1、2、4、8;
- 表组的副本数越多,可以一定程度的增加ADS的最大承受的QPS,但是数据存储费用也会相应增加;
- 如果将一个表组配置为1副本,那么这个表组中的表在数据导入时会有不可用的时间;
- minRedundancy修改后需要下次装载数据时才会生效;
- 一个事实表组最多可以创建256个事实表;
- ADS要求一个表组下所有表的一级分区数目一致,一个表组所有表副本数一致;
- 在ADS中一个表必须从属于一个表组;
- 仅允许删除没有任何表的空表组,维度表组不允许删除;
分区
- 普通表才有分区的概念。
- ADB 2.0支持两级分区策略,一级分区采用HASH算法,单表数据量在60亿条以内;二级分区采用LIST算法,单表最大二级分区1095个。
- 目前ADB 3.0只支持一级分区。一级分区数不能超过256个。
- 不支持多列作为分区列。
- 没有限定最大分区数,系统会自动调整到最优值。
- 维度表没有分区定义,只有普通标有分区。
- 一张事实表至少有一级Hash分区并且分区数不能小于8个;
- 一个事实表最多不能超过1024个列。
- 分析型数据库的表根据updateType分为批量更新表(仅能够离线批量更新数据)和实时更新表(能够通过 insert/delete实时更新数据),默认为批量更新表;updateType=realtime即为实时更新表时,必须指定合法的主键并且不能有二级分区,能够通过insert/delete实时更新数据。
- 批量更新,则该表需要保证有两级分区且第二级分区必须是list分区,才能保证新增数据不会覆盖原有历史数据。
SQl语句
- Join
- 两个表进行关联的充要条件
- 两个表均为事实表且在同一个表组,或两个表中有一个是维度表;
- 两个表均为事实表且拥有相同的一级分区列,或两个表中有一个是维度表;
- 两个表的join key是hash分区列;
- 两张表的join key至少有一列建立了hash map索引;
- 维度表可以和任意表组的任意表进行关联。
- Insert
- 在分析型数据库中,能够实时插入的表一定要定义主键或组合主键;
- 分析型数据库在进行数据插入时,若发现同主键的数据时,默认执行覆盖行为;
- 若使用insert ignore语法,则在发现有同主键的数据时,丢弃新插入的数据,保留原有数据。
- 不支持语句(MaxCompute SQL中支持join、left join、right join、full join)
- SELECT ... FROM A FULL JOIN B:不支持全连接;
- SELECT ... FROM A RIGHT JOIN B:不支持右连接,需要转换为左连接;
- SELECT ... FROM A SEMI JON B:不支持半连接;
- SELECT ... FROM A, B:单表或多表连接,但没有ON条件;
- SELECT ... FROM A, B WHERE A.a = B.b:单表或多表连接在WHERE子句中有隐含ON条件,但是没有on子句的,暂不支持。
数据类型
- boolean布尔类型,值只能是0或1。取值0的逻辑意义为假,取值1的逻辑意义为真,存储字节数1比特位;
- 分析型数据库MySQL版不支持无符号类型(unsigned),由于MySQL/Oracle支持,所以在迁移时可以将源表的字段修改为varchar类型或者bigint类型。
- float和double分析型数据库MySQL版都不支持自定义m和d,MySQL支持。
- double双精度浮点数,IEEE标准,存储字节数8字节;bigint大整数类型,存储字节数8字节。
- ADB中的varchar对应MySQL中的char、varchar、text、mediumtext或者longtext。
执行计划
- EXPLAIN查看执行计划
- explain正确执行后返回信息中,第一行为逻辑计划,第二行为物理计划;
- EXPLAIN命令返回文本格式的查询计划;
- 逻辑计划各个节点说明:
- SelectNode表示这select中最终输出表达式的相关信息, 例如select要输出的表达式集合;
- GroupNode表示GroupBy语句的相关信息,例如groupby的列,having的表达式等;
- OrderByNode表示OrderBy的列信息,例如列名,顺序等;
- JoinNode表示逻辑Join树的信息,例如join的on条件;
- TableNode表示分区表的信息,例如参与计算的列,表名等。
账号和权限管理
- 高权限账号:只能通过控制台创建,一个集群只有一个,可以管理所有的普通账号和数据库。
- 普通账号:只能在SQL创建和管理,需要被授予指定数据库的权限。
- ADS集群支持以下四个粒度的权限控制:
- GLOBAL:集群级别
- DB:数据库级别
- TABLE:表级别
- COLUMN:列级别
- 导入一个新的ODPS表时,公有云用户需要在ODPS中授权该表给分析型数据库的导入用账号。
- 分析型数据库目前不支持针对用户在host上授权;
- 导出数据同时需要 DUMP DATA 和 SELECT 权限,同时需要数据导出目的地的数据写入相关权限;
- 聚合: Database -> Table[Group] -> Column,即每个权限级别能聚合其下面级别的所有权限;
- 查询表数据需要 SELECT 权限,最小级别是列;
更多推荐
所有评论(0)