Doris基础
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
前言
由于项目中使用到doris,一直在使用,抽空进行一次复盘汇总,将相关知识点记录在这里
doris中数据首先被分区存储,然后可以按照hash的方式进行分桶,每个分桶就是一个tablet,也就是数据划分的最小逻辑单元
tablet是doris最小的数据逻辑单元,复制、移动等操作的最小单元
帮助:help create table
doris支持复合分区和但分区两种方法
复合分区:第一级为分区,第二级为分桶
单分区:只做hash分区,即只分桶
字段类型:
tinyint smalint int bigint largeint float double decimal date datetime char varchar boolean hll bitmap string
partition:
list:可以根据某个字段的值,比如城市等
range:范围,根据时间范围
聚合模型:
所有没有指定聚合方式的列为key,其余为value
bucket:
如果使用了复合分区就是针对分区内的数据进行分桶,如果是单分区,则是对全局进行分桶,分桶列必须为key列
分桶列多了好还是少了好:
如果选择多个分桶列,那么数据分布更加均匀,但是查询条件中不包含所有分桶列的等值条件会对所有桶进行扫描,增加吞吐量,单个延迟降低,适合大吞吐低并发的场景
如果仅一个分桶列或较少的分桶列,会出发对较少桐的扫描,IO较低,适合高并发的点查询
propeties:
副本数量:默认三,通过IP识别,同一个IP中只会有1份
存储格式:hdd ssd 默认hdd
engige:olap为doris自身管理的,其他如mysl es 等只是表的映射
1.数据模型
doris支持三种数据模型:union key aggragate duplicate
aggregate:没有设置聚合函数的为key列,设置了的为value列,对于key相同的 value会进行聚合
聚合时间:etl导入数据的时候,会对导入批次数据聚合,查询的时候 底层BE进行compack的时候
union:aggregate的一种特例,相当于replace
duplicate:可以保留明细数据
动态分区:
doris在0.12版本增加了动态分区的功能,可以根据日期进行动态分区,设置了动态分区后不可以进行手动分区操作
还可以基于动态分区创建历史分区,
3.rollup&物化视图
rollup
doris中的表我们称为base表,我们可以在base表的基础上创建rollup表,数据是独立存在的,作用是在base表的基础上能够更粗粒度的聚合
语法:ALTER TABLE xxx ADD ROLLUP rollup_name(field1,field2)
查看结构:DESC xxx ALL
然后可以通过explain查看sql是否命中rollup
前缀索引:
doris列是固定的,在建表的时候确定的,会以前36个字节作为前缀索引,如果where条件中存在前缀索引的字段,则会命中,提升查询效率
rollup调整前缀索引顺序:通过创建rollup可以命中rollup,doris会优先使用rollup,从而效率提高
说明:rollup加快查询,已经超出了上卷的含义,rollup是基于base表的,太多的rollup会影响导入性能,是否命中rollup是doris自动决定的
rollup数据更新是自动同步base表的,SELECT * 是无法命中任何rollup的
物化视图
就是把查询结果预先存储的特殊表,只能基于单表做物化视图
和rollup区别:是rollup的升级版本,可以完成rollup的所有功能,适用于固定维度查询
原理:和rollup类似,创建完成的物化视图会基于base表进行聚合计算,实时同步base表,因此,同一张表创建过多的物化视图会影响数据的导入效率
查询时,会自动匹配最优的物化视图,自动匹配分两个步骤,1.根据where条件过滤出候选的物化视图。2.根据选出的物化视图进行查询改写,从而直接查询物化视图。
最优选择:1.首先根据where过滤,然后group BY 然后聚合字段,然后查询字段选择可用的物化视图。
2.根据前缀索引和聚合程度两种规则选择最优物化视图
3.查询改写,将查询改成从最优物化视图中查询,有时会涉及到对聚合函数的查询改写,比如:count DISTINCT 会该写成bitmap_union
2.数据导入
1.broker load:访问外部数据源导入到doris,异步执行,如hdfs
2.stream load:通过http协议导入到doris,同步执行,如:导入本地文件或数据流数据,仅支持csv和json
3.INSERT: 单条插入,或者查询插入
4.binlog:通过http导入多个作业
5.ROUTINE load:生成常驻线程,不间断的导入到diros,仅支持kafka
3.数据导出
1.export导出
2.查询结果导出