表概览
表是数据存储单元。理解 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)