本文介绍如何在 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 类型为 OLAP
,对应 StarRocks 集群内部表。其他可选项包括 mysql
,elasticsearch
,hive
,以及 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
表创建成功后,您可以 导入并查询数据。