暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

StarRocks之建表

原创 飞鸟-柯 2023-02-11
8298

创建表

本文介绍如何在 StarRocks 中创建表以及进行相关操作。

连接 StarRocks

在成功 部署 StarRocks 集群 后,您可以通过 MySQL 客户端连接任意一个 FE 节点的 query_port(默认为 9030)以连接 StarRocks。StarRocks 内置 root 用户,密码默认为空。

mysql -h <fe_host> -P9030 -u root

复制

创建数据库

使用 root 用户创建 example_db 数据库。

注意

在指定数据库名、表名和列名等变量时,如果使用了保留关键字,必须使用反引号 (`) 包裹,否则可能会产生报错。有关 StarRocks 的保留关键字列表,请参见关键字

CREATE DATABASE example_db;

复制

您可以通过 SHOW DATABASES; 命令查看当前 StarRocks 集群中所有数据库。

MySQL [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | _statistics_ | | example_db | | information_schema | +--------------------+ 3 rows in set (0.00 sec)

复制

说明:与 MySQL 的表结构类似,information_schema 包含当前 StarRocks 集群的元数据信息,但是部分统计信息还不完善。推荐您通过 DESC table_name 等命令来获取数据库元数据信息。

创建表

在新建的数据库中创建表。

StarRocks 支持 多种数据模型,以适用不同的应用场景。以下示例基于 明细表模型 编写建表语句。

更多建表语法,参考 CREATE TABLE 。

use example_db; CREATE TABLE IF NOT EXISTS `detailDemo` ( `recruit_date` DATE NOT NULL COMMENT "YYYY-MM-DD", `region_num` TINYINT COMMENT "range [-128, 127]", `num_plate` SMALLINT COMMENT "range [-32768, 32767] ", `tel` INT COMMENT "range [-2147483648, 2147483647]", `id` BIGINT COMMENT "range [-2^63 + 1 ~ 2^63 - 1]", `password` LARGEINT COMMENT "range [-2^127 + 1 ~ 2^127 - 1]", `name` CHAR(20) NOT NULL COMMENT "range char(m),m in (1-255)", `profile` VARCHAR(500) NOT NULL COMMENT "upper limit value 1048576 bytes", `hobby` STRING NOT NULL COMMENT "upper limit value 65533 bytes", `leave_time` DATETIME COMMENT "YYYY-MM-DD HH:MM:SS", `channel` FLOAT COMMENT "4 bytes", `income` DOUBLE COMMENT "8 bytes", `account` DECIMAL(12,4) COMMENT "", `ispass` BOOLEAN COMMENT "true/false" ) ENGINE=OLAP DUPLICATE KEY(`recruit_date`, `region_num`) PARTITION BY RANGE(`recruit_date`) ( PARTITION p20220311 VALUES [('2022-03-11'), ('2022-03-12')), PARTITION p20220312 VALUES [('2022-03-12'), ('2022-03-13')), PARTITION p20220313 VALUES [('2022-03-13'), ('2022-03-14')), PARTITION p20220314 VALUES [('2022-03-14'), ('2022-03-15')), PARTITION p20220315 VALUES [('2022-03-15'), ('2022-03-16')) ) DISTRIBUTED BY HASH(`recruit_date`, `region_num`) BUCKETS 8 PROPERTIES ( "replication_num" = "1" );

复制

注意

  • 在 StarRocks 中,字段名不区分大小写,表名区分大小写。
  • 建表时,DISTRIBUTED BY 为必填字段。

建表语句说明

排序键

StarRocks 表内部组织存储数据时会按照指定列排序,这些列为排序列(Sort Key)。明细模型中由 DUPLICATE KEY 指定排序列。以上示例中的 recruit_date 以及 region_num 两列为排序列。

注意:排序列在建表时应定义在其他列之前。排序键详细描述以及不同数据模型的表的设置方法请参考 排序键

字段类型

StarRocks 表中支持多种字段类型,除以上示例中已经列举的字段类型,还支持 BITMAP 类型HLL 类型ARRAY 类型,字段类型介绍详见 数据类型章节

注意:在建表时,您应尽量使用精确的类型。例如,整形数据不应使用字符串类型,INT 类型即可满足的数据不应使用 BIGINT 类型。精确的数据类型能够更好的发挥数据库的性能。

分区分桶

PARTITION 关键字用于给表 创建分区。以上示例中使用 recruit_date 进行范围分区,从 11 日到 15 日每天创建一个分区。StarRocks 支持动态生成分区,详见 动态分区管理为了优化生产环境的查询性能,我们强烈建议您为表制定合理的数据分区计划。

DISTRIBUTED 关键字用于给表 创建分桶,以上示例中使用 recruit_date 以及 region_num 两个字段通过 Hash 算法创建 8 个桶。

创建表时合理的分区和分桶设计可以优化表的查询性能。有关分区分桶列如何选择,详见 数据分布

数据模型

DUPLICATE 关键字表示当前表为明细模型,KEY 中的列表示当前表的排序列。StarRocks 支持多种数据模型,分别为 明细模型聚合模型更新模型主键模型。不同模型的适用于多种业务场景,合理选择可优化查询效率。

索引

StarRocks 默认会给 Key 列创建稀疏索引加速查询,具体规则见 排序键。支持的索引类型有 Bitmap 索引Bloomfilter 索引 等。

注意:索引创建对表模型和列有要求,详细说明见对应索引介绍章节。

ENGINE 类型

默认 ENGINE 类型为 olap,对应 StarRocks 集群内部表。其他可选项包括 mysqlelasticsearchhivejdbc(2.3 及以后),hudi(2.2 及以后)以及 iceberg,分别代表所创建的表为相应类型的 外部表

查看表信息

您可以通过 SQL 命令查看表的相关信息。

  • 查看当前数据库中所有的表

SHOW TABLES;

复制
  • 查看表的结构

DESC table_name;

复制

示例:

DESC detailDemo;

复制
  • 查看建表语句

SHOW CREATE TABLE table_name;

复制

示例:

SHOW CREATE TABLE detailDemo;

复制


修改表结构

StarRocks 支持多种 DDL 操作。

您可以通过 ALTER TABLE 命令可以修改表的 Schema,包括增加列,删除列,修改列类型(暂不支持修改列名称),改变列顺序。

增加列

例如,在以上创建的表中,在 ispass 列后新增一列 uv,类型为 BIGINT,默认值为 0

ALTER TABLE detailDemo ADD COLUMN uv BIGINT DEFAULT '0' after ispass;

复制

删除列

删除以上步骤新增的列。

注意

如果您通过上述步骤添加了 uv,请务必删除此列以保证后续 Quick Start 内容可以执行。

ALTER TABLE detailDemo DROP COLUMN uv;

复制

查看修改表结构作业状态

修改表结构为异步操作。提交成功后,您可以通过以下命令查看作业状态。

SHOW ALTER TABLE COLUMN\G;

复制

当作业状态为 FINISHED,则表示作业完成,新的表结构修改已生效。

修改 Schema 完成之后,您可以通过以下命令查看最新的表结构。

DESC table_name;

复制

示例如下:

MySQL [example_db]> desc detailDemo; +--------------+-----------------+------+-------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-----------------+------+-------+---------+-------+ | recruit_date | DATE | No | true | NULL | | | region_num | TINYINT | Yes | true | NULL | | | num_plate | SMALLINT | Yes | false | NULL | | | tel | INT | Yes | false | NULL | | | id | BIGINT | Yes | false | NULL | | | password | LARGEINT | Yes | false | NULL | | | name | CHAR(20) | No | false | NULL | | | profile | VARCHAR(500) | No | false | NULL | | | hobby | VARCHAR(65533) | No | false | NULL | | | leave_time | DATETIME | Yes | false | NULL | | | channel | FLOAT | Yes | false | NULL | | | income | DOUBLE | Yes | false | NULL | | | account | DECIMAL64(12,4) | Yes | false | NULL | | | ispass | BOOLEAN | Yes | false | NULL | | | uv | BIGINT | Yes | false | 0 | | +--------------+-----------------+------+-------+---------+-------+ 15 rows in set (0.00 sec)

复制

取消修改表结构

您可以通过以下命令取消当前正在执行的作业。

CANCEL ALTER TABLE COLUMN FROM table_name\G;

复制

创建用户并授权

在 StarRocks 中,只有拥有 CREATE_PRIV 权限 的用户才可建立数据库。

example_db 数据库创建完成之后,您可以使用 root 账户创建 test 账户,并授予其 example_db 的读写权限 。

CREATE USER 'test' IDENTIFIED by '123456'; GRANT ALL on example_db to test;

复制

通过登录被授权的 test 账户,就可以操作 example_db 数据库。

mysql -h 127.0.0.1 -P9030 -utest -p123456

复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论