DRDS不支持直接连接DRDS实例执行DDL语句,必须通过天翼云DRDS控制台创建逻辑库表、设置分片算法、修改表、执行DDL、创建全局序列等操作。
创建表
DRDS对数据库的DDL语句进行了扩展,扩展的DDL语句包括:设置分片规则、新增全局序列、新增全局索引,DDL语句可在管理平台进行批量导出及批量执行,方便管理人员可通过脚本的方式对逻辑库结构进行维护。
创建分片表样例如下:
create table employee
(
employee_id int not null comment '雇员标识',
name varchar(100) not null comment '雇员名称',
email varchar(30) comment 'email地址',
create_date datetime comment '创建时间',
c_id int comment '区域标识',
primary key (employee_id)
)engine=innodb default charset=utf8;
sharding @@table name='acct_balance_obj' set type='sharding' and sharding_algo='PartitionByMod' and sharding_id='employee_id' and dn='';//dn按照实际填写。
分片算法
设置分片规则时需要使用到分片算法,总共有6种分片算法,详见下表:
分片算法名称 分片算法ID 算法参数及示例 可用于库内分表 取模分片 PartitionByMod 是 字符串hashCode取模分片 PartitionByStringMod 是 枚举分片 PartitionByFileMap map_file='{"1":"0","2":"1"}' 表示分片键值为1的数据落到第一个分片上,分片键值为2的数据落到第二个分片上
default_node='0' 表示分片键值为其它值的数据落到默认第一个分片上
否 时间范围分片 PartitionByDateRange start_date='2018-07-10' 表示开始日期
time_unit_len='1' 表示日期周期
time_unit_type='year' 表示时间单位,可选值为[day,week,month,year]之一
库内分片参数:inner_start_date、 inner_time_unit_len、inner_time_unit_type
参数含义同上
是 枚举分组取模分片 PartitionByEnumAndMod sharding_area='name'表示分组键字段
map_file='{"1":"0,1","2":"2,3"}' 表示分组键值为1的数据落到第1和第2个分片,分组键值为2的数据落到第3和第4个分片
default_node='0' 表示分组键值为其它的数据落到默认第1个分片
否 枚举分组字符串hashCode取模分片 PartitionByEnumAndStringMod sharding_area='employee_id' 表示分组键字段
map_file='{"BJ":"0","SH":"1"}' 表示分组键值为BJ的数据落到第1分片,分组键值为SH的数据落到第2个分片
default_node='2' 表示分组键值为其它的数据落到默认第3个分片
否
设置分片规则
各种表类型的分片规则DDL语法,详见下表:
表类型 语法 示例 分片表 sharding @@table name='' set type='sharding' and sharding_algo=' ' and sharding_id=' ' [ and algo_parameter='algo_value']… [and dn=' ']; sharding @@table name='employee' set type='sharding' and sharding_algo='PartitionByEnumAndStringMod' and map_file='{"BJ":"0","SH":"1"}' and default_node='2' and sharding_id='employee_id' and sharding_area='area_id' and dn='drdstest_1,drdstest_2,drdstest_3'; 分片表+库内分表 sharding @@table name=' ' set type='inner' and sharding_algo=' ' and sharding_id=' ' [ and algo_parameter='algo_value']… and inner_sharding_algo=' ' and inner_sharding_id=' ' [ and inner_algo_parameter='algo_value']… and inner_total=' ' [and dn=' ']; sharding @@table name=’employee’ set type='inner' and sharding_algo='PartitionByFileMap' and map_file='{"1":"0","2":"1"}' and default_node='0' and sharding_id='employee_id' and inner_sharding_algo='PartitionByDateRange' and inner_sharding_id='area_id' and inner_start_date='2018-07-10' and inner_time_unit_len='1' and inner_time_unit_type='year' and inner_total='2' and dn='drdstest_1,drdstest_2'; 分桶表 sharding @@table name=' ' set type='sharding' and sharding_algo=' ' and sharding_id=' ' [ and algo_parameter='algo_value']… and buckets=’ ’ [and dn=' ']; sharding @@table name='bucket' set type='sharding' and sharding_algo='PartitionByFileMap' and map_file='{"1":"0","2":"1","3":"2"}' and default_node='0' and sharding_id='employee_id' and buckets='2'; 单片表+库内分表 sharding @@table name=' ' set type=' inner ' and inner_sharding_algo=' ' and sharding_id=' ' [ and inner_algo_parameter='algo_value']… and inner_total=' ' and dn=' '; sharding @@table name='single_inner' set type='inner' and inner_sharding_algo='PartitionByMod' and inner_sharding_id='employee_id' and inner_total='2' and dn='drdstest_1'; 单片表 sharding @@table name=' ' set type=' single ' and dn=' '; sharding @@table name='single' set type='single' and dn='drdstest_1'; 全局表 sharding @@table name=' ' set type='global' [and dn=' ']; sharding @@table name='global' set type='global';
全局序列
操作类型 语法 示例 创建序列
seqop @@addseq name=' ' and value=' ' and increment=' ' and min=' ' and isCycle=' '; seqop @@addseq name='SEQ_EMPLOYEE_ID' and value='1' and increment='1000' and min='1' and isCycle='false'; 删除序列 seqop @@deleteseq name=' '; seqop @@deleteseq name=' SEQ_EMPLOYEE_ID ';