数据表的基本使用(一):基本概念、创建表
1.创建用户和数据库
mysql -h hadoop1 -P 9030 -u root -p
-u
:指定用户名-p
:指定密码-h
:主机-P
:端口
(1)创建 test 用户
createuser'test' identified by'test';
(2)创建数据库
createdatabase test_db;
(3)用户授权
grantallon test_db to test;
2.Doris 中数据表的基本概念
在 Doris 中,数据都以 关系表(
Table
)的形式进行逻辑上的描述。
2.1 Row & Column
一张表包含 行(
Row
)和 列(
Column
)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
在默认的数据模型中,Column 只分为 排序列 和 非排序列。存储引擎会按照排序列对数据进行排序存储,并建立稀疏索引,以便在排序数据上进行快速查找。
而在聚合模型中,Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应 维度列 和 指标列。从聚合模型的角度来说,Key 列相同的行,会聚合成一行。其中 Value 列的聚合方式由用户在建表时指定。
2.2 Partition & Tablet
在 Doris 的存储引擎中,用户数据首先被划分成若干个 分区(
Partition
),划分的规则通常是按照用户指定的分区列进行范围划分,比如按时间划分。而在每个分区内,数据被进一步的按照 Hash 的方式 分桶,分桶的规则是要找用户指定的分桶列的值进行 Hash 后分桶。每个分桶就是一个 数据分片(
Tablet
),也是数据划分的最小逻辑单元。
Tablet
之间的数据是没有交集的,独立存储的。Tablet
也是数据移动、复制等操作的最小物理存储单元。Partition
可以视为是逻辑上最小的管理单元。数据的导入与删除,都可以或仅能针对一个Partition
进行。
3.建表实操
3.1 建表语法
使用
CREATE TABLE
命令建立一个表(
Table
)。更多详细参数可以查看:
help createtable;
建表语法:
CREATE[EXTERNAL]TABLE[IFNOTEXISTS][database.]table_name
(column_definition1[, column_definition2,...][, index_definition1[, index_definition2,...]])[ENGINE=[olap|mysql|broker|hive|iceberg]][key_desc][COMMENT"table comment"][partition_desc][distribution_desc][rollup_index][PROPERTIES ("key"="value",...)][BROKER PROPERTIES ("key"="value",...)];
Doris 建表是一个同步命令,命令返回成功,即表示建表成功。
Doris 支持支持单分区和复合分区两种建表方式。
- 复合分区:既有分区也有分桶。 - 第一级称为
Partition
,即 分区。用户可以指定某一维度列作为分区列(当前只支持 整型 和 时间类型 的列),并指定每个分区的取值范围。- 第二级称为Distribution
,即 分桶。用户可以指定一个或多个维度列以及桶数对数据进行 HASH 分布。 - 单分区:只做 HASH 分布,即只分桶。
3.2 字段类型
字段类型名类型字节长度TINYINT1 字节范围:
−
2
7
+
1
-2^7 + 1
−27+1 ~
2
7
−
1
2^7 - 1
27−1SMALLINT2 字节范围:
−
2
15
+
1
-2^{15} + 1
−215+1 ~
2
15
−
1
2^{15} - 1
215−1INT4 字节范围:
−
2
31
+
1
-2^{31} + 1
−231+1 ~
2
31
−
1
2^{31} - 1
231−1BIGINT8 字节范围:
−
2
63
+
1
-2^{63} + 1
−263+1 ~
2
63
−
1
2^{63} - 1
263−1LARGEINT16 字节范围:
−
2
127
+
1
-2^{127} + 1
−2127+1 ~
2
127
−
1
2^{127} - 1
2127−1FLOAT4 字节支持科学计数法DOUBLE12 字节支持科学计数法DECIMAL[(precision, scale)]16 字节保证精度的小数类型。默认是 DECIMAL(10, 0),precision:1 ~ 27,scale:0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法DATE3 字节范围:
0000-01-01
~
9999-12-31
DATETIME8 字节范围:
0000-01-01 00:00:00
~
9999-12-31 23:59:59
CHAR[(length)]定长字符串。长度范围:1 ~ 255。默认为 1VARCHAR[(length)]变长字符串。长度范围:1 ~ 65533BOOLEAN与 TINYINT 一样,
0
0
0 代表
false
,
1
1
1 代表
true
HLL1~16385 个字节hll 列类型,不需要指定长度和默认值、长度根据数据的聚合程度系统内控制,并且 hll 列只能通过配套的
hll_union_agg
、
hll_cardinality
、
hll_hash
进行查询或使用BITMAPbitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到
2
64
−
1
2^{64} - 1
264−1STRING变长字符串,
0.15
0.15
0.15 版本支持,最大支持 2147483643 字节(2GB - 4),长度还受 be 配置
string_type_soft_limit
,实际能存储的最大长度取两者最小值。只能用在 Value 列,不能用在 Key 列和分区、分桶列
注意:聚合模型在定义字段类型后,可以指定字段的聚合类型
agg_type
,如果不指定,则该列为 Key 列。否则,该列为 Value 列,类型包括:
SUM
、
MAX
、
MIN
、
REPLACE
。
3.3 创建表
3.3.1 Range Partition
CREATETABLEIFNOTEXISTS example_db.expamle_range_tbl
(`user_id` LARGEINT NOTNULLCOMMENT"用户 id",`date`DATENOTNULLCOMMENT"数据灌入日期时间",`timestamp`DATETIMENOTNULLCOMMENT"数据灌入的时间戳",`city`VARCHAR(20)COMMENT"用户所在城市",`age`SMALLINTCOMMENT"用户年龄",`sex`TINYINTCOMMENT"用户性别",`last_visit_date`DATETIMEREPLACEDEFAULT"1970-01-01 00:00:00"COMMENT"用户最后一次访问时间",`cost`BIGINT SUM DEFAULT"0"COMMENT"用户总消费",`max_dwell_time`INT MAX DEFAULT"0"COMMENT"用户最大停留时间",`min_dwell_time`INT MIN DEFAULT"99999"COMMENT"用户最小停留时间")ENGINE=olap
AGGREGATE KEY(`user_id`,`date`,`timestamp`,`city`,`age`,`sex`)partitionby range(`date`)(PARTITION`p201701`VALUES LESS THAN ("2017-02-01"),PARTITION`p201702`VALUES LESS THAN ("2017-03-01"),PARTITION`p201703`VALUES LESS THAN ("2017-04-01"))DISTRIBUTEDBYHASH(`user_id`) BUCKETS 16
PROPERTIES
("replication_num"="3","storage_medium"="SSD","storage_cooldown_time"="2018-01-01 12:00:00");
3.3.2 List Partition
CREATETABLEIFNOTEXISTS example_db.expamle_list_tbl
(`user_id` LARGEINT NOTNULLCOMMENT"用户 id",`date`DATENOTNULLCOMMENT"数据灌入日期时间",`timestamp`DATETIMENOTNULLCOMMENT"数据灌入的时间戳",`city`VARCHAR(20)COMMENT"用户所在城市",`age`SMALLINTCOMMENT"用户年龄",`sex`TINYINTCOMMENT"用户性别",`last_visit_date`DATETIMEREPLACEDEFAULT"1970-01-01 00:00:00"COMMENT"用户最后一次访问时间",`cost`BIGINT SUM DEFAULT"0"COMMENT"用户总消费",`max_dwell_time`INT MAX DEFAULT"0"COMMENT"用户最大停留时间",`min_dwell_time`INT MIN DEFAULT"99999"COMMENT"用户最小停留时间")ENGINE=olap
AGGREGATE KEY(`user_id`,`date`,`timestamp`,`city`,`age`,`sex`)PARTITIONBY LIST(`city`)(PARTITION`p_cn`VALUESIN("Beijing","Shanghai","Hong Kong"),PARTITION`p_usa`VALUESIN("New York","San Francisco"),PARTITION`p_jp`VALUESIN("Tokyo"))DISTRIBUTEDBYHASH(`user_id`) BUCKETS 16
PROPERTIES
("replication_num"="3","storage_medium"="SSD","storage_cooldown_time"="2018-01-01 12:00:00");
版权归原作者 G皮T 所有, 如有侵权,请联系我们删除。