Doris 的数据模型主要分为 3 类:
- 明细模型(Duplicate Key Model):允许指定的 Key 列重复;适用于必须保留所有原始数据记录的情况
- 主键模型(Unique Key Model):每一行的 Key 值唯一;可确保给定的 Key 列不会存在重复行
- 聚合模型(Aggregate Key Model):可根据 Key 列聚合数据;通常用于需要汇总或聚合信息(如总数或平均值)的情况
Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应维度列和指标列。Doris 的 Key 列是建表语句中指定的列,建表语句中的关键字 unique key 或 aggregate key 或 duplicate key 后面的列就是 Key 列,除了 Key 列剩下的就是 Value 列
创建三种模式数据表
CREATE TABLE customer_duplicate(
user_id BIGINT NOT NULL COMMENT "用户 ID",
name VARCHAR(20) COMMENT "用户姓名",
age INT COMMENT "用户年龄"
)
DUPLICATE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES (
"replication_num" = "1"
);
CREATE TABLE customer_aggregate (
user_id BIGINT NOT NULL COMMENT "用户 ID",
name VARCHAR(20) COMMENT "用户姓名",
age INT SUM COMMENT "用户年龄"
)
AGGREGATE KEY(user_id,name)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES (
"replication_num" = "1"
);
CREATE TABLE customer_unique(
user_id BIGINT NOT NULL COMMENT "用户 ID",
name VARCHAR(20) COMMENT "用户姓名",
age INT COMMENT "用户年龄"
)
UNIQUE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES (
"replication_num" = "1"
);
查看创表语句(可以复制出来创表)
SHOW CREATE TABLE customer_unique;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| __internal_schema |
| information_schema |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> use test;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_test |
+--------------------+
| customer_aggregate |
| customer_duplicate |
| customer_unique |
| test_table |
+--------------------+
4 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE customer_unique;
通过navicat,输入SHOW CREATE TABLE customer_unique;查看到创表语句,然后复制CreateTable的创表语句出来,可以使用
对于duplicate明细数据模型的增删改查方法注意事项(事务无法回滚,事务控制不了的)
- 新增可以使用key和value任意匹配,添加成功返回Affected rows: 1
- 查询可以使用key和value任意匹配
- 删除可以使用key和value任意匹配,删除成功返回都是Affected rows: 0
- 不支持更新操作,更新会报Only unique table could be updated
对于aggregate聚合数据模型的增删改查方法注意事项(事务无法回滚,事务控制不了的)
- 新增可以使用key和value任意匹配,新增的会根据聚合类型进行操作,添加成功返回Affected rows: 1
- 查询可以使用key和value任意匹配
- 删除可以使用key和value任意匹配,删除成功返回都是Affected rows: 0
- 不支持更新操作,更新会报Only unique table could be updated
以下几种聚合方式和 agg_state:
SUM:求和,多行的 Value 进行累加。
REPLACE:替代,下一批数据中的 Value 会替换之前导入过的行中的 Value。
MAX:保留最大值。
MIN:保留最小值。
REPLACE_IF_NOT_NULL:非空值替换。和 REPLACE 的区别在于对于 null 值,不做替换。
HLL_UNION:HLL 类型的列的聚合方式,通过 HyperLogLog 算法聚合。
BITMAP_UNION:BIMTAP 类型的列的聚合方式,进行位图的并集聚合
对于aggregate聚合数据模型创表的高级用法
CREATE TABLE IF NOT EXISTS example_tbl_agg1
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`city` VARCHAR(20) COMMENT