Doris----Rollup表分析及案例实现

这篇具有很好参考价值的文章主要介绍了Doris----Rollup表分析及案例实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合

之前的聚合模型:

用户id 数据插入时间 城市 年龄 性别 最后一次访问的时间 该用户的总消费额 该用户的最大停留时长 该用户的最小停留时长
10000 2017/10/2 北京 10 0 2017/10/02 08:00:00 65 15 2
10000 2017/10/2 北京 20 0 2017/10/02 08:00:00 65 15 2
10000 2017/10/2 北京 30 0 2017/10/02 08:00:00 65 15 2
10000 2017/10/1 上海 20 0 2017/10/01 08:00:00 100 122 2
10000 2017/10/2 上海 20 0 2017/10/02 08:00:00 30 30 2
10000 2017/10/3 上海 10 0 2017/10/03 08:00:00 55 33 2
10000 2017/10/4 上海 20 0 2017/10/04 08:00:00 65 15 2
10001 2017/10/1 上海 30 1 2017/10/01 17:05:45 20 22 22
10001 2017/10/2 上海 10 1 2017/10/01 17:05:45 10 123 22
10001 2017/10/2 天津 10 1 2017/10/01 17:05:45 18 2 22
10001 2017/10/1 上海 10 1 2017/10/01 17:05:45 10 123 22
10001 2017/10/1 天津 10 1 2017/10/01 17:05:45 18 2 22
10001 2017/10/1 天津 20 1 2017/10/01 17:05:45 28 45 22
10002 2017/10/1 天津 30 1 2017/10/01 17:05:45 35 11 22
10002 2017/10/2 天津 10 1 2017/10/01 08:00:00 20 23 2
10002 2017/10/2 北京 20 1 2017/10/03 17:05:45 35 11 22
10002 2017/10/1 天津 10 1 2017/10/01 08:00:00 20 23 2
10002 2017/10/3 北京 20 1 2017/10/03 17:05:45 35 11 22
10002 2017/10/3 北京 30 1 2017/10/03 08:00:00 20 23 2

 1.求每个城市每个用户每天的总销售额

select 
user_id,city,date,
sum(sum_cost) as sum_cost
from t
group by user_id,city,date

 文章来源地址https://www.toymoban.com/news/detail-466818.html

-- user_id      date             city      sum_cost
   10000        2017/10/2        北京        195
   10000        2017/10/1        上海        100
   10000        2017/10/2        上海        30 
   10000        2017/10/3        上海        55 
   10000        2017/10/4        上海        65 
   10001        2017/10/1        上海        30
   10001        2017/10/2        上海        10        
   10001        2017/10/2        天津        18         
   10001        2017/10/1        天津        46
   10002        2017/10/1        天津        55
   10002        2017/10/3        北京        55 
   10002        2017/10/2        天津        20        
   10002        2017/10/2        北京        35        

 2.求每个用户、每个城市的总消费额

select 
user_id,city,
sum(sum_cost) as sum_cost
from t
group by user_id,city
user_id      city       sum_cost
10000        北京        195
10000        上海        100
10001        上海        40
10001        天津        64
10002        天津        75
10002        北京        90

 3.求每个用户的总消费额

select 
user_id,
sum(sum_cost) as sum_cost
from t
group by user_id
user_id        sum_cost
10000            295
10001            104
10002            165

 Doris----Rollup表分析及案例实现

 1基本概念

通过建表语句创建出来的表称为 Base 表(Base Table,基表)

在 Base 表之上,我们可以创建任意多个 ROLLUP 表。这些 ROLLUP 的数据是基于 Base 表产生的,并且在物理上是独立存储的。

Rollup表的好处:

  1. 和基表共用一个表名,doris会根据具体的查询逻辑选择合适的数据源(合适的表)来计算结果

  2. 对于基表中数据的增删改,rollup表会自动更新同步

 2 Aggregate 模型中的 ROLLUP

 查看下之前建得一张表:

mysql> desc ex_user all;  

示例1:查看某个用户的总消费

添加/删除roll up表

alter table aggregate表名 add rollup "rollup表的表名" (user_id,city,date,cost);

alter table ex_user add rollup rollup_ucd_cost(user_id,city,date,cost);
alter table ex_user add rollup rollup_u_cost(user_id,cost);
alter table ex_user add rollup rollup_cd_cost(city,date,cost);

alter table ex_user drop rollup rollup_u_cost;
alter table ex_user drop rollup rollup_cd_cost;

--如果是replace聚合类型得value,需要指定所有得key
-- alter table ex_user add rollup rollup_cd_visit(city,date,last_visit_date);
-- ERROR 1105 (HY000): errCode = 2, detailMessage = Rollup should contains 
-- all keys if there is a REPLACE value

--添加完成之后可以show一下,看看底层得rollup有没有执行完成
SHOW ALTER TABLE ROLLUP;

Doris 会自动命中这个 ROLLUP 表,从而只需扫描极少的数据量,即可完成这次聚合查询。

explain SELECT user_id, sum(cost) FROM ex_user GROUP BY user_id;

 Doris----Rollup表分析及案例实现

3 Duplicate 模型中的 ROLLUP

ROLLUP 调整前缀索引(新增一套前缀索引)

因为建表时已经指定了列顺序,所以一个表只有一种前缀索引。这对于使用其他不能命中前缀索引的列作为条件进行的查询来说,效率上可能无法满足需求。因此,我们可以通过创建 ROLLUP 来人为的调整列顺序。

Base 表结构如下:

ColumnName Type
user_id BIGINT
age INT
message VARCHAR(100)
max_dwell_time DATETIME
min_dwell_time DATETIME

 我们可以在此基础上创建一个 ROLLUP 表:

ColumnName Type
age INT
user_id BIGINT
message VARCHAR(100)
max_dwell_time DATETIME
min_dwell_time DATETIME

 可以看到,ROLLUP 和 Base 表的列完全一样,只是将 user_id 和 age 的顺序调换了。那么当我们进行如下查询时:

SELECT * FROM table where age=20 and message LIKE "%error%";

 会优先选择 ROLLUP 表,因为 ROLLUP 的前缀索引匹配度更高。

 

ROLLUP使用说明

  1. ROLLUP 是附属于 Base 表的,用户可以在 Base 表的基础上,创建或删除 ROLLUP,但是不能在查询中显式的指定查询某 ROLLUP。是否命中 ROLLUP 完全由 Doris 系统自动决定

  2. ROLLUP 的数据是独立物理存储的。因此,创建的 ROLLUP 越多,占用的磁盘空间也就越大。同时对导入速度也会有影响,但是不会降低查询效率(只会更好)。

  3. ROLLUP 的数据更新与 Base 表是完全同步的。用户无需关心这个问题。

  4. 在聚合模型中,ROLLUP 中列的聚合类型,与 Base 表完全相同。在创建 ROLLUP 无需指定,也不能修改。

  5. 可以通过 EXPLAIN your_sql; 命令获得查询执行计划,在执行计划中,查看是否命中 ROLLUP。

  6. 可以通过 DESC tbl_name ALL; 语句显示 Base 表和所有已创建完成的 ROLLUP

 

到了这里,关于Doris----Rollup表分析及案例实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实现 Rollup 插件alias 并使用vitest提高开发效率

    本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 首先执行 npm init 命令初始化一个 package.json 文件,由于插件使用了 typescript 作为类型校验,需要执行 tsc --init 命令去生成一

    2024年02月15日
    浏览(46)
  • 实现 Rollup 插件alias 并使用单元测试提高开发效率

    本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 首先执行 npm init 命令初始化一个 package.json 文件,由于插件使用了 typescript 作为类型校验,需要执行 tsc --init 命令去生成一

    2024年02月16日
    浏览(46)
  • rollup + typescript 搭建项目

    1、创建一个项目目录,进入该目录 2、执行 npm init -y 生成 package.json 3、执行 tsc --init 生成 tsconfig.json (1)安装 typescript 和 rollup-plugin-typescript (2)安装 rollup,我这里是全局安装 可以用 rollup -v 查看安装版本 中文文档:文档链接 (1)修改 tsconfig.json (2)根目录新建 rollup.

    2024年01月16日
    浏览(43)
  • Rollup去中心化

    前序博客有: Rollup Decentralization 所有Rollup项目的目标应为: 构建技术栈 将运营和治理去中心化,并交给社区 从而可实现去中心化世界。“去中心化”一词激发了一种开放、无许可的理念,以及一大批具有更快乐哲学的参与者。 大多数L1区块链系统都是从 Honest Majority 诚实的

    2024年02月08日
    浏览(52)
  • 使用 pnpm + Monorepo + rollup 实现Psd、Sketch 转 json开源库, 该json支持作为fabric.js画布模板

    最近使用 pnpm + Monorepo + rollup 开源了一个工具库 tojson.js tojson.js 是一个支持解析 Psd、Sketch 转 json 的类库, 该 json 满足 fabric.js 画布渲染的数据格式. 后期也会增加 ppt、pdf 格式 为什么要使用 pnpm + Monorepo ? 不止开源了一个工具库 tojson.js, 也开源了 sketchtojson, pst-json.js 库, tojson.j

    2024年01月20日
    浏览(39)
  • 11.Oracle中rollup函数详解

    【基本介绍】 【格式】:group by rollup(字段1,字段2,字段3,...,字段n) 【说明】:rollup主要用于分组汇总,如果rollup中有n个字段,则会分别按【字段1】、【字段1,字段2】,【字段1,字段2,字段3】,...,【字段1,字段2,字段3,...字段n】进行分组统计,同时还会去掉所有分组字段进行

    2024年02月11日
    浏览(39)
  • Rollup L2 and L3

    前序博客有: Rollup Decentralization Rollup去中心化 Rollup交易的固化流程 Layer 1:数据可用层 Layer 2:执行层 Layer 3:链下系统 所有系统设计中,都包含了某种可信元素,用于保护系统safety和liveness。具体的可信机制可为一定阈值的参与者会忠实地遵循指定的协议,具体的阈值可为

    2024年02月03日
    浏览(29)
  • 详解区块链的 Rollup 扩容方案

    2017年由 CryotoKitty 引发的以太坊拥堵事件,让人们认识到了区块链对于数据交易吞吐量是存在上限的,因此,如何提高这个上限,也成为了近两年来,区块链研发者们不断思考的一个问题。 到目前为止,主要产生了两种解决方案。其一是直接对区块链本身的数据进行分片改造

    2024年02月07日
    浏览(38)
  • webpack、rollup、parcel 优势和劣势?

    结论先行: webpack 是 模块化构建工具,具有强大的 loader 和插件生态,适用于大型复杂项目的构建 ; rollup 适用于基础库的打包,功能没有webpack 强大 ; parcel 适用于简单的实验性项目,在公司真实项目一般不用 ; 1、Webpack webpack 适用于大型复杂的前端站点构建 ; webpack 具有

    2024年02月05日
    浏览(50)
  • 构建工具 Vite、Webpack、Rollup对比

    热更新方面:webpack支持HMR,但是webpack需要全部重新编译并更新,效率较低 tree-shaking:webpack2开始支持且消除效果不好,但是webpack5有更好的tree-shaking(去除未使用代码) 分包方面:webpack支持代码切割。(分包) ESM打包:现在webpack支持es6module输出 优点: Rollup 是一款 ES Mod

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包