首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >doris 建表规范(一)

doris 建表规范(一)

作者头像
披头
发布2025-11-14 13:46:24
发布2025-11-14 13:46:24
740
举报
文章被收录于专栏:datartisandatartisan

建什么表?

doris 有三大表模型,分别为 Duplicate 模型(明细模型)、Aggregate 模型(聚合模型)、Unique 模型(唯一模型),具体要创建哪种类型的表模型,取决于数据场景。

其中:

  • Duplicate 模型

适用于原始数据存储、海量数据存储等场景,特点是无预聚合。

  • Aggregate 模型

适用于报表统计、指标分析等场景,特点是预聚合、查询性能好、节省存储。

  • Unique 模型

适用于用户画像,维表等场景,特点是有主键,支持更新操作。

建不建分区?

doris 支持创建分区,但是,是否需要创建分区还是要看数据场景。

比如说:

维表、数据量较小的表一般不需要创建分区。

只有一天的、每日全量更新的数据,不需要创建分区,创建了分区反而会产生大量的空分区,造成元数据爆炸。

其他数据场景,推荐创建分区。

怎么建分桶?

doris 表存储按照分桶(Tablet)进行,分桶的设计方式与查询性能密切相关。因此,分桶的设计方案非常重要。

doris 创建表时,即使你不指定分桶,它也会默认创建分桶。

但是,很遗憾,doris 表创建时的默认分桶设计方案并不是最优的。

比如说:

doris 默认分桶列为表的第一个字段,而表的第一个字段一般为日期,离线 T-1 场景下,分桶字段为一个值 **Hash(day_id) % BUCKETS_NUM**。这意味着,同一天的所有数据都会放入同一个分桶,这个分桶的主副本位于哪个 BE 节点上,那个 BE 节点会承担几乎所有的写入负载和数据存储,这个 BE 节点异常繁忙,磁盘I/O、网络、CPU压力都很大。但是,另外的 BE 节点却只能眼睁睁的看着他干活,这就是典型的数据倾斜

那么,我们该怎么设计分桶呢?这里有几个最佳实践可以参考:

1、选择数据列中取值丰富、分布均匀的列作为分桶列,比如 user_id, order_id, device_no。

2、分桶数 BUCKETS 应为 2 的 N 次方。

3、单个 Bucket 的数据量:推荐在 100MB 到 1GB 之间(压缩后)。

4、小表:直接设置 BUCKETS 1。

5、分桶数避免设置为质数。

6、分桶数是 BE 数的较小整数倍。(与第2条冲突时,选择最接近的 N 次方)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学探究 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建什么表?
  • 建不建分区?
  • 怎么建分桶?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档