一文教你玩转 Apache Doris 分区分桶新功能

doris:手动分区 阅读详情

数据分片(Sharding)是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制,而分布式数据库则通过数据划分的规则,将数据打散分布至不同的机器或节点上,形成分布式存储,因此突破了单机存储空间和 IO 的瓶颈、使库表数据量可以无限拓展。

数据分片主要有范围分片或哈希分片这两种方式,而在实际数据库的实现中,往往呈现为分区和分桶两种形式。分区一般是按照时间或其他连续值对数据进行划分,在执行查询操作时可以通过分区裁剪过滤不必要的范围扫描,提升执行效率,同时也使得对分区数据的增删改等管理操作更为便捷。而分桶则是按照某个关键字执行哈希运算,将相同哈希值的数据放到一起,这样可以有效定位数据、避免数据倾斜。

在 Apache Doris 中,同样也遵从一定的数据分布规则。数据以关系表(Table)的形式进行呈现,会依次按照先分区(Partition)、再分桶(Bucket)的方式划分,最终在同一个分桶中的数据会形成数据分片(Tablet)。Tablet 是 Apache Doris 中多副本高可用、集群间数据调度与均衡的最小物理存储单位。

图1:Table-Partition-Tablet 之间的关系

# 现状与问题

在 Doris 中,分区与分桶是如何创建的?我们以一个网站站点的建表实例说明分区与分桶的创建方式,该网站的站点建表语句如下:

-- 该表记录了某个时间点,在某个站点上各个用户的pv数据
CREATE TABLE demo.test_tbl(
    sdate      DATETIME,  -- 日期
    site       INT,  -- 站点id
    city       VARCHAR(64),  -- 城市
    user       VARCHAR(32)  DEFAULT '', -- 用户名
    pv         BIGINT -- pv量
) ENGINE=olap DUPLICATE KEY(sdate, site, city)
[PARTITION_DESC]
[BUCKET_DESC]
PROPERTIES ("replication_num" = "1");

其中 [PARTITION_DESC] 表示创建分区的详细语句,[BUCKET_DESC] 表示创建分桶的语句。

创建分区

Apache Doris 支持两种分区形式,List Partition 与 Range Partition。

List Partition

List Partition 相当于对分区的列值进行枚举,因此选择的分区列最好是有区分度的可枚举值,例如本例中的 city。根据 city 列的枚举值创建多个 List Partition,则 PARTITION_DESC可以写为:

-- 以city作为分区列,创建华北、东北、华中、西南等分区
PARTITION BY LIST(city)
(
    PARTITION `p_huabei` VALUES IN ("beijing", "tianjin", "shijiazhuang"),
    PARTITION `p_dongbei` VALUES IN ("shenyang", "dalian"),
    PARTITION `p_huazhong` VALUES IN ("wuhan", "changsha")
    PARTITION `p_xinan` VALUES IN ("chengdu", "chongqing")
)

Range Partition

创建 Range partition 一般使用时间列,Range Partition 又可以分为静态和动态两种方式:

- 静态 Range Partition

此类 Partition 的创建会生成一个左闭右开的区间,定义一个分区只需要指定右边界,该分区的左边界由上一个分区的右边界确定,PARTITION_DESC可以写为:

-- 以sdate这个时间列作为分区列,
-- 日期处于[min, 2023-01-01)的数据,都放到名为p2022的分区下;
-- 日期处于[2023-01-01, 2023-01-02)的数据,都放到名为p20230101的分区下;
-- 日期处于[2023-01-02, 9999-12-31)的数据,都放到名为pmax的分区下;
PARTITION BY RANGE(sdate)
(
    PARTITION `p2022` VALUES LESS THAN ("2023-01-01"),
    PARTITION `p20230101` VALUES LESS THAN ("2023-01-02"),
    PARTITION `pmax` VALUES LESS THAN ("9999-12-31")
)

可以看出,p20230101 这个分区的左边界由 p2022 分区的右边界确定,而 pmax 的左边界由 p20230101 的右边界确定。需注意的是,此处为了举例说明动态分区,使用了一个很大的边"9999-12-31",实际业务中很少会直接创建从 2023-01-02 到 9999-12-31 的分区。

- 动态 Range Partition

上述静态的分区需要手动指定边界,分区个数太多使用起来也不方便。动态 Range Partition 帮助我们解决了这个问题,只需指定一些分区的参数即可动态创建,PARTITION_DESC 相对更简单,只需指定哪个列作为分区列即可:

PARTITION BY RANGE(sdate)()

剩余参数需要在PARTITION进行配置:

PROPERTIES (
  "dynamic_partition.enable" = "true",
  "dynamic_partition.time_unit" = "DAY",
  "dynamic_partition.start" = "-30",
  "dynamic_partition.end" = "3",
  "dynamic_partition.prefix" = "p",
  "dynamic_partition.create_history_partition"="true",
  "replication_num" = "1"
);

动态分区参数说明如下:

创建分桶

分桶在物理层面即数据分片(Tablet)。在数据表完成分区后,指定部分列作为分桶列,将这些列数据中相同哈希值的数据合到一起,形成了 Tablet。一个表中 Tablet 总数量 = 分区数(Partition num)x 分桶数(Bucket num)x 数据副本数(Replication_num) 。

[BUCKET_DESC] 语句非常简单,只需要一句:

DISTRIBUTED BY HASH(site) BUCKETS 20

此时指定以 site 列的哈希值作为分桶,并且分桶个数设置为 20 个,需要注意的是这里的 20 仅作为示例,合适的分桶个数需要根据分区大小来确定。实际上单个分桶即 Tablet 的数据量理论上没有上下界,但建议在 1GB - 10GB 的范围内,即假设分区大小为 20GB,那么分桶个数设置为 10-20 个是合适的。

不足与思考

从以上对分区分桶的介绍,相信有不少用户和读者仍能发现其中一些不足之处:

  • 分区数量过多的情况下,使用 List Partition 或者静态 Range Partition 会使得 SQL 较为繁琐,编写起来费时费力;

  • 若是使用动态 Range Partition,则需要掌握多个参数,使用方式不友好且学习成本较高;而当存在大量历史冷数据来说,动态 Range Partition 只能指定单一粒度,无法灵活组合不同的分区粒度;

  • 分桶个数的设置十分依赖用户对 Apache Doris 数据分布机制和业务数据本身的理解,使用门槛较高。不合理的分桶设置将对系统性能和稳定性造成一定程度冲击:分桶数太多将导致单个 Tablet 的数据量过小,数据聚合效果不佳、查询性能不能得到有效发挥,并且元数据管理压力大;个数太少则单个 Tablet 包含的数据量过大,不利于副本的迁移、补齐,且会增加 Schema Change 或者 Rollup 操作失败重试的代价。

# 批量分区与Auto Bucket的设计与实现

克服数据库的复杂性是 Apache Doris 一直追求的目标之一,针对以上分区分桶存在的易用性问题,在 Apache Doris 最新的版本中已经得到解决。在 Apache Doris 1.2.1 版本中,我们新增了批量创建分区功能,简洁的语法和灵活的使用方式让批量创建历史分区更加得心应手;而针对分桶设置带来的学习成本,Apache Doris 在即将发布的 1.2.2 版本中新增了 Auto Bucket 自动分桶推算功能,分桶个数不再依赖于人工设置,通过规则的智能计算即可保证合理的数据划分,降低用户学习成本的同时还可以最大化提升用户开发效率。

批量创建分区

批量创建分区功能在前期充分调研了用户的需求,本着简洁、强大、易用的设计目标,将设计核心锁定在几个要素中:

  • 时间区间范围(会考虑开闭问题)

  • 时间跨度(即每个分区的时间维度的大小)

  • 时间单位(年、月、日、时、周等)

结合前面提到的网站站点模型,假设其数据包含从几年前直到现在的全量信息,想要将十年内的数据按每一天一个分区进行创建。在批量分区功能中,PARTITION_DESC只需要一句,并且不用在PARTITION中设置分区相关参数:

-- 当然,分区创建个数受到max_multi_partition_num参数控制,该值默认为4096,有需求可以修改
PARTITION BY RANGE(sdate)
(
   FROM ("2013-01-01") TO ("2023-01-01") INTERVAL 1 DAY
)从这个 case 来看,批量分区功能的语法更为简洁,但该功能的易用性和灵活性远不止于此。

从这个 case 来看,批量分区功能的语法更为简洁,但该功能的易用性和灵活性远不止于此。

假设有另一批数据:公司前几年的数据量较大且为冷数据,故可以将一年的数据合到一个分区里面;而后来因为业务迅速发展,需要将每一月的数据作为一个分区;随着公司业务进一步发展,按月分区已经不能满足快速增长的数据需求,需要按周进行分区;……;时至今日,公司每天产生海量数据,可能需要按小时分区才能符合需求。根据这个场景,不难写出批量分区创建的 PARTITION_DESC:

-- 此处需要注意,如果要使用小时级别的分区,则分区列必须是datetime类型
-- 同样的,分区创建个数也受到max_multi_partition_num参数控制
PARTITION BY RANGE(sdate)
(
   FROM ("2000-01-01") TO ("2021-01-01") INTERVAL 1 YEAR,
   FROM ("2021-01-01") TO ("2022-01-01") INTERVAL 1 MONTH,
   FROM ("2022-01-01") TO ("2023-01-01") INTERVAL 1 WEEK,
   FROM ("2023-01-01") TO ("2023-02-01") INTERVAL 1 DAY,
   FROM ("2023-02-01 00") TO ("2099-12-31 23") INTERVAL 1 HOUR
)

除了上述不同时间粒度的分区可以灵活组合外,还可以将静态 Range Partition 和批量分区功能结合起来。例如需要将该公司 2022-01-01 到 2023-01-01 的数据按天创建分区,2022-01-01 之前的数据归到一个名为"pold"分区中,我们可以将静态分区和批量分区组合起来,PARTITION_DESC如下:

PARTITION BY RANGE(sdate)
(
   PARTITION pold VALUES LESS THAN ("2022-01-01"),
   FROM ("2022-01-01") TO ("2023-01-01") INTERVAL 1 DAY
)

批量分区创建功能支持不同时间粒度,其语法简洁有力,且各种类型分区可以灵活组合,在面对大量历史分区和部分特殊分区的需求时,该功能显得游刃有余,可以极大提高开发效率。 批量分区功能 PR:*https://github.com/apache/doris/pull/13772*****

Auto Bucket 自动分桶推算

以往创建分桶时需要手动设定分桶数,而自动分桶推算功能是 Apache Doris 可以动态地推算分桶个数,使得分桶数始终保持在一个合适范围内,让用户不再操心桶数的细枝末节。首先说明一点,为了方便阐述该功能,该部分会将桶拆分为两个时期的桶,即初始分桶以及后续分桶。 (这里的初始和后续只是本文为了描述清楚该功能而采用的术语,Apache Doris 分桶本身没有初始和后续之分) 从上文中创建分桶一节我们知道,BUCKET_DESC非常简单,但是需要指定分桶个数;而在自动分桶推算功能上,BUCKET_DESC的语法直接将分桶数改成"Auto",并新增一个 Properties 配置即可:

-- 旧版本指定分桶个数的创建语法
DISTRIBUTED BY HASH(site) BUCKETS 20

-- 新版本使用自动分桶推算的创建语法
DISTRIBUTED BY HASH(site) BUCKETS AUTO
properties("estimate_partition_size" = "100G")

新增的配置参数estimate_partition_size表示一个单分区的数据量。该参数是可选的,如果没有给出则 Doris 会将 estimate_partition_size 的默认值取为 10GB。从上文中已经得知,一个分桶在物理层面就是一个Tablet,为了获得最好的性能,建议 Tablet 的大小在 1GB - 10GB 的范围内。那么自动分桶推算是如何保证 Tablet 大小处于这个范围内的呢?总结起来不外乎几个原则:

  • 若是整体数据量较小,则分桶数不要设置过多

  • 若是整体数据量较大,则应使桶数跟总的磁盘块数相关,充分利用每台 BE 机器和每块磁盘的能力

初始分桶推算

从原则出发,理解自动分桶推算功能的详细逻辑就变得简单了:首先来看初始分桶:

  1. 先根据数据量得出一个桶数 N。首先使用 estimate_partition_size 的值除以 5(按文本格式存入 Doris 中有 5 比 1 的数据压缩比计算),得到的结果为:

  • < 100MB,则取 N=1

  • < 1GB,则取 N=2

  • = 1GB,则每一个 GB 一个分桶

  1. 根据 BE 节点数以及每个 BE 节点的磁盘容量,计算出桶数 M。其中每个 BE 节点算 1,每 50G 的磁盘容量算 1,那么 M 的计算规则为:*M = BE 节点数 ( 一块磁盘块大小 / 50GB) * 磁盘块数, 例如有 3 台 BE,每台 BE 都有 4 块 500GB 的磁盘,那么 M = 3 * (500GB / 50GB) * 4 = 1203. 得到最终的分桶个数计算逻辑:

  • 先计算一个中间值 x = min(M, N, 128),

  • 如果 x < N并且x < BE节点个数,则最终分桶为 y 即 BE 节点个数;否则最终分桶数为 x

上述过程伪代码表现形式为:

int N = 计算N值;
int M = 计算M值;

int y = BE节点个数;
int x = min(M, N, 128);

if (x < N && x < y) {
  return y;
}
return x;

有了上述算法,咱们再引入一些例子来更好地理解这部分逻辑:

case 1:

数据量 100 MB,10 台 BE 机器,2TB * 3 块盘

数据量 N = 1

BE 磁盘 M = 10 * (2TB/50GB) * 3 = 1230

x = min(M, N, 128) = 1

最终: 1

case 2:

数据量 1GB, 3 台 BE 机器,500GB * 2 块盘

数据量 N = 2

BE 磁盘 M = 3 * (500GB/50GB) * 2 = 60

x = min(M, N, 128) = 2

最终: 2

case 3:

数据量 100GB,3 台 BE 机器,500GB * 2 块盘

数据量 N = 20

BE 磁盘 M = 3 * (500GB/50GB) * 2 = 60

x = min(M, N, 128) = 20 *

最终: 20*

case 4:

数据量 500GB,3 台 BE 机器,1TB * 1 块盘

数据量 N = 100

BE 磁盘 M = 3 * (1TB /50GB) * 1 = 60

x = min(M, N, 128) = 63

最终: 63

case 5:

数据量 500GB,10 台 BE 机器,2TB * 3 块盘

数据量 N = 100

BE 磁盘 M = 10 * (2TB / 50GB) * 3 = 1230

x = min(M, N, 128) = 100

最终: 100

case 6:

数据量 1TB,10 台 BE 机器,2TB * 3 块盘

数据量 N = 205

BE 磁盘 M = 10 * (2TB / 50GB) * 3 = 1230

x = min(M, N, 128) = 128

最终: 128

case 7:

数据量 500GB,1 台 BE 机器,100TB * 1 块盘

数据量 N = 100

BE 磁盘 M = 1 * (100TB / 50GB) * 1 = 2048

x = min(M, N, 128) = 100

最终: 100

case 8:

数据量 1TB, 200 台 BE 机器,4TB * 7 块盘

数据量 N = 205

BE 磁盘 M = 200 * (4TB / 50GB) * 7 = 114800

x = min(M, N, 128) = 128

最终: 200

可以看到,详细逻辑与原则是匹配的。

后续分桶推算

上述是关于初始分桶的计算逻辑,后续分桶数因为已经有了一定的分区数据,可以根据已有的分区数据量来进行评估。后续分桶数会根据最多前 7 个分区数据量的 EMA[1](短期指数移动平均线)值,作为estimate_partition_size 进行评估。此时计算分桶有两种计算方式,假设以天来分区,往前数第一天分区大小为 S7,往前数第二天分区大小为 S6,依次类推到 S1;

  1. 如果 7 天内的分区数据每日严格递增,则此时会取趋势值

有6个delta值,分别是S7 - S6 = delta1,S6 - S5 = delta2,...S2 - S1 = delta6由此得到平均的delta值:avg_delta = (delta1 + delta2 + ... + delta6) / 6 = (S7 - S1) / 6那么,今天的estimate_partition_size = S7 + avg_delta
  1. 非第一种的情况,此时直接取前几天的 EMA 平均值

今天的 estimate_partition_size = EMA(S1, ..., S7)

根据上述算法,初始分桶个数以及后续分桶个数都能被计算出来。跟之前只能指定固定分桶数不同,由于业务数据的变化,有可能前面分区的分桶数和后面分区的分桶数不一样,这对用户是透明的,用户无需关心每一分区具体的分桶数是多少,而这一自动推算的功能会让分桶数更加合理。

自动分桶推算功能 PR:https://github.com/apache/doris/pull/15250

效果

当我们有了合适的分区分桶时,导入数据导到 Doris 后,数据会依照建表语句中的分区分桶列进行存储。上述网站站点数据的存储示例如图示:

图2:Doris 分区分桶后的数据存储

此时如果执行 SQL 查询:

select * from test_tbl where sdate = "2020-03-23"  and site = 1

根据谓词 sdate = "2020-03-23" 可以定位到分区 p20200323,谓词 site = 1 能定位到该分区下的 bucket_1。假设有 30 天数据,自动分桶推算得到的分桶个数为 20 个。则经过明确的分区分桶谓词下推,则可以将数据全表扫描量变为原来的 1/600(30 天*20 个桶 = 600),极大减少了数据的扫描范围、提高了查询的效率。

# 总结

整体来看,批量创建分区功能语法简洁有力,解决了用户针对大量历史数据分区创建的难题,既避免了手动创建大量分区的低效语法,又避免了动态分区大量参数的学习使用成本,且方式灵活多变、随意搭配组合各种类型的分区,大大提升了 Doris 在建表过程中的易用性。自动分桶推断功能智能高效,用户不需再关心分桶的细枝末节,系统自动帮助用户扩缩不同分区的分桶数,真正做到桶随业务变,降低学习成本的同时更是提升了查询效率。在与社区用户持续沟通中,我们也不断收获着许多新的需求,例如分区列为非时间列等,因此后续我们仍将继续完善对其他分区列的支持,例如数字分区列的批量创建等。最后,我们期待倾听更多用户的声音,在不断回馈用户以极简易用的使用体验的同时,也期待有更多人参与到 Apache Doris 的建设中来,欢迎你的加入!

本文引用

[1] https://zhuanlan.zhihu.com/p/587187198

作者介绍:

许瑞亮,SelectDB 存储研发工程师

胡得潮,SelectDB 生态研发工程师

李仕杨,SelectDB 生态研发工程师

下一代实时数据库:Apache Doris 【六】数据划分_doris支持多列分区吗 以 AGGREGATE KEY 数据模型为例进行说明。更多数据模型参阅 Doris 数据模型。列的基本类型, 可以通过在 mysql-client 中执行 HELP CREATE TABLE;查看。AGGREGATE KEY 数据模型中, 所有没有指定聚合方式(SUM 、REPLACE 、MAX、 MIN) 的列视为 Key 列。而其余则为 Value 列。定义列时, 可参照如下建议:➢ Key 列必须在所有 Value 列之前。➢ 尽量选择整型类型。因为整型类型的计算和查找比较效率远高于字符串。 阅读详情

相关推荐

doris:自动分桶

doris:自动分桶

qq_36070104的博客 1227

doris 动态分区

doris 分区表

qq_15138049的博客 3704

Apache Doris (十六) :Doris分区和分桶2-List分区

业务上,用户可以选择城市或者其他枚举值进行partition,对于这种枚举类型数据列进行分区就可以使用List分区。List分区列支持 BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR 数据类型,

qq_32020645的博客 1554

doris分区、join

原理在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。通过动态分区功能,用户可以在建表时设定动态分区的规则。FE 会启动一个后台线程,根据用户指定的规则创建或删除分区。用户也可以在运行时对现有规则进行变更。使用方式动态分区的规则可以在建表时指定,或者在运行时进行修改。当前仅支持对单分区列的分区表设定动态分区规则。

weixin_45012397的博客 3022

Apache Doris的分区与分桶详解

Apache Doris,一款高性能的分布式分析型数据库,其起源可追溯至Apache Incubator项目中的Palo。通过深度融合MPP(Massively Parallel Processing)架构与列式存储技术,Doris专为应对大数据环境下的复杂查询与实时分析挑战而诞生。随着全球数据量呈现爆炸式增长,Apache Doris以其杰出的性能表现和灵活多变的数据管理能力,逐渐脱颖而出,成为众多企业解决大数据难题的优选方案。

大模型大数据攻城狮的专栏 1623

Apache Doris (十七) :Doris分区和分桶3-分桶及建议

Doris数据表存储中,如果有分区,在插入数据时,数据会按照对应规则匹配写往对应的分区中,如果表除了有分区还有分桶,那么数据在写入某个分区后,还会根据分桶规则将数据写入不同的分桶(Tablet),目前分桶Bucekt目前仅支持Hash分桶,即根据对应列的hash值将数据划分成不同的分桶(Tablet)。注:表的数据量可以通过 SHOW DATA 命令查看,结果除以副本数,即表的数据量。4. 分桶的数量理论上没有上限。

qq_32020645的博客 931

一文教你玩转 Apache Doris 分区分桶新功能|新版本揭秘

数据分片(Sharding)是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制,而分布式数据库则通过数据划分的规则,将数据打散分布至不同的机器或节点上,形成分布式存储,因此突破了单机存储空间和 IO 的瓶颈、使库表数据量可以无限拓展

锋哥聊DORIS数仓 1120

Apache Doris的分区与分桶原理解析

合理的分区和分桶策略在 Apache Doris 中至关重要。通过选择合适的分区列和分桶列,合理设置分区范围和桶数,充分利用分区裁剪和并行查询技术,可以显著提升查询性能和数据管理效率。根据实际业务场景和数据特点,动态调整分区和分桶策略是优化的重要环节。

JustinMars的博客 1044

Doris分区与分桶深度解析:从概念区分到选型实战

分区和分桶是Doris数据分布的核心机制,理解它们的区别和选型原则是优化查询性能的基础。维度分区(Partition)分桶(Bucket)核心目的数据逻辑管理数据物理分布选型关键是否有时间字段?数据量是否>2亿?查询模式是点查还是分析?是否存在数据倾斜?常用策略按天/月Range分区Hash分桶(点查)或Random分桶(分析)数量建议按数据保留周期确定每个Tablet 1-20GB,BE数的整数倍不可变性可增删分区分桶数和分桶键不可改选型决策流程图fill:#333;important;

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1359

Dynamics 365 F&O新手必看:Visual Studio 2019搭建项目框架全流程(含Model避坑指南)

本文详细介绍了如何在Visual Studio 2019中为Dynamics 365 Finance and Operations搭建企业级项目框架,包括Model分层策略、Solution管理及开发工作流优化。特别提供了Model避坑指南和实用配置建议,帮助新手快速上手并避免常见错误。

weixin_30505225的博客 381

INMP441麦克风与ESP32的I2S音频采集实战指南

本文提供了INMP441数字麦克风与ESP32开发板通过I2S接口进行高质量音频采集的完整实战指南。详细讲解了硬件连接、软件配置、数据读取及基础处理,并分享了常见的避坑技巧与性能优化建议,帮助开发者快速构建物联网音频应用。

weixin_28396629的博客 598

DORIS - DORIS的分区分桶

在存储引擎方面,Apache Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。

记录并分享 3548

ATE测试的未来:自动化与智能化的技术演进

本文探讨了自动测试设备(ATE)在半导体产业中的技术演进,重点关注自动化与智能化的发展趋势。随着芯片制程的不断进步,ATE面临测试复杂度激增和成本压力等挑战。文章分析了AI技术在测试优化中的应用,如自适应测试和缺陷预测,以及模块化架构和端到端测试生态系统的创新。这些技术突破显著提升了测试效率和设备利用率,为半导体测试的未来发展指明了方向。

weixin_29232507的博客 614

Apache Doris数据分区Partition、数据分桶(distributed by)

目录1. 数据分区和分桶的关系2. 数据分区2.1 range分区 1. 数据分区和分桶的关系 先分区,再分桶。一个表不指定分区,默认只有一个分区 一个Partition有多个数据分片Tablet。Tablet数据移动、复制操作的最小物理存储单元。Partition是数据的导入与删除的最小管理单位 分区支持Range和List分区;分桶只支持Hash分桶 2. 数据分区 分区列必须为key列 不论什么字段数据类型,建表时写分区值,都必须加引号 2.1 range分区 mysql> mysql

Bulut0907 1万+

surfer10与Arcgis10.3 完美生成等值线和等值面方法

surfer10 与Arcgis10.3生成等值线和等值面的步骤如下: 1.准备surfer用的Book1.dat文件,格式如下: "x" "y" "z" 116.471992 40.809975 232 116.335556 40.700542 1235 116.541626 40.713333 214 116.73349 40.798607 566 2.在surfer中,选择Gr

哈里·雪利博客 1万+

别再让电池充不满!用CN3791芯片设计太阳能充电电路,这几个调试坑我帮你踩了

本文详细解析了使用CN3791芯片设计太阳能充电电路时的常见调试问题及解决方案。从RCS电阻的选择到MPPT电压偏差的修正,再到线路损耗和温度补偿的优化,提供了全面的避坑指南。通过实测数据和优化方案,帮助工程师提升锂电池充电效率,确保太阳能充电电路的稳定性和可靠性。

weixin_42528191的博客 238

玩转 Apache Doris 分区分桶新功能

Apache Doris中的分区与分桶

友莘居士的博客 506

视频编解码——视频编解码器工作原理

目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间

路人coder 1万+

Doris数据倾斜处理与查询优化完全指南:从原理到分区分桶实战

数据倾斜是分布式数据库的性能杀手,而合理的分区和分桶设计是解决倾斜问题的最有效手段。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1995

网络协议——Modbus-RTU

网络协议——Modbus-RTU,简介、消息格式、Modbus寄存器种类说明、功能码01H、功能码02H、功能码03H、功能码04H、功能码05H、功能码06H、功能码0FH、功能码10H。

计算机硕士的博客 9899

把 ABAP 接到外部世界的几条路, 从 Web Service 到 RFC、BAPI 与 IDoc 的完整理解

摘要: ABAP 的连接能力是其长期成为企业核心的关键,不仅支持通用协议(HTTP、SOAP、XML),还保留了 SAP 特有的技术(RFC、BAPI、IDoc)。Web Service 是跨系统通信的主轴,依赖 SOAP/WSDL 实现契约化协作,而 Enterprise Service 更强调业务语义的复用与治理。经典技术如 RFC 和 BAPI 因高效稳定仍广泛使用,尤其适合紧耦合场景。ABAP 通过分层工具箱(如代理生成、服务注册)实现灵活集成,平衡新旧技术,满足多样化的企业连接需求。 (字数:15

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 138

Apache Doris数据表设计:Doris简单使用;Doris基本概念;Doris数据模型;Doris列定义;Doris分区和分桶;Properties配置项;关于ENGINE;Doris索引

关于Doris表的类型,可以通过在 mysql-client 中执行 HELP CREATE TABLE;查看。AGGREGATE KEY 数据模型Key 列必须在所有 Value 列之前。尽量选择整型类型。因为整型类型的计算和查找效率远高于字符串。对于不同长度的整型类型的选择原则,遵循够用即可。对于 VARCHAR 和 STRING 类型的长度,遵循够用即可。表中一行数据所有列总的字节数不能超过100KB。如果数据一行非常大,建议拆分数据进行多表存储。

学亮编程手记 4151

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Apache Doris 基础 -- 数据表设计(分区分桶)

Apache Doris 基础 -- 数据表设计(分区分桶)

chinusyan的专栏 4478

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Apache Doris 分区与分桶策略实战解析

本文深入解析Apache Doris分区与分桶策略的实战应用。通过电商数据分析案例,详细阐述了如何根据数据特性和查询模式设计高效的表结构,包括单分区与复合分区的选择、动态分区管理、分桶列与分桶数的黄金法则,并提供了性能对比实测,帮助用户彻底解决查询慢与数据倾斜问题。

nokia的博客 1145

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Apache Doris 分区与分桶策略实战指南

本文深入解析Apache Doris的分区与分桶策略,这是优化查询性能与数据管理效率的核心。通过对比单分区与复合分区的适用场景,并结合分桶列选择、桶数计算等实战技巧,指导用户设计出高性能表结构,有效避免数据倾斜,实现数据均匀分布与高效查询。

weixin_29268637的博客 438
上一篇: 打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构
下一篇: Apache Doris 1.2.2 Release 版本正式发布
SelectDB技术团队
博客等级 码龄4年 2119粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SelectDB技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值