第2.2章:StarRocks表设计--数据模型

本文详细介绍了StarRocks的四种数据模型:明细模型、聚合模型、更新模型和主键模型。明细模型保存所有明细数据,适合追加式写入;聚合模型在导入时进行数据聚合,适用于汇总查询;更新模型仅保留最新数据,适用于数据频繁更新的场景;主键模型支持行级别的更新和删除操作,适合实时更新需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了全面的满足企业业务上的分析需求,StarRocks当前设计了四种数据模型:明细模型、聚合模型、更新模型、主键模型。

1明细模型

明细模型是StarRocks中最常用的数据模型,顾名思义,它会保留所有的明细数据,也就是说,在明细模型下,即便导入两条完全相同的数据,StarRocks也会将数据原封不动的保存进表,不会进行聚合的操作,也没有update的语义。

基于明细模型的特点,我们不难发现,明细模型通常用于追加式的数据写入,比较适合:

1、需要保留原始数据的业务;

2、查询维度不固定的业务;

3、数据产生后就不会发生太多变化的业务。

还是举一个简单的例子,在starrocks库中创建明细模型表table02:

CREATE TABLE IF NOT EXISTS starrocks.table02 (

    event_time DATETIME NOT NULL COMMENT "datetime of event",

    event_type INT NOT NULL COMMENT "type of event",

    user_id INT COMMENT "id of user",

    channel INT COMMENT ""

)

DUPLICATE KEY(event_time, event_type,user_id)

DISTRIBUTED BY HASH(user_id) BUCKETS 10;

这里我们使用DUPLICATE KEY(event_time, event_type, user_id)显式的说明采用明细模型,并且指定排序键为event_time、event_type和user_id。排序键是指该表中数据存储时多重排序的次序,具体概念我们后面再讨论,这里先注意:

1、若在数据列中我们未定义聚合函数(例如2.1章table01的total列),则默认采用明细模型;

2、明细模型可以使用DUPLICATE KEY(列1,列2……)显式的说明使用明细模型,也可以整个省略;

3、若显式指定使用明细模型,则DUPLICATE KEY(列1,列2……)中,排序键“列1、列2……”需要是建表语句中的前几列,且顺序需要和建表语句中的保持一致(例如table02中的event_time, event_type和table01中的user_id, device_code,device_price,event_time),否则建表会报错;

4、在省略DUPLICATE KEY(列1,列2……)时,StarRocks通常也会默认为表选择前三列作为排序键。

所以,table02的建表语句也可以简写为:

CREATE TABLE IF NOT EXISTS starrocks.table02 (

    event_time DATETIME NOT NULL COMMENT "datetime of event",

    event_type INT NOT NULL COMMENT "type of event",

    user_id INT COMMENT "id of user",

    channel INT COMMENT ""

)

DISTRIBUTED BY HASH(user_id);

我们对table02导入几条数据:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值