基本概念

  • 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,分为维度表组(系统自带)和普通表组。

  • 维度表组
  1. 维度表组用于存放维度表(特征上是一种数据量较小但是需要和任何表进行关联的表);
  2. 目前有且仅有一个,并且在分析型数据库数据库建立时会自动创建,用户不可修改和删除;
  3. 维度表数据量较小;
  4. 维度表可以和任意表组的任意表进行关联,并且创建时不需要配置分区信息。
  • 普通表组
  1. 表组在创建时需要指定两个参数executeTimeout & minRedundancy,minRedundancy表示该表组的副本数,默认为2,可配置为1、2、4、8;
  2. 表组的副本数越多,可以一定程度的增加ADS的最大承受的QPS,但是数据存储费用也会相应增加;
  3. 如果将一个表组配置为1副本,那么这个表组中的表在数据导入时会有不可用的时间;
  4. minRedundancy修改后需要下次装载数据时才会生效;
  5. 一个事实表组最多可以创建256个事实表;
  6. ADS要求一个表组下所有表的一级分区数目一致,一个表组所有表副本数一致;
  7. 在ADS中一个表必须从属于一个表组;
  8. 仅允许删除没有任何表的空表组,维度表组不允许删除;

分区

  • 普通表才有分区的概念。
  • ADB 2.0支持两级分区策略,一级分区采用HASH算法,单表数据量在60亿条以内;二级分区采用LIST算法,单表最大二级分区1095个。
  • 目前ADB 3.0只支持一级分区。一级分区数不能超过256个。
  • 不支持多列作为分区列。
  • 没有限定最大分区数,系统会自动调整到最优值。
  • 维度表没有分区定义,只有普通标有分区。
  • 一张事实表至少有一级Hash分区并且分区数不能小于8个;
  • 一个事实表最多不能超过1024个列。
  • 分析型数据库的表根据updateType分为批量更新表(仅能够离线批量更新数据)和实时更新表(能够通过 insert/delete实时更新数据),默认为批量更新表;updateType=realtime即为实时更新表时,必须指定合法的主键并且不能有二级分区,能够通过insert/delete实时更新数据。
  • 批量更新,则该表需要保证有两级分区且第二级分区必须是list分区,才能保证新增数据不会覆盖原有历史数据。

SQl语句

  • Join
    • 两个表进行关联的充要条件
  1. 两个表均为事实表且在同一个表组,或两个表中有一个是维度表;
  2. 两个表均为事实表且拥有相同的一级分区列,或两个表中有一个是维度表;
  3. 两个表的join key是hash分区列;
  4. 两张表的join key至少有一列建立了hash map索引;
  5. 维度表可以和任意表组的任意表进行关联。

 

  • Insert
  1. 在分析型数据库中,能够实时插入的表一定要定义主键或组合主键;
  2. 分析型数据库在进行数据插入时,若发现同主键的数据时,默认执行覆盖行为;
  3. 若使用insert ignore语法,则在发现有同主键的数据时,丢弃新插入的数据,保留原有数据。
  • 不支持语句(MaxCompute SQL中支持join、left join、right join、full join)
  1. SELECT ... FROM A FULL JOIN B:不支持全连接;
  2. SELECT ... FROM A RIGHT JOIN B:不支持右连接,需要转换为左连接;
  3. SELECT ... FROM A SEMI JON B:不支持半连接;
  4. SELECT ... FROM A, B:单表或多表连接,但没有ON条件;
  5. 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查看执行计划
  1. explain正确执行后返回信息中,第一行为逻辑计划,第二行为物理计划;
  2. EXPLAIN命令返回文本格式的查询计划;
  • 逻辑计划各个节点说明:
  1. SelectNode表示这select中最终输出表达式的相关信息, 例如select要输出的表达式集合;
  2. GroupNode表示GroupBy语句的相关信息,例如groupby的列,having的表达式等;
  3. OrderByNode表示OrderBy的列信息,例如列名,顺序等;
  4. JoinNode表示逻辑Join树的信息,例如join的on条件;
  5. TableNode表示分区表的信息,例如参与计算的列,表名等。

账号和权限管理

  1. 高权限账号:只能通过控制台创建,一个集群只有一个,可以管理所有的普通账号和数据库。
  2. 普通账号:只能在SQL创建和管理,需要被授予指定数据库的权限。
  3. ADS集群支持以下四个粒度的权限控制:
  • GLOBAL:集群级别
  • DB:数据库级别
  • TABLE:表级别
  • COLUMN:列级别
  1. 导入一个新的ODPS表时,公有云用户需要在ODPS中授权该表给分析型数据库的导入用账号。
  2. 分析型数据库目前不支持针对用户在host上授权;
  3. 导出数据同时需要 DUMP DATA 和 SELECT 权限,同时需要数据导出目的地的数据写入相关权限;
  4. 聚合: Database -> Table[Group] -> Column,即每个权限级别能聚合其下面级别的所有权限;
  5. 查询表数据需要 SELECT 权限,最小级别是列;

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐