mysql -h hadoop1 -P 9030 -u root -p
-u
:指定用户名-p
:指定密码-h
:主机-P
:端口(1)创建 test 用户
create user 'test' identified by 'test';
(2)创建数据库
create database test_db;
(3)用户授权
grant all on test_db to test;
在 Doris 中,数据都以 关系表(Table
)的形式进行逻辑上的描述。
一张表包含 行(Row
)和 列(Column
)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
在默认的数据模型中,Column 只分为 排序列 和 非排序列。存储引擎会按照排序列对数据进行排序存储,并建立稀疏索引,以便在排序数据上进行快速查找。
而在聚合模型中,Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应 维度列 和 指标列。从聚合模型的角度来说,Key 列相同的行,会聚合成一行。其中 Value 列的聚合方式由用户在建表时指定。
在 Doris 的存储引擎中,用户数据首先被划分成若干个 分区(Partition
),划分的规则通常是按照用户指定的分区列进行范围划分,比如按时间划分。而在每个分区内,数据被进一步的按照 Hash 的方式 分桶,分桶的规则是要找用户指定的分桶列的值进行 Hash 后分桶。每个分桶就是一个 数据分片(Tablet
),也是数据划分的最小逻辑单元。
Tablet
之间的数据是没有交集的,独立存储的。Tablet
也是数据移动、复制等操作的最小物理存储单元。Partition
可以视为是逻辑上最小的管理单元。数据的导入与删除,都可以或仅能针对一个 Partition
进行。使用 CREATE TABLE
命令建立一个表(Table
)。更多详细参数可以查看:
help create table;
建表语法:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [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 分布。字段类型名 | 类型字节 | 长度 |
---|---|---|
TINYINT | 1 字节 | 范围: − 2 7 + 1 -2^7 + 1 −27+1 ~ 2 7 − 1 2^7 - 1 27−1 |
SMALLINT | 2 字节 | 范围: − 2 15 + 1 -2^{15} + 1 −215+1 ~ 2 15 − 1 2^{15} - 1 215−1 |
INT | 4 字节 | 范围: − 2 31 + 1 -2^{31} + 1 −231+1 ~ 2 31 − 1 2^{31} - 1 231−1 |
BIGINT | 8 字节 | 范围: − 2 63 + 1 -2^{63} + 1 −263+1 ~ 2 63 − 1 2^{63} - 1 263−1 |
LARGEINT | 16 字节 | 范围: − 2 127 + 1 -2^{127} + 1 −2127+1 ~ 2 127 − 1 2^{127} - 1 2127−1 |
FLOAT | 4 字节 | 支持科学计数法 |
DOUBLE | 12 字节 | 支持科学计数法 |
DECIMAL[(precision, scale)] | 16 字节 | 保证精度的小数类型。默认是 DECIMAL(10, 0),precision:1 ~ 27,scale:0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法 |
DATE | 3 字节 | 范围:0000-01-01 ~ 9999-12-31 |
DATETIME | 8 字节 | 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
CHAR[(length)] | 定长字符串。长度范围:1 ~ 255。默认为 1 | |
VARCHAR[(length)] | 变长字符串。长度范围:1 ~ 65533 | |
BOOLEAN | 与 TINYINT 一样, 0 0 0 代表 false , 1 1 1 代表 true |
|
HLL | 1~16385 个字节 | hll 列类型,不需要指定长度和默认值、长度根据数据的聚合程度系统内控制,并且 hll 列只能通过配套的 hll_union_agg 、hll_cardinality 、hll_hash 进行查询或使用 |
BITMAP | bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2 64 − 1 2^{64} - 1 264−1 | |
STRING | 变长字符串, 0.15 0.15 0.15 版本支持,最大支持 2147483643 字节(2GB - 4),长度还受 be 配置 string_type_soft_limit ,实际能存储的最大长度取两者最小值。只能用在 Value 列,不能用在 Key 列和分区、分桶列 |
注意:聚合模型在定义字段类型后,可以指定字段的聚合类型 agg_type
,如果不指定,则该列为 Key 列。否则,该列为 Value 列,类型包括:SUM
、MAX
、MIN
、REPLACE
。
CREATE TABLE IF NOT EXISTS example_db.expamle_range_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户 id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "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`)
partition by 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")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
PROPERTIES
(
"replication_num" = "3",
"storage_medium" = "SSD",
"storage_cooldown_time" = "2018-01-01 12:00:00"
);
CREATE TABLE IF NOT EXISTS example_db.expamle_list_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户 id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
`city` VARCHAR(20) COMMENT "用户所在城市",
`age` SMALLINT COMMENT "用户年龄",
`sex` TINYINT COMMENT "用户性别",
`last_visit_date` DATETIME REPLACE DEFAULT "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`)
PARTITION BY LIST(`city`)
(
PARTITION `p_cn` VALUES IN ("Beijing", "Shanghai", "Hong Kong"),
PARTITION `p_usa` VALUES IN ("New York", "San Francisco"),
PARTITION `p_jp` VALUES IN ("Tokyo")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
PROPERTIES
(
"replication_num" = "3",
"storage_medium" = "SSD",
"storage_cooldown_time" = "2018-01-01 12:00:00"
);