Doris 分区和分桶
Doris中有两层的数据划分,第一层是分区(Partition),第二层是分桶(Bucket),
Partition又能分为Range分区和List分区。
Bucket仅支持Hash方式。
1.1 Partition
只能指定Key列作为分区列
指定分区值时需要加双引号
理论上分区数量没有上限
在不使用分区建表时,系统会自动创建一个表名一致但是用户不可见的全表分区
1.1.1 Partition_Range:
按照指定范围进行分区,一般生产环境下会使用日期作为分区
VALUES LESS THAN (...) :仅指定上界,系统会将前一个分区的上界作为该分区的下界,会生成一个左闭右开的区间
VALUES [....) :同时指定上下界,比较好理解,也会生成一个左闭右开的区间
查看Partition的使用命令:HELP PARTITION;
查看表的分区SHOW PARTITIONS FROM TABLE;
1.1.2 Partition_List:
分区支持的数据类型:BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR
分区值是枚举值,当数据在目标分区枚举值中时,才能命中分区
操作:VALUES IN(....)
1.2 Backet(分桶):
如果创建的表是分区表,那么Backet就是对分区进行Distributed划分,如果不是分区表那么就是对整个表进行划分。
分桶列只能是Key列,分桶列可以和分区列相同或不同。
分桶列的多少取决于对“吞吐”和“并发”的一种权衡。
分桶列多,数据分布的更加均匀,适合大吞吐低并发的查询,不适合高并发的单查询。
分桶列少,适合高并发的点查询。
分桶数量理论上无上限,但是要结合实际资源情况进行设置。
复合分区和单分区:
复合分区:既有分区又有分桶。
单分区:只有分桶。
1.2.1 复合分区的选用场景:
有时间或序值维度的可以使用复合分区。
需要对历史数据进行清理,对N天前的数据进行清理,或者保留N天的数据,可以使用复合分区。
可以解决数据倾斜问题,按天进行分区,那么可能某天的数据量会很大,那么可以调整分桶的数量来达到数据均衡分布的效果,在选着分桶列时要选择数据量差异较大的列。
多列分区:
在指定分区列时,可以在Key中再指定一个字段作为分区列,插入数据时,会首先按照分区列的值依次进行比较
原文链接:https://blog.csdn.net/yqj234/article/details/132543064
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




