第2.1章:StarRocks表设计--概述

第2.2章 StarRocks表设计——排序键和数据模型 2.2 StarRocks表设计——排序键和数据模型 阅读详情

建表是使用StarRocks非常重要的一环,规范的表设计在某些场景下甚至能使查询性能有数倍的提升。StarRocks的表设计涉及到的知识点主要包括数据模型选择、分区分桶、排序键和前缀索引、列级别索引以及字段类型等等。

StarRocks的建表语句与MySQL比较相似,但也有自己的特点。我们先在StarRocks中创建一个演示用的数据库starrocks(后续所有的建表咱们都在里面进行),然后用比较规范的建表语句创建表table01。这里的建表语句我们只是先把涉及的点覆盖到,后面会逐项展开说明:

mysql> create database starrocks;

mysql> use starrocks;

mysql> CREATE TABLE table01 (

    user_id INT COMMENT "id of user",

    device_code INT COMMENT "code of device",

    device_price DECIMAL(10,2) COMMENT "",

    event_time DATETIME NOT NULL COMMENT "datetime of event",

    total DECIMAL(18,2) SUM DEFAULT "0" COMMENT "total amount of equipment",

    index index01 (user_id) USING BITMAP COMMENT "bitmap index"

)

AGGREGATE KEY(user_id, device_code,device_price,event_time)

PARTITION BY RANGE(event_time)

(

PARTITION p1 VALUES LESS THAN ('2021-01-31'),

PARTITION p2 VALUES LESS THAN ('2021-02-28'),

PARTITION p3 VALUES LESS THAN ('2021-03-31')

)

DISTRIBUTED BY HASH(user_id,device_code) BUCKETS 20

PROPERTIES (

"replication_num" = "1",

"bloom_filter_columns"="event_time"

);

在建表完成后,我们可以用show create table语句查看建表语句:

show create table table01;

也可以使用desc命令查看表结构:

desc table01;

或者:

SHOW FULL COLUMNS FROM table01;

table01是一个简单的聚合模型分区表,语句乍一看比较长,我们将其拆分为五部分来研究:

第一部分:

CREATE TABLE table01 (

    user_id INT COMMENT "id of user",

    device_code INT COMMENT "code of device",

    device_price DECIMAL(10,2) COMMENT "",

    event_time DATETIME NOT NULL COMMENT "datetime of event",

total DECIMAL(18,2) SUM DEFAULT "0" COMMENT " total amount of equipment",

…………

这里是列创建部分,与MySQL语法较为相似。我们创建了五列user_id、device_code、device_price、event_time和total。每列的语法为:

col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"] COMMENT " xxxxxx"

这里的前四列我们可以称之为维度列,第五列total列为指标列,我们为其设置了聚合类型sum。所以在table01中,前四列相同的数据在导入StarRocks时,指标列total会根据聚合类型sum自动聚合。

第二部分:

…………

    index index01 (user_id) USING BITMAP COMMENT 'bitmap index'

)

…………

这部分是创建索引,我们为user_id列创建了名为index01的bitmap索引。当前这种写法仅支持BITMAP索引,创建语法为:

INDEX index_name (col_name1[, col_name2, ...]) [USING BITMAP] COMMENT 'xxxxxx'

bitmap索引我们也可以在建表完成后再创建,这里暂不展开。

第三部分:

…………

AGGREGATE KEY(user_id, device_code,device_price,event_time)

…………

这里是为聚合模型显式的定义排序键,在为聚合模型定义排序键时,需要把所有的维度列按照建表的顺序都写上。在StarRocks聚合模型建表时,只要给指标列定义指明聚合函数,就会自动启用聚合模型,所以这部分大多数情况下其实也可以省略不写。

排序键中的列需要与建表语句中列的顺序一致,我们可以从头选取几个列作为排序键。在省略这部分时,StarRocks也会自动选择表结构前面的几列作为排序列,所以通常我们需要把经常作为查询条件的列作为排序键写在建表语句靠前部分以加速查询。

第四部分:

…………

PARTITION BY RANGE(event_time)

(

PARTITION p1 VALUES LESS THAN ('2021-01-31'),

PARTITION p2 VALUES LESS THAN ('2021-02-28'),

PARTITION p3 VALUES LESS THAN ('2021-03-31')

)

DISTRIBUTED BY HASH(user_id,device_code) BUCKETS 20

…………

这里是为table01指定分区和分桶,我们按照event_time根据日期分为三个区,然后按照user_id和device_code将每个分区数据根据hash分散到20个桶中,最终会将数据切分为子表tablet分布在桶中。

分区的主要目的是裁剪数据,来最大限度地减少扫描数据量,从而提高查询性能。通常我们会使用日期进行分区。这里如果不进行分区,StarRocks会将整个表的数据视为在一个大分区内。

分桶是将分区后的数据打散为一个个tablet,使数据多副本分散在集群的多个节点上,充分发挥集群多机多核的查询优势。为了保证数据不倾斜,我们会根据业务选择一列或者多列进行分桶。如果这里不指定分桶数,比如只写为“DISTRIBUTED BY HASH(user_id,device_code)”,StarRocks会默认将数据分为10个桶。

第五部分:

…………

PROPERTIES (

"replication_num" = "1",

"bloom_filter_columns"="event_time"

);

这部分用来指定表的一些其他属性,比如副本数、存储介质、动态分区、bloom_filter索引等等。例如这里的bloom_filter_columns为BloomFilter索引,replication_num为副本数。我们将table01的数据副本指定为了1,而在不指定时,StarRocks默认为三副本数据(这里的副本数与ElasticSearch等的含义不同,StarRocks的1副本意思是仅有一份数据,三副本为共有三份数据)。提前说明一下,在默认情况下,这里的属性是针对全表的,但是,StarRocks也支持针对分区级别单独设置一些属性,这里咱们也暂不展开。

为方便展示聚合模型的特性,我们导入三条数据:

mysql> insert into table01 values(1001,27,9.99,'2021-03-11',9.99);

mysql> insert into table01 values(1001,27,9.99,'2021-03-11',10.99);

mysql> insert into table01 values(1002,28,15.49,'2021-03-12',15.49);

mysql> select * from table01;

+---------------+--------------------+--------------------+-------------------------------+---------------+

| user_id       | device_code    | device_price    | event_time                   |   total          |

+---------------+--------------------+--------------------+-------------------------------+---------------+

|    1001        |          27           |        9.99          | 2021-03-11 00:00:00    |  20.98         |

|    1002        |          28           |       15.49         | 2021-03-12 00:00:00    |  15.49         |

+---------------+--------------------+--------------------+-------------------------------+---------------+

查询发现表中只有两条数据,这是因为导入的前两条数据由于前四列(维度列)的值相同,在导入时自动聚合,对第五列(指标列)进行了sum求和运算。

以上就是StarRocks聚合模型的简单例子,后续,我们会针对StarRocks的建表进行展开介绍。
 

第2.4章 StarRocks表设计——分区分桶与副本数 2.4 StarRocks表设计——分区分桶与副本数 阅读详情

相关推荐

StarRocks从入门到精通系列三:创建表和导入和查询数据

StarRocks从入门到精通系列三:创建表、导入和查询数据

zhengzaifeidelushang的博客 2139

StarRocks 建表指南

Star Rocks表中的数据分为key与value在上面例子中,三种模型都使用了(siteid, city, username) 作为表的排序键(key)。排序列的定义必须出现在建表语句中其他列的定义之前。排序列的顺序可以是(siteid, city),或者是(siteid, city, username),但不能是(city,username)或者是(siteid, city, pv)排序列的顺序是由CREATE TABLE中的顺序决定的。

Shockang的博客 1万+

StarRocks实战——表设计规范与监控体系

StarRocks实战——表设计规范与监控体系

爱吃辣条的博客 2879

大数据StarRocks(七):数据表创建

建表的基本语法[key_desc]参数说明col_name:列名称注意,在一般情况下,不能直接创建以以 __op 或 __row 开头命名的列,因为此类列名被 StarRocks 保留用于特殊目的,创建这样的列可能导致未知行为。如需创建这样的列,必须将 FE 动态参数 allow_system_reserved_names 设置为 TRUE。col_type:列数据类型之前博文数据类型agg_type:聚合类型,如果不指定,则该列为 key 列。否则,该列为 value 列。

运维仙人 3834

StarRocks从入门到精通系列四:表设计

StarRocks从入门到精通系列四:表设计

zhengzaifeidelushang的博客 960

labview中DAQ采集多个数据通道(温度传感器)(TTL信号的曲轴位置传感器)总结

文章目录前言一、面对的问题篇二、问题解决篇三、后续工作总结 前言 我研一的项目利用labview软件和NI数据采集卡采集发动机传感器的信号然后进行采集,发动机传感器是有很多种的,所以难以避免的需要采集多个通道的传感器信号。 一、面对的问题篇 前篇已经写道我已经将温度传感器的信号采集出来,也可以将其数据进行信号处理,由电压信号转变为温度值。但是想要采集多个通道的信号,加上TTL信号的曲轴位置传感器,我模仿温度传感器采集的程序另加了一个DAQ助手进行采集。也就是如图所示的程序: 但是这个程序不能正常显

xiaobaiwsc的博客 1万+

第2.1章 StarRocks表设计——概述

第2.1章 StarRocks表设计——概述

爱吃辣条的博客 2264

物体检测之非极大值抑制:NMS、softNMS、softerNMS、IoU-Net

当前的物体检测算法为了保证召回率,对于同一个真实物体往往会有多个的候选框输出。由于多余的候选框会影响检测精度,因此需要利用NMS过滤掉重叠的候选框,得到最佳的预测输出。当前有如下几种较为常见的NMS方法, 1.基本NMS 非极大值抑制, 顾名思义就是抑制不是极大值的边框,这里的抑制通常是直接去掉冗余的边框。 这个过程涉及以下两个量化指标: 1.预测得分:NMS假设一个边框的预测得分越高,这个框...

LeoLee 1941

第2.4章:StarRocks表设计实战--分区策略与分桶优化指南

本文深入探讨StarRocks表设计中的分区策略与分桶优化,通过实战案例展示如何选择分区键和分桶键以提升查询性能。文章详细介绍了分区裁剪、动态分区管理及冷数据自动清理等高级技巧,帮助开发者避免常见设计陷阱,实现高效数据管理。

play7的博客 989

nRF5340双核实战:从Zephyr环境搭建到蓝牙协议栈部署

本文详细介绍了nRF5340双核处理器的开发实践,包括Zephyr环境搭建、蓝牙协议栈部署及双核协同工作配置。通过实战案例展示了如何利用nRF5340的双核异构架构提升蓝牙应用性能,并提供了调试技巧与资源优化建议,帮助开发者高效实现低功耗蓝牙设备开发。

weixin_42525385的博客 380

ESP32系列之LVGL(三):Gui-Guider的使用

Gui-Guider的使用

m0_55986987的博客 2万+

StarRocks 的表设计规范与监控体系

StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景,本文实例版本2.2。

weixin_54735428的博客 1454

避坑指南:Windows11语言包安装后部分界面仍显示中文的终极解决方案

本文详细解析了Windows11语言包安装后部分界面仍显示中文的问题,提供了从基础到进阶的完整解决方案。通过PowerShell命令、注册表清理和系统文件检查等方法,帮助用户彻底解决语言显示不一致的问题,确保系统界面语言统一。

weixin_29232507的博客 1634

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

为了全面的满足企业业务上的分析需求,StarRocks当前设计了四种数据模型:明细模型、聚合模型、更新模型、主键模型。 1明细模型 明细模型是StarRocks中最常用的数据模型,顾名思义,它会保留所有的明细数据,也就是说,在明细模型下,即便导入两条完全相同的数据,StarRocks也会将数据原封不动的保存进表,不会进行聚合的操作,也没有update的语义。 基于明细模型的特点,我们不难发现,明细模型通常用于追加式的数据写入,比较适合: 1、需要保留原始数据的业务; 2、查询维度不固定的业务;

流木的博客 8209

偏最小二乘回归分析原理详解和案例分析实例

偏最小二乘回归分析原理详解背景偏最小二乘回归分析 Partial least squares regression analysis基本思想建模步骤步骤一:分别提取两变量组的第一对成分,并使之相关性达最大步骤二:建立 y1,⋯ ,yp\boldsymbol{y}_{1}, \cdots, \boldsymbol{y}_{p}y1​,⋯,yp​ 对 u1\boldsymbol{u}_{1}u1​ 的回归及 x1,⋯ ,xm\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9976

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5283

第2.11章:StarRocks表设计--外部表

除了创建表、视图或者物化视图,StarRocks还支持创建外部表来访问外部数据源。所谓外部表,可以简单的理解为是在StarRocks中建立的与外部数据的映射,所有的数据还在各自的数据源中,但我们可以通过外部表向所在的数据源发起查询。目前StarRocks已支持的第三方数据源包括MySQL、ElasticSearch、Hive以及StarRocks。 外部表的创建和使用都比较简单,下面我们逐个介绍。 1 MySQL外部表 在星型模型中,我们一般将表类型划分为维度表和指标表。维度表数据量通常较小,但一般都

流木的博客 8758

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

第2.10章:StarRocks表设计--Schema Change

在分布式表中,Schema Change的限制是比较多的,有些情况还会是一个比较重的操作。StarRocks中目前进行schema change的方式有三种:sorted schema change,direct schema change和linked schema change。sorted schema change会改变列的排序方式,需对数据进行重新排序。3)只能修改列的类型、注释和位置,不支持修改列名和默认值,所以在修改列时,列名和默认值需在修改语句中按照原属性显式的写出;例如修改列的类型等。..

流木的博客 7380

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

第2.7章:StarRocks表设计--视图

StarRocks中最主要的OLAP类型的表设计咱们前面已经梳理完了,除此之外,StarRocks中还涉及到了一些与表设计相关的内容,我们也一并进行展开。首先,咱们来简单说一下视图功能。 1视图定义 StarRocks也拥有视图功能,且其与MySQL中的视图概念及语法非常类似。StarRocks中的视图也是一种虚拟存在的表,其行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果。 2视图优势 视图的优势主要有: 1)重用sql语句; 2)简化

流木的博客 3110

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

StarRocks学习2-数据建模与表设计

层级关系,形成树形结构,通过“Catalog.数据库.表”的全称可唯一定位一个表。作用分工Catalog 解决“跨数据源访问”问题;Database 解决“表的逻辑分组”问题;Table 解决“数据存储与业务映射”问题。这种层级结构让 StarRocks 既能高效管理本地数据,又能无缝对接外部数据源,适合复杂数据架构下的统一查询和分析。类型是否存储数据是否自动更新查询加速实时性典型用途视图❌ 否❌ 否❌ 否实时查询简化 SQL、统一口径同步物化视图✅ 是✅ 是。

sun657053178的博客 1052

【免费下载】 StarRocks表设计全面指南:从入门到精通

StarRocks作为一款高性能分析型数据库,其表设计理念与传统关系型数据库既有相似之处,也有独特优势。理解StarRocks的表结构设计原理,对于构建高效的数据分析平台至关重要。 ### 1.1 表的基本组成 StarRocks表由行和列构成,这是与传统数据库相同的部分: - **行(Row)**:代表一条完整记录,包含多个字段的数据 - **列(Column)**:定义记录的属性,每个列有...

gitblog_00131的博客 609

第2.9章:StarRocks表设计--Colocation Join

在分布式集群中,每张表的数据都会分散在集群多个节点上,所以当我们进行join时避免不了节点间数据网络传输带来额外的延迟和其他开销。为了加速查询,StarRocks设计了Colocation Join。 在Colocation Join中,StarRocks引入了Colocation Group(CG)和Colocation Group Schema(CGS)的概念,CGS是指CG的分桶键,分桶数以及副本数等信息。Colocation Join实现的核心就是将同一个Colocation Group中的表采用

流木的博客 2940

Flink-StarRocks详解:第二部分(第52天)

本文为Flink-StarRocks详解后续章节:主要详解StarRocks表设计,聚合,更新,主键三大数据模型。由于篇幅过长,后续接着下面进行详解: StarRocks分区分桶 StarRocks查询数据湖 实现即席查询案例。

syhiiu的博客 6620
上一篇: 第1.5章:StarRocks部署--集群部署
下一篇: 第2.2章:StarRocks表设计--数据模型
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值