表概览
表是数据存储单元。理解 StarRocks 中的表结构,以及如何设计合理的表结构,有利于优化数据组织,提高查询效率。相比于传统的数据库,StarRocks 会以列的方式存储 JSON、ARRAY 等复杂的半结构化数据,保证高效查询。 本文由浅入深介绍表结构。
自 v3.3.1 起,StarRocks 支持在 Default Catalog 中创建临时表。
表结构入门
与其他关系型数据库一样,StarRocks 表在逻辑上由行(Row)和列(Column)构成:
- 行:每一行代表一条记录,包含了一组相关联的数据。
- 列:列定义了一条记录所包含的属性。每一列代表了特定属性的数据,例如,一个员工表可能包含姓名、工号、部门、薪水等列,每一列存储对应的数据,每列数据具有相同的数据类型。所有行的列数相同。
StarRocks 中建表操作简单易用,您只需要在 CREATE TABLE 语句中定义列和列的数据类型,即可创建一张表。
CREATE DATABASE example_db;
USE example_db;
CREATE TABLE user_access (
uid int,
name varchar(64),
age int,
phone varchar(16),
last_access datetime,
credits double
)
ORDER BY (uid, name);
上述建表示例创建了明细表,该表中数据不具有 任何约束,相同的数据行可能会重复存在。并且指定明细表中前两列为排序列,构成排序键。数据按排序键排序后存储,有助于查询时的快速索引。
自 3.3.0 起,明细表支持使用 ORDER BY 指定排序键,如果同时使用 ORDER BY 和 DUPLICATE KEY,则 DUPLICATE KEY 不生效。
如果测试环境中集群仅包含一个 BE,可以在 PROPERTIES 中将副本数设置为 1,即 PROPERTIES( "replication_num" = "1" )。默认副本数为 3,也是生产集群推荐的副本数。如果您需要使用默认设置,也可以不配置 replication_num 参数。
执行 DESCRIBE 查看表结构。
MySQL [example_db]> DESCRIBE user_access;
+-------------+-------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-------+---------+-------+
| uid | int | YES | true | NULL | |
| name | varchar(64) | YES | true | NULL | |
| age | int | YES | false | NULL | |
| phone | varchar(16) | YES | false | NULL | |
| last_access | datetime | YES | false | NULL | |
| credits | double | YES | false | NULL | |
+-------------+-------------+------+-------+---------+-------+
6 rows in set (0.00 sec)
执行 SHOW CREATE TABLE 来查看建表语句。
MySQL [example_db]> SHOW CREATE TABLE user_access\G
*************************** 1. row ***************************
Table: user_access
Create Table: CREATE TABLE `user_access` (
`uid` int(11) NULL COMMENT "",
`name` varchar(64) NULL COMMENT "",
`age` int(11) NULL COMMENT "",
`phone` varchar(16) NULL COMMENT "",
`last_access` datetime NULL COMMENT "",
`credits` double NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`uid`, `name`)
DISTRIBUTED BY RANDOM
ORDER BY(`uid`, `name`)
PROPERTIES (
"bucket_size" = "4294967296",
"compression" = "LZ4",
"fast_schema_evolution" = "true",
"replicated_storage" = "true",
"replication_num" = "3"
);
1 row in set (0.01 sec)
全面了解表结构
本节详细介绍 StarRocks 表结构,帮助您深入了解表结构,根据场景设计高效的数据管理结构。
表类型
StarRocks 提供四种类型的表,包括明细表、主键表、聚合表和更新表,适用于存储多种业务数据,例如原始数据、实时频繁更新的数据和聚合数据。
- 明细表简单易用,表中数据不具有任何约束,相同的数据行可以重复存在。该表适用于存储不需要约束和预聚合的原始数据,例如日志等。
- 主键表能力强大,具有唯一性非空约束。该表能够在支撑实时更新、部分列更新等场景的同时,保证查询性能,适用于实时查询。
- 聚合表适用于存储预聚合后的数据,可以降低聚合查询时所需扫描和计算的数据量,极大提高聚合查询的效率。
- 更新表适用于实时更新的业务场景,目前已逐渐被主键表取代。