Doris数据库---建表、调解表结构操纵

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、简介

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

官网建表语法网址链接:CREATE-TABLE - Apache Doris
官网建表语法如图所示:

目前我们常见建表主要利用字段列(column_definition_list)、引擎(engine_type)、主键设置(keys_type)、表解释(table_comment)、分桶(distribution_desc)。以下建表示例主要涵盖上面所列。 
三、个人建表示例:

  1. -- test_db.student definition
  2. CREATE TABLE IF NOT EXISTS `test_db`.`student` (
  3.   `stu_num` bigint(20) NULL COMMENT '学生ID编号',
  4.   `gmt_create` datetime NOT NULL COMMENT '创建时间',
  5.   `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  6.   `op_create_id` bigint(20) NOT NULL COMMENT '创建人id',
  7.   `op_modified_id` bigint(20) NOT NULL COMMENT '更新人id',
  8.   `op_create_name` varchar(32) NOT NULL COMMENT '创建人名称',
  9.   `op_modified_name` varchar(32) NOT NULL COMMENT '修改人名称',
  10.   `stu_name` varchar(32) NOT NULL COMMENT '学生姓名',
  11.   `stu_class_name` char NULL COMMENT '学生班级'
  12. ) ENGINE=OLAP
  13. UNIQUE KEY(`stu_num`)
  14. COMMENT '学生表'
  15. DISTRIBUTED BY HASH(`stu_num`) BUCKETS 32
  16. PROPERTIES (
  17. "replication_allocation" = "tag.location.default: 3",
  18. "is_being_synced" = "false",
  19. "storage_format" = "V2",
  20. "light_schema_change" = "true",
  21. "disable_auto_compaction" = "false",
  22. "enable_single_replica_compaction" = "false"
  23. );
复制代码
建表拆解:
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 当前不支持自增。
  1. #语法
  2. `stu_num` bigint(20) NOT NULL  DEFAULT "0" COMMENT '学生号码',
复制代码
2、引擎范例设置:
  1. #设置引擎
  2. ENGINE=OLAP
复制代码
3、设置主键列
坑一:假如设置主键列,那么主键列必须排在其他字段前面,否则会报错该字段前面另有其他字段。
坑二:浮点数double和float不能作为主键列,string范例也不建议用作主键列。
  1. #设置主键列
  2. UNIQUE KEY(`stu_num`)
复制代码
4、表解释
  1. #表注释
  2. COMMENT '学生表'
复制代码
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)。
语法示例:
  1. money double not null comment "金钱"
  2. num float not null comment "数量"
  3. remark double not null comment "备注"
复制代码
四、调解表结构

目前实验结果:支持修改表名、表解释、字段范例修改,新增字段,字段解释修改,支持非空修改为空(反之不可,主键列不允许修改非空或者不非空的设置)。标具名段范例修改时要符合转换规则。
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、 修改表名
  1. #修改表名
  2. ALTER TABLE student RENAME student2;
复制代码
3、修改表解释
  1. #修改表注释
  2. ALTER TABLE student MODIFY COMMENT "学生信息表"
复制代码
4、修改字段范例息争释、新增字段、删除字段
坑一:删除字段不能用来删除主键和分桶列。
坑二:无法修改字段名,因此建表时要设计好字段名称。
  1. #修改字段类型和注释
  2. ALTER TABLE test_db.student
  3. MODIFY COLUMN `stu_class_name` VARCHAR(32) COMMENT "学生班级名称";
  4. #新增字段
  5. ALTER TABLE `test_db`.`student`
  6. ADD COLUMN `stu_scope` INT NOT NULL DEFAULT "0" COMMENT "学生成绩";
  7. #删除字段
  8. ALTER TABLE `test_db`.`student`
  9. DROP COLUMN `stu_scope`;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表