Doris数据库---建表、调整表结构操作

Doris数据库---建表、调整表结构操作

一、简介

本文章主讲创建 Doris 自维护的表的语法,以下为本人最近为数据中台接入doris所踩的坑及其解决方案,欢迎点评。

二、doris建表语法:

官网建表语法网址链接:CREATE-TABLE - Apache Doris

官网建表语法如图所示:

目前我们常见建表主要使用字段列(column_definition_list)、引擎(engine_type)、主键设置(keys_type)、表注释(table_***ment)、分桶(distribution_desc)。以下建表示例主要涵盖上面所列。 

三、个人建表示例:

-- test_db.student definition

CREATE TABLE IF NOT EXISTS `test_db`.`student` (
  `stu_num` bigint(20) NULL ***MENT '学生ID编号',
  `gmt_create` datetime NOT NULL ***MENT '创建时间',
  `gmt_modified` datetime NOT NULL ***MENT '修改时间',
  `op_create_id` bigint(20) NOT NULL ***MENT '创建人id',
  `op_modified_id` bigint(20) NOT NULL ***MENT '更新人id',
  `op_create_name` varchar(32) NOT NULL ***MENT '创建人名称',
  `op_modified_name` varchar(32) NOT NULL ***MENT '修改人名称',
  `stu_name` varchar(32) NOT NULL ***MENT '学生姓名',
  `stu_class_name` char NULL ***MENT '学生班级'
) ENGINE=OLAP
UNIQUE KEY(`stu_num`)
***MENT '学生表'
DISTRIBUTED BY HASH(`stu_num`) BUCKETS 32
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"is_being_synced" = "false",
"storage_format" = "V2",
"light_schema_change" = "true",
"disable_auto_***paction" = "false",
"enable_single_replica_***paction" = "false"
);

建表拆解:

1、字段设置:

语法顺序:字段名 字段类型(有长度就带长度,无长度使用默认) 是否非空 默认值(DEFAULT后面加上默认值,默认值要用双引号) 字段注释。

注意:如果是decimal类型的,要注意字段长度和小数点范围:[(precision, scale)] precision: 1 ~ 27 scale: 0 ~ 9。

坑一:字段设置顺序必须按这个语法来。

坑二:目前按我使用的doris数据库建表来看,暂时不支持自增字段(AUTO_INDREMENT)设置,否则会报错:SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = auto increment column is not supported currently.  翻译过来就是currently not supported auto increment 当前不支持自增。

#语法
`stu_num` bigint(20) NOT NULL  DEFAULT "0" ***MENT '学生号码',

2、引擎类型设置:

#设置引擎
ENGINE=OLAP

3、设置主键列

坑一:如果设置主键列,那么主键列必须排在其他字段前面,否则会报错该字段前面还有其他字段。

坑二:浮点数double和float不能作为主键列,string类型也不建议用作主键列。

#设置主键列
UNIQUE KEY(`stu_num`)

4、表注释

#表注释
***MENT '学生表'

5、分桶列:一个doris自建表可以没有分区列,但必须拥有分桶列。

坑一:如果设置了主键列,那么分桶列必须使用主键列字段,否则可以使用非主键列字段。

坑二:设置的分桶列必须按字段设置的顺序进行排序,如设置了字段k1,k2,k3,那么分桶列也得(k1,k2,k3),否则建表会报异常:k3前面还有字段。

6、PROPERTIES 参数设置:

这个一般使用默认值,如需使用可以参考官网。

7、关于double、float和string类型的字段长度问题

在创建doris表时,double、float和string类型不要给长度,否则会报错。其中string类型是超长度类型,在doris数据库中,varchar类型最长是65533,而string类型没有限制,因此在作为数据同步迁移的时候,string类型对应于其他数据库超长度类型(如mysql的longtext)。

语法示例:

money double not null ***ment "金钱"

num float not null ***ment "数量"

remark double not null ***ment "备注"

四、调整表结构

目前实验结果:支持修改表名、表注释、字段类型修改,新增字段,字段注释修改,支持非空修改为空(反之不行,主键列不允许修改非空或者不非空的设置)。标签字段类型修改时要符合转换规则。

1、字段类型转换规范

  • TINYINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE 类型向范围更大的数字类型转换
  • TINTINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE/DECIMAL 转换成 VARCHAR
  • VARCHAR 支持修改最大长度
  • VARCHAR/CHAR 转换成 TINTINT/SMALLINT/INT/BIGINT/LARGEINT/FLOAT/DOUBLE
  • VARCHAR/CHAR 转换成 DATE (目前支持"%Y-%m-%d", "%y-%m-%d", "%Y%m%d", "%y%m%d", "%Y/%m/%d, "%y/%m/%d"六种格式化格式)
  • DATETIME 转换成 DATE(仅保留年-月-日信息, 例如: 2019-12-09 21:47:05 <--> 2019-12-09)
  • DATE 转换成 DATETIME(时分秒自动补零, 例如: 2019-12-09 <--> 2019-12-09 00:00:00)
  • FLOAT 转换成 DOUBLE
  • INT 转换成 DATE (如果INT类型数据不合法则转换失败,原始数据不变)
  • 除DATE与DATETIME以外都可以转换成STRING,但是STRING不能转换任何其他类型

2、 修改表名

#修改表名
ALTER TABLE student RENAME student2;

3、修改表注释

#修改表注释
ALTER TABLE student MODIFY ***MENT "学生信息表"

4、修改字段类型和注释、新增字段、删除字段

坑一:删除字段不能用来删除主键和分桶列。

坑二:无法修改字段名,因此建表时要设计好字段名称。

#修改字段类型和注释
ALTER TABLE test_db.student
MODIFY COLUMN `stu_class_name` VARCHAR(32) ***MENT "学生班级名称";

#新增字段
ALTER TABLE `test_db`.`student`
ADD COLUMN `stu_scope` INT NOT NULL DEFAULT "0" ***MENT "学生成绩";

#删除字段
ALTER TABLE `test_db`.`student`
DROP COLUMN `stu_scope`;

转载请说明出处内容投诉
CSS教程_站长资源网 » Doris数据库---建表、调整表结构操作

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买