帮你快速理解、总结文档立即下载

数据分布

最近更新时间:2026-07-06 11:20:30

我的收藏

常见数据分布方式

现代分布式数据库中,常见的数据分布方式有如下几种:
Round-Robin:以轮询的方式把数据逐个放置在相邻节点上。
Range:按区间进行数据分布。
List:直接基于离散的各个取值做数据分布,性别、省份等数据就满足这种离散的特性。每个离散值会映射到一个节点上,多个不同的取值可能也会映射到相同节点上。
Hash:通过哈希函数把数据映射到不同节点上。
为了更灵活地划分数据,除了单独采用上述数据分布方式之一以外,您还可以根据具体的业务场景需求组合使用这些数据分布方式。常见的组合方式有 Hash+Hash、Range+Hash、Hash+List。更多信息请查看文档 数据分布

Random 分布

建表时不设置分区和分桶方式,则默认使用 Random 分布。
CREATE TABLE site_access1 (
event_day DATE,
site_id INT DEFAULT 10,
pv BIGINT DEFAULT 0 ,
city_code VARCHAR(100),
user_name VARCHAR(32) DEFAULT ''
)
DUPLICATE KEY (event_day,site_id,pv);
-- 没有设置任何分区和分桶方式,默认为 Random 分布(目前仅支持明细表)

Hash 分布

CREATE TABLE site_access2 (
event_day DATE,
site_id INT DEFAULT 10,
city_code SMALLINT,
user_name VARCHAR(32) DEFAULT '',
pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY (event_day, site_id, city_code, user_name)
-- 设置分桶方式为哈希分桶,并且必须指定分桶键
DISTRIBUTED BY HASH(event_day,site_id);

Range + Random 分布

CREATE TABLE site_access3 (
event_day DATE,
site_id INT DEFAULT 10,
pv BIGINT DEFAULT 0 ,
city_code VARCHAR(100),
user_name VARCHAR(32) DEFAULT ''
)
DUPLICATE KEY(event_day,site_id,pv)
-- 设为分区方式为表达式分区,并且使用时间函数的分区表达式(当然您也可以设置分区方式为 Range 分区)
PARTITION BY date_trunc('day', event_day);
-- 没有设置分桶方式,默认为随机分桶(目前仅支持明细表)

Range + Hash 分布

CREATE TABLE site_access4 (
event_day DATE,
site_id INT DEFAULT 10,
city_code VARCHAR(100),
user_name VARCHAR(32) DEFAULT '',
pv BIGINT SUM DEFAULT 0
)
AGGREGATE KEY(event_day, site_id, city_code, user_name)
-- 设为分区方式为表达式分区,并且使用时间函数的分区表达式(当然您也可以设置分区方式为 Range 分区)
PARTITION BY date_trunc('day', event_day)
-- 设置分桶方式为哈希分桶,必须指定分桶键
DISTRIBUTED BY HASH(event_day, site_id);

List + Random 分布

CREATE TABLE t_recharge_detail1 (
id bigint,
user_id bigint,
recharge_money decimal(32,2),
city varchar(20) not null,
dt date not null
)
DUPLICATE KEY(id)
-- 设为分区方式为表达式分区,并且使用列分区表达式(当然您也可以设置分区方式为 List 分区)
PARTITION BY (city);
-- 没有设置分桶方式,默认为随机分桶(目前仅支持明细表)

List + Hash 分布

CREATE TABLE t_recharge_detail2 (
id bigint,
user_id bigint,
recharge_money decimal(32,2),
city varchar(20) not null,
dt date not null
)
DUPLICATE KEY(id)
-- 设为分区方式为表达式分区,并且使用列分区表达式(当然您也可以设置分区方式为 List 分区)
PARTITION BY (city)
-- 设置分桶方式为哈希分桶,并且必须指定分桶键
DISTRIBUTED BY HASH(city,id);