前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[最佳实践] -- 建表如何选择Doris表模型

[最佳实践] -- 建表如何选择Doris表模型

作者头像
小伟
发布2022-07-24 09:35:07
4.2K0
发布2022-07-24 09:35:07
举报
文章被收录于专栏:魔都程序缘魔都程序缘

Doris的表模型和MySQL的存储引擎: innodb,myisam,memeory等功能类似, 不同的表模型擅长处理不同的数据方式. 如何能高效的查询, 直接取决于选择的表模型. 表一旦创建, 表模型不能更改.

1. Doris表中字段分类

在Doris表中, 字段被人为的分为2种: Key和Value. Key也就是俗称的维度, Value是指标. 建表时Key列必须在Value列前面.

2. Doris目前支持三种表模型

  1. AGGREGATE 聚合模型, 聚合模型支持Value列在导入数据时, 按照指定的聚合类型聚合数据, 达到预先聚合数据, 提高查询的目的. 目前Doris支持4种聚合方式: SUM、REPLACE、MAX、MIN, 分别的聚合含义如下: 1). SUM:求和,多行的 Value 进行累加。 2). REPLACE:替代,下一批数据中的 Value 会替换之前导入过的行中的 Value。 3). MAX:保留最大值。 4) MIN:保留最小值。 接下来以社区的sum聚合的一个例子说明, 统计一个网站pv, 先用如下SQL创建一个表:
代码语言:javascript
复制
  CREATE TABLE `agg_tbl_demo` (
      siteid      INT,
      city        SMALLINT,
      username    VARCHAR(32),
      pv BIGINT   SUM DEFAULT '0'
  ) ENGINE=OLAP
  AGGREGATE KEY(siteid, city, username)
  DISTRIBUTED BY HASH(`siteid`) BUCKETS 1
  PROPERTIES (
      "replication_num" = "1"
  );

siteid: 表示网站id

city: 访问者所在的城市id

username: 访问者用户名

pv: 访问者pv. 后面的sum表示导入这列数据时, 以siteid,city,username为“主键”, 将导入的每条数据的pv值做sum计算保存.

我们分别添加三条数据, 然后分别观察三条数据的添加结果:

francis访问了站点id=100, 次数为1次:

代码语言:javascript
复制
insert into agg_tbl_demo values(100, 200, 'francis', 1);
结果为:
 +--------+------+----------+------+
  | siteid | city | username | pv   |
  +--------+------+----------+------+
  |    100 |  200 | francis  |    1 |
  +--------+------+----------+------+

jim访问了站点100, 次数为1次

代码语言:javascript
复制
insert into agg_tbl_demo values(100, 200, 'jim', 1); 
结果为:
  +--------+------+----------+------+
  | siteid | city | username | pv   |
  +--------+------+----------+------+
  |    100 |  200 | francis  |    1 |
  |    100 |  200 | jim      |    1 |
  +--------+------+----------+------+

francis又访问了站点100, 次数为1次:

代码语言:javascript
复制

insert into agg_tbl_demo values(100, 200, 'francis', 1);
结果为:
  +--------+------+----------+------+
  | siteid | city | username | pv   |
  +--------+------+----------+------+
  |    100 |  200 | francis  |    2 |
  |    100 |  200 | jim      |    1 |
  +--------+------+----------+------+

执行完成后, 看看francis的统计结果, 发现francis的pv由1变成2了. 2=1+1.再想想sum的聚合方式. 是不是有点意思.

jim又访问了站点100, 次数为10次.

代码语言:javascript
复制
insert into agg_tbl_demo values(100, 200, 'jim', 10); 
结果为:
  +--------+------+----------+------+
  | siteid | city | username | pv   |
  +--------+------+----------+------+
  |    100 |  200 | francis  |    2 |
  |    100 |  200 | jim      |   11 |
  +--------+------+----------+------+

此时看看jim的pv由1变成11了, 11=1+10.再想想sum的聚合方式. 是不是有点意思.

聚合表模型的好处时可以采用预先聚合的方式, 加快查询速度. 但是原始数据会丢失, 会失去一定的灵活性. 一般比较适用于一些固定报表、固定统计. 比如pv, uv.

2. UNIQUE

唯一模型, 其实是聚合模型的一个特例, 在唯一模型中, 所有的Value列会按照REPLACE的方式聚合, 也就是除了UNIQUE KEY之外的列, 都是新数据替换旧数据.

唯一模型是解决数据有主键, 除了主键之外的都替换的情况, 同时也可以保存明细.

3. DUPLICATE

明细模型, 很多时候数据是没有主键、也不需要预先聚合的明细.

这种数据模型区别于 Aggregate 和 Uniq 模型。数据完全按照导入文件中的数据进行存储,不会有任何聚合。即使两行数据完全相同,也都会保留

社区原文: http://doris.apache.org/master/zh-CN/getting-started/data-model-rollup.html#aggregate-%E6%A8%A1%E5%9E%8B

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

本文分享自 魔都程序缘 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档