基础操作
连接到Doris集群
mysql -h 192.168.169.72 -P9030 -uroot
创建用户
create user 'zpf' identified by 'zpf';
--使用创建的用户登录
mysql -h 192.168.169.72 -P9030 -uzpf -pzpf
创建数据库
create database dbname;
所有的命令都可以通过 help [command] 查看帮助,例如:
help create;
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", ...)]
增加新字段:
--建表
create table test_zpf.add_column_test(
area_id VARCHAR(20) COMMENT "地区id",
user_id VARCHAR(20) COMMENT "用户id",
pid VARCHAR(20) COMMENT "页面id",
pv_ct bigint sum default "0" COMMENT "访问次数"
)
engine = olap
aggregate key (area_id,user_id,pid)
DISTRIBUTED by hash(user_id) BUCKETS 2
;
--插入数据
insert into test_zpf.add_column_test values
('1.1.1','1001','p_01',11),
('1.1.1','1002','p_01',22),
('1.1.1','1003','p_01',33),
('1.1.2','1004','p_01',44);
--增加新字段,查看表,新增加字段值为 0
alter table test_zpf.add_column_test
add column uv_ct bigint sum default "0" after pv_ct;
--可以使用如下sql查看是否执行完毕,即状态是否为finished
show alter table column;
--如果取消可以使用
cancel alter table column from test_zpf.add_column_test
--插入新数据验证
insert into test_zpf.add_column_test values('1.1.1','1001','p_01',77,88);
1.1.2 1004 p_01 44 0
1.1.1 1001 p_01 88 88
1.1.1 1002 p_01 22 0
1.1.1 1003 p_01 33 0
--数据正常,且可以和之前的数据进行聚合
--更多帮助,参考官网,或者参阅 help alter table
Rollup上卷
对已经存在的表进行聚合操作,按照指定的粒度进行进一步的聚合。
--以上表增加字段后为例
area_id VARCHAR(20)
user_id VARCHAR(20)
pid VARCHAR(20)
pv_ct BIGINT
uv_ct BIGINT
--如上表,如果有对应根据区域查看pv的需求,可以建立一个只有(area_id,pv_ct)的rollup
alter table test_zpf.add_column_test add rollup rollup_area (area_id,pv_ct);
--查看是否完成,FINISHED 表示完成
show alter table rollup;
--取消正在执行的rollup
cancel alter table rollup from test_zpf.add_column_test;
--完成后查看表的rollup信息
desc test_zpf.add_column_test all;
-----
add_column_test AGG_KEYS area_id VARCHAR(20) true
user_id VARCHAR(20) true
pid VARCHAR(20) true
pv_ct BIGINT false
uv_ct BIGINT false
rollup_area AGG_KEYS area_id VARCHAR(20) true
pv_ct BIGINT false
--可以通过 explain 或者 explain graph 查看执行计划,自动命中rollup表
官方说明:
rollup最根本的作用是提高查询效率。
rollup是附属base表的,是一种辅助数据结构,不能显示查询rollup表,是否命中完全有Doris自动决定。
rollup数据是独立物理存储的,利用空间换时间。且影响导入数据效率。数据更新和基表完全同步。
rollup可以用作调整前缀索引,即认为调整列顺序。
注:Doris中不支持在任意列上创建索引,因此内部自己维护的有索引。数据根据 key 列排序存储的,而前缀索引是在排序的基础上,实现的一种根据给定前缀列快速查询的索引方式。
Doris已数据的前36个字节作为数据的前缀索引(不绝对!!!)
表的前几个字段如果是非 varchar 类型数据,不够36个字节,会往后加,但是遇到 varchar 类型后会直接截断
所以在设计列时,要注意列的顺序!!!
在查询时,注意顺序和条件过滤。
当条件过滤是 前缀索引的 前缀 时,可以极大的加快查询速度。
示例:
id bigint, name varchar, age int 均作为 key 列存在
如果按照年龄为20岁的过滤数据,(age,id,name)比(name,id,age)要好!
数据模型
Aggregate 模型
aggregate聚合模型,可以说是Doris基础最常用的模型,根据维度字段进行聚合,聚合类型常见的有sum求和,replace替换,max最大值,min最小值等。
--建表
create table test_zpf.order_detail(
user_id VARCHAR(20) COMMENT "用户id",
user_name VARCHAR(20) COMMENT "用户名称",
cost_all bigint sum default "0" COMMENT "用户总消费",
cost_min bigint min default "9999" COMMENT "用户最小消费额",
cost_max bigint max default "0" COMMENT "用户最大消费额",
last_time DATETIME replace DEFAULT "1970-01-01 00:00:00" COMMENT "最后一次更新时间"
)
aggregate key (user_id,user_name)
DISTRIBUTED by hash(user_id) BUCKETS 4
;
--导入数据
insert into test_zpf.order_detail values('1001','张三',11,22,33,'2022-01-01 10:10:10');
insert into test_zpf.order_detail values('1001','张三',22,11,66,'2022-01-01 10:22:22');
insert into test_zpf.order_detail values('1001','张三',33,33,44,'2022-01-01 10:33:33');
insert into test_zpf.order_detail values('1001','张三',11,22,33,'2022-01-01 10:11:11');
insert into test_zpf.order_detail values('1002','李四',11,22,33,'2022-01-01 10:10:10');
insert into test_zpf.order_detail values('1002','LISI',22,11,66,'2022-01-01 10:11:11');
--查询数据,已经根据指定的数据进行聚合操作
1001 张三 77 11 66 2022-01-01 10:11:11
1002 LISI 22 11 66 2022-01-01 10:11:11
1002 李四 11 22 33 2022-01-01 10:10:10
--再次查询,数据一致,顺序可能不一致
1002 LISI 22 11 66 2022-01-01 10:11:11
1002 李四 11 22 33 2022-01-01 10:10:10
1001 张三 77 11 66 2022-01-01 10:11:11
经过聚合,Doris中最终只会存储聚合后的数据,即明细数据会丢失。
注:在同一个导入批次中的数据,对于replace替换这种聚合方式,替换顺序不做保证!!!
注:如果想要保存明细数据,可以加入一个时间戳字段,并加入到聚合key中。由于时间戳字段存在于维度字段中,所以明细数据均会被保留。
--建表
create table test_zpf.order_detail2(
user_id VARCHAR(20) COMMENT "用户id",
user_name VARCHAR(20) COMMENT "用户名称",
times_tamp DATETIME COMMENT "数据加入时间",
cost_all bigint sum default "0" COMMENT "用户总消费",
cost_min bigint min default "9999" COMMENT "用户最小消费额",
cost_max bigint max default "0" COMMENT "用户最大消费额",
last_time DATETIME replace DEFAULT "1970-01-01 00:00:00" COMMENT "最后一次更新时间"
)
aggregate key (user_id,user_name,times_tamp)
DISTRIBUTED by hash(user_id) BUCKETS 4
;
--导入数据
insert into test_zpf.order_detail2 values('1001','张三','2022-01-01 10:10:11',11,22,33,'2022-01-01 10:10:10');
insert into test_zpf.order_detail2 values('1001','张三','2022-01-01 10:10:12',22,11,66,'2022-01-01 10:22:22');
insert into test_zpf.order_detail2 values('1001','张三','2022-01-01 10:10:13',33,33,44,'2022-01-01 10:33:33');
insert into test_zpf.order_detail2

本文详细介绍了Doris数据库的基础操作,包括连接、用户和数据库创建。深入讲解了数据模型,如Aggregate、Unique和Duplicate模型,以及它们的聚合特性和注意事项。还探讨了分区分桶的概念,如Range和List分区,以及数据操作如导入、导出、更新和删除的细节。此外,文章还涉及了Doris的进阶特性,如Schema变更、动态分区、临时分区、分区缓存和Join优化策略。
最低0.47元/天 解锁文章
1218

被折叠的 条评论
为什么被折叠?



