赞
踩
使用 CREATE TABLE 命令建立一个表(Table)。更多详细参数可以查看:
HELP CREATE TABLE;
建表语法:
- CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
- (column_definition1[, column_definition2, ...]
- [, index_definition1[, index_definition12,]])
- [ENGINE = [olap|mysql|broker|hive]]
- [key_desc]
- [COMMENT "table comment"];
- [partition_desc]
- [distribution_desc]
- [rollup_index]
- [PROPERTIES ("key"="value", ...)]
- [BROKER PROPERTIES ("key"="value", ...)];
Doris 的建表是一个同步命令,命令返回成功,即表示建表成功。
Doris 支持支持单分区和复合分区两种建表方式。
第一级称为 Partition,即分区。用户可以指定某一维度列作为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
第二级称为 Distribution,即分桶。用户可以指定一个或多个维度列以及桶数对数据进行 HASH 分布。
注:聚合模型在定义字段类型后,可以指定字段的 agg_type 聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列, 类型包括:SUM、MAX、MIN、REPLACE。
我们以一个建表操作来说明 Doris 的数据划分。
- 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"
- );
以 AGGREGATE KEY 数据模型为例进行说明。更多数据模型参阅 Doris 数据模型。
列的基本类型,可以通过在 mysql-client 中执行 HELP CREATE TABLE; 查看。
AGGREGATE KEY 数据模型中,所有没有指定聚合方式(SUM、REPLACE、MAX、MIN)的列视为 Key 列。而其余则为 Value 列。
定义列时,可参照如下建议:
Key 列必须在所有 Value 列之前。
尽量选择整型类型。因为整型类型的计算和查找比较效率远高于字符串。
对于不同长度的整型类型的选择原则,遵循够用即可。
对于 VARCHAR 和 STRING 类型的长度,遵循 够用即可。
所有列的总字节长度(包括 Key 和 Value)不能超过 100KB。
接下篇----------Doris分区与分桶
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。