当前位置:   article > 正文

Doris 建表示例(七)_doris 建表timestamp

doris 建表timestamp

建表语法

使用 CREATE TABLE 命令建立一个表(Table)。更多详细参数可以查看:

HELP CREATE TABLE;

建表语法:

  1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
  2. (column_definition1[, column_definition2, ...]
  3. [, index_definition1[, index_definition12,]])
  4. [ENGINE = [olap|mysql|broker|hive]]
  5. [key_desc]
  6. [COMMENT "table comment"];
  7. [partition_desc]
  8. [distribution_desc]
  9. [rollup_index]
  10. [PROPERTIES ("key"="value", ...)]
  11. [BROKER PROPERTIES ("key"="value", ...)];

Doris 的建表是一个同步命令,命令返回成功,即表示建表成功。

Doris 支持支持单分区和复合分区两种建表方式。

1)复合分区:既有分区也有分桶

第一级称为 Partition,即分区。用户可以指定某一维度列作为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。

第二级称为 Distribution,即分桶。用户可以指定一个或多个维度列以及桶数对数据进行 HASH 分布。

2)单分区:只做 HASH 分布,即只分桶。

字段类型

注:聚合模型在定义字段类型后,可以指定字段的 agg_type 聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列, 类型包括:SUM、MAX、MIN、REPLACE。

我们以一个建表操作来说明 Doris 的数据划分。

Range Partition
  1. CREATE TABLE IF NOT EXISTS example_db.expamle_range_tbl
  2. (
  3. `user_id` LARGEINT NOT NULL COMMENT "用户 id",
  4. `date` DATE NOT NULL COMMENT "数据灌入日期时间",
  5. `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
  6. `city` VARCHAR(20) COMMENT "用户所在城市",
  7. `age` SMALLINT COMMENT "用户年龄",
  8. `sex` TINYINT COMMENT "用户性别",
  9. `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
  10. `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
  11. `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
  12. `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
  13. )
  14. ENGINE=olap
  15. AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
  16. PARTITION BY RANGE(`date`)
  17. (
  18. PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
  19. PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
  20. PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
  21. )
  22. DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
  23. PROPERTIES
  24. (
  25. "replication_num" = "3",
  26. "storage_medium" = "SSD",
  27. "storage_cooldown_time" = "2018-01-01 12:00:00"
  28. );
List Partition
  1. CREATE TABLE IF NOT EXISTS example_db.expamle_list_tbl
  2. (
  3. `user_id` LARGEINT NOT NULL COMMENT "用户 id",
  4. `date` DATE NOT NULL COMMENT "数据灌入日期时间",
  5. `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
  6. `city` VARCHAR(20) COMMENT "用户所在城市",
  7. `age` SMALLINT COMMENT "用户年龄",
  8. `sex` TINYINT COMMENT "用户性别",
  9. `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
  10. `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
  11. `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
  12. `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
  13. )
  14. ENGINE=olap
  15. AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
  16. PARTITION BY LIST(`city`)
  17. (
  18. PARTITION `p_cn` VALUES IN ("Beijing", "Shanghai", "Hong Kong"),
  19. PARTITION `p_usa` VALUES IN ("New York", "San Francisco"),
  20. PARTITION `p_jp` VALUES IN ("Tokyo")
  21. )
  22. DISTRIBUTED BY HASH(`user_id`) BUCKETS 16
  23. PROPERTIES
  24. (
  25. "replication_num" = "3",
  26. "storage_medium" = "SSD",
  27. "storage_cooldown_time" = "2018-01-01 12:00:00"
  28. );

数据划分

列定义

以 AGGREGATE KEY 数据模型为例进行说明。更多数据模型参阅 Doris 数据模型。

列的基本类型,可以通过在 mysql-client 中执行 HELP CREATE TABLE; 查看。

AGGREGATE KEY 数据模型中,所有没有指定聚合方式(SUM、REPLACE、MAX、MIN)的列视为 Key 列。而其余则为 Value 列。

定义列时,可参照如下建议:

  • Key 列必须在所有 Value 列之前。

  • 尽量选择整型类型。因为整型类型的计算和查找比较效率远高于字符串。

  • 对于不同长度的整型类型的选择原则,遵循够用即可。

  • 对于 VARCHAR 和 STRING 类型的长度,遵循 够用即可。

  • 所有列的总字节长度(包括 Key 和 Value)不能超过 100KB。

接下篇----------Doris分区与分桶

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/828527
推荐阅读
  

闽ICP备14008679号