华为云分布式数据库 DDM 如何创建逻辑表
1、在管理控制台左侧菜单栏选择“DDM实例管理”,进入“DDM实例管理”页面。
2、单击DDM实例名称,进入实例基本信息页面。

3、在实例基本信息页面,选择“逻辑库管理”选项卡,查看DDM实例逻辑库。
找到需要新增逻辑表的逻辑库,单击逻辑库右侧的“创建逻辑表”,进入“创建逻辑表”页面。


4、配置逻辑表参数。
逻辑表类型:
分片表。“分片表”模式下,逻辑表的数据将被按照拆分规则,分到各个分片中存储。
全局表。每一个分片上存储全量的数据。
拆分算法:
拆分规则对分片表适用。将逻辑表中数据拆分到多个数据库分片上的算法。
Hash:数据分布比较均匀。
Range:适合范围类操作较多的场景。
算法元数据:
该参数仅当“拆分算法”为“Range”时有效。用于定义数据库分片对应的数据拆分规则,格式如下:
算法元数据定义格式:取值范围=分片序号。
取值范围定义格式:起始值-结束值。起始值、结束值为非负整数,对应拆分键的一段取值范围,通过中横线连接。取值范围为双闭区间即包括起始值、结束值。取值范围不能有交集。
分片序号与数据库分片名称中的后缀数字对应,最小值为0,最大值为逻辑库分片数减1,例如分片db_test_0000对应的分片序号是0。
对应同一分片的多个取值范围可以写在一行,逗号分隔,也可以分成多行描述。
支持以#或//开头的注释。
示例:
# range start-end ,data node index
// comment
0-100,101-300,301,302-500=0
600-700=1 //取值范围(起始值-结束值)=分片序号
701-800=1
801-900=2
默认分片:
“拆分键”取值不在“算法元数据”定义范围内的记录,保存到默认分片。
分片序号与数据库分片名称后缀的数字对应,最小值为0,最大取值为逻辑库分片数减1。
拆分键:
根据何种条件进行拆分,仅当“逻辑表类型”为“分片表”时该参数有效。拆分键即在水平拆分过程中用于执行拆分算法的数据表字段,指定数据表字段后,还可以进一步选择日期函数,也可以手动输入“日期函数(字段名)”,数据表字段必须是日期类型(date、datetime、timestamp),日期函数适用于需要按时间(年、月、日、周及其组合)对数据进行拆分的场景。
日期函数拆分算法取值如下:
1.日期函数返回类型为数字型的,支持Hash、Range拆分算法:
-day:每月中的第几天,取值为1-31。
-year:年份,如2018。month:月份,取值为1-12。
-weekofyear:每年内第几周,取值为1-53。关于周的定义请参见MySQL官 网weekofyear函数或ISO标准(ISO8601 week algorithm)。例如 2016-0 1-01是2015年的第53周,2016-01-04才是2016年的第1周
-dayofyear:每年中的第几天,1-366。
-dayofweek:星期几,取值为1-7(1=周日、2=周一...)。
-yyyymm:年月,如201801、201812。
-yyyyweek:年周,如201801、201853。关于年份、周数的定义与weekofy ear的说明相同。
-yyyyddd:年日,如2018001、2018365。
2.日期函数返回类型为字符串型的,只支持Hash拆分算法,不支持range拆分算法:
-mmdd:月日,如0101、1231。 说明:拆分键输入框可以输入分片字段的名 称,也可以输入日期函数和分片字段的组合
全局序列:
无:不使用全局序列。
TIME:使用DDM服务器时间戳作为全局序列ID。
DB:从数据库获取序列号作为全局序列ID。设置序列起始值和序列步长,序列步长为单次从数据库获取的序列号数量。
例如:“序列起始值”为1000000000,“序列步长”为500,则第一次从数据库获取500个序列号,获取的id为1000000001~1000000500,id使用完后,再按顺序获取接下来的500个序列号。
建表SQL:
用于创建逻辑表的SQL语句。
当“全局序列”设置为“DB”或者“TIME”时,建表SQL中必须存在主键,且主键必须指定为AUTO_INCREMENT属性。如果设置为“TIME”,主键必须为BIGINT类型。
建表SQL如下:
CREATE TABLE `staff_info` ( `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `staffName` VARCHAR(40) NOT NULL, `sex` ENUM('F','M','S'), `phone` VARCHAR(16), `email` VARCHAR(40), `employedDate` DATE, `department` VARCHAR(40)) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
主键id被定为AUTO_INCREMENT属性后,插入数据时会被赋予一个唯一值,不需要在SQL中指定。对应的数据插入举例如下:
INSERT INTO staff_info (staffName,sex,phone,email,employedDate,department) VALUES ('Bill','S','19812345678','Bill@ddm.example.com','2017-01-01','Depart.A');
说明:
1.一次只能创建一张逻辑表。不支持同时执行多条建表SQL,即使拆分键名称完全相同。
2.只支持填写一条建表SQL语句,不支持执行除创建逻辑表以外的其他DDL、DML语句,比如ALTER TABLE之类的语法。
3.创建“全局序列”为“DB”或者“TIME”的表之后,用MySQL连接DDM插入数据时:
-建议不要给主键ID赋值,否则可能导致数据插入失败。
-如需给主键ID赋值,建议取值与“全局序列”的取值范围区分开,否则可能 会导致全局序列生成的主键ID值重复而引起插入失败。
4.建表SQL兼容MySQL注释规范。
5.建议不要在SQL语句中包含注释。

5、单击“确定”,开始创建逻辑表。
如果选择“覆盖RDS分片上残留的同名数据表”,则会先删除RDS分片上残留的同名数据表,再创建新的同名逻辑表。
可以在DDM实例管理页单击“任务进度”,查询创建逻辑表的进度。