创建表
本文介绍如何在 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`);
注意
- 在 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 集群内部表。其他可选项包括 mysql
,elasticsearch
,hive
,jdbc