1. 数据表设计
数据模型:
- duplicate key 明细表
- uniq key主键表 (1.2以后写时合并)
- aggregate key 预聚合表 (count(*)会很慢)
数据划分 (在 key 列上指定):
- 手动分区:
-
range 分区:
- fixed range: 自己写出分区字段的划分值, 左闭右开.
PARTITION BY RANGE(`date`) ( PARTITION `p201701` VALUES [("2017-01-01"), ("2017-02-01")), PARTITION `p201702` VALUES [("2017-02-01"), ("2017-03-01")), PARTITION `p201703` VALUES [("2017-03-01"), ("2017-04-01")) ) - less then: 制定每个分区的上界, 下届由上个分区的上界给出
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"), PARTITION `p2018` VALUES [("2018-01-01"), ("2019-01-01")), PARTITION `other` VALUES LESS THAN (MAXVALUE) ) - batch range: 指定 from , to , interval
PARTITION BY RANGE(`date`) ( FROM ("2000-11-14") TO ("2021-11-14") INTERVAL 2 YEAR ) - MULTI RANGE: 以上三种 range 可以再建表时都使用
- fixed range: 自己写出分区字段的划分值, 左闭右开.
-
List 分区
指定分区的枚举值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") )
-
- 动态分区
不会在导入数据时创建分区, 动态分区只是会按照设定的规则,滚动添加、删除分区,从而实现对表分区的生命周期管理(TTL),减少数据存储压力。 - 自动分区
按照插入的数据自动分区UNIQUE KEY(`TRADE_DATE`, `TRADE_ID`) -- 指定 key AUTO PARTITION BY RANGE (date_trunc(`TRADE_DATE`, 'year')) -- 自动分区生成的方法 - 分区内再分桶
- hash 分桶
DISTRIBUTED BY HASH(region) BUCKETS 8 - random 分桶
只使用与不在此列上进行过滤等操作, 单单分散数据的需求DISTRIBUTED BY RANDOM BUCKETS 8 - 什么样的列适合做分桶键?
高基数 (唯一值较多) …
- hash 分桶
表索引
- 点查索引
查询where =或where in, 直接返回可能满足 where 条件行的文件块- 前缀索引
- 在表的 key 键上(查看
数据模型)自动创建的, 因此一张表只有一个前缀索引 - doris 在 key 列上自动排序, 没隔 1024 行加一个索引. 因此, 可以在等值查询时直接拿取对应取值范围内的数据文件
- 在表的 key 键上(查看
- 倒排索引
- 如果一个列设置为倒排索引, 会把
此列的不同离散值 : 对应的行号集合作为映射关系存起来
- 如果一个列设置为倒排索引, 会把
- 前缀索引
- 跳数索引
查询where =或where in, 过滤掉肯定不存在满足查询行的数据文件- ZoneMap 索引
维护数据文件的统计信息: 该列的最大值, 最小值 , null 值 - bloomfilter 索引
bloomfilter 中不存在的肯定不在对应的数据文件中
PROPERTIES ( "bloom_filter_columns" = "column_name1,column_name2" );- Ngram - bloomfilter 索引
适合对文本字段进行 like 查询. 先分词再在分词上做 bloomfilter
- ZoneMap 索引
- 索引配置银弹
- 最频繁使用的过滤条件指定为 Key 自动建前缀索引,因为它的过滤效果最好,但是一个表只能有一个前缀索引,因此要用在最频繁的过滤条件上
- 对非 Key 字段如有过滤加速需求,首选建倒排索引,因为它的适用面广,可以多条件组合,次选下面两种索引:
- 有字符串 LIKE 匹配需求,再加一个 NGram BloomFilter 索引
- 对索引存储空间很敏感,将倒排索引换成 BloomFilter 索引
- 如果性能不及预期,通过 QueryProfile 分析索引过滤掉的数据量和消耗的时间,具体参考各个索引的详细文档
5011

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



