主頁 > 資料庫 > Doris(三) -- Rollup和物化視圖

Doris(三) -- Rollup和物化視圖

2023-05-30 08:18:20 資料庫

Rollup

ROLLUP 在多維分析中是“上卷”的意思,即將資料按某種指定的粒度進行進一步聚合,
通過建表陳述句創建出來的表稱為 Base 表(Base Table,基表)
在 Base 表之上,我們可以創建任意多個 ROLLUP 表,這些 ROLLUP 的資料是基于 Base 表產生的,并且在物理上是獨立存盤的,
Rollup表的好處:

  1. 和基表共用一個表名,doris會根據具體的查詢邏輯選擇合適的資料源(合適的表)來計算結果
  2. 對于基表中資料的增刪改,rollup表會自動更新同步

Aggregate 模型中的 ROLLUP

添加一個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;

獲取不同城市,不同年齡段用戶的總消費、最長和最短頁面駐留時間

 alter table ex_user add rollup rollup_city(city,age,cost,max_dwell_time,min_dwell_time);
 
 -- 當創建好了立即去查看得時候就會發現,他還沒有開始
 SHOW ALTER TABLE ROLLUP;
 然后過會再去查詢得時候,他就完成了,看他的狀態即可

Unique 模型中的 ROLLUP

-- unique模型示例表
drop table if exists test.user;
CREATE TABLE IF NOT EXISTS test.user
(
 `user_id` LARGEINT NOT NULL COMMENT "用戶 id",
 `username` VARCHAR(50) NOT NULL COMMENT "用戶昵稱",
 `city` VARCHAR(20) COMMENT "用戶所在城市",
 `age` SMALLINT COMMENT "用戶年齡",
 `sex` TINYINT COMMENT "用戶性別",
 `phone` LARGEINT COMMENT "用戶電話",
 `address` VARCHAR(500) COMMENT "用戶地址",
 `register_time` DATETIME COMMENT "用戶注冊時間" )
UNIQUE KEY(`user_id`, `username`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1;

--插入陳述句
insert into test.user values\
(10000,'zss','北京',18,0,12345678910,'北京朝陽區 ','2017-10-01 07:00:00'),\
(10000,'zss','北京',18,0,12345678910,'北京朝陽區 ','2017-10-01 08:00:00'),\
(10001,'lss','北京',20,0,12345678910,'北京海淀區','2017-11-15 06:10:20');


-- 在unique模型中做rollup表,rollup的key必須延用base表中所有的key,不同的是value可以隨意指定
-- 所以說,unique模型中建立rollup表沒有什么太多的意義
alter table user add rollup rollup_username_id(username,user_id,age);

Duplicate 模型中的 ROLLUP

因為 Duplicate 模型沒有聚合的語意,所以該模型中的 ROLLUP,已經失去了“上卷” 這一層含義,而僅僅是作為調整列順序,以命中前綴索引的作用,下面詳細介紹前綴索引,以及如何使用 ROLLUP 改變前綴索引,以獲得更好的查詢效率,
ROLLUP 調整前綴索引(新增一套前綴索引)
因為建表時已經指定了列順序,所以一個表只有一種前綴索引,這對于使用其他不能命中前綴索引的列作為條件進行的查詢來說,效率上可能無法滿足需求,因此,我們可以通過創建 ROLLUP 來人為的調整列順序,

-- 針對log_detail這張基表添加兩個rollup表
-- 按照type 和error_code 進行建前綴索引
alter table log_detail add rollup rollup_tec(type,error_code,timestamp,error_msg,op_id,op_time);
alter table log_detail drop rolluprollup_tec

-- 按照op_id和error_code 進行建前綴索引
alter table log_detail add rollup rollup_oec(op_id,error_code,timestamp,type,error_msg,op_time);

-- 查看基表和rollup表
desc log_detail all;

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

物化視圖

就是查詢結果預先存盤起來的特殊的表,物化視圖的出現主要是為了滿足用戶,既能對原始明細資料的任意維度分析,也能快速的對固定維度進行分析查詢

優勢

  1. 可以復用預計算的結果來提高查詢效率 ==> 空間換時間
  2. 自動實時的維護物化視圖表中的結果資料,無需額外人工成本(自動維護會有計算資源的開銷)
  3. 查詢時,會自動選擇最優物化視圖

物化視圖 VS Rollup

? 明細模型表下,rollup和物化視圖的差別:
物化視圖:都可以實作預聚合,新增一套前綴索引
rollup:對于明細模型,新增一套前綴索引
? 聚合模型下,功能一致

創建物化視圖

CREATE MATERIALIZED VIEW [MV name] as 
[query]  -- sql邏輯

--[MV name]:物化視圖的名稱
--[query]:查詢條件,基于base表創建物化視圖的邏輯
-- 物化視圖創建成功后,用戶的查詢不需要發生任何改變,也就是還是查詢的 base 表,Doris 會根據當前查詢的陳述句去自動選擇一個最優的物化視圖,從物化視圖中讀取資料并計算,
-- 用戶可以通過 EXPLAIN 命令來檢查當前查詢是否使用了物化視圖,

create table sales_records(
record_id int, 
seller_id int, 
store_id int, 
sale_date date, 
sale_amt bigint) 
duplicate key (record_id,seller_id,store_id,sale_date)
distributed by hash(record_id) buckets 2
properties("replication_num" = "1");

-- 插入資料
insert into sales_records values \
(1,1,1,'2022-02-02',100),\
(2,2,1,'2022-02-02',200),\
(3,3,2,'2022-02-02',300),\
(4,3,2,'2022-02-02',200),\
(5,2,1,'2022-02-02',100),\
(6,4,2,'2022-02-02',200),\
(7,7,3,'2022-02-02',300),\
(8,2,1,'2022-02-02',400),\
(9,9,4,'2022-02-02',100);

-- 創建一個物化視圖
select store_id, sum(sale_amt)  
from sales_records  
group by store_id; 

CREATE MATERIALIZED VIEW store_id_sale_amonut as 
select store_id, sum(sale_amt)  
from sales_records  
group by store_id;

CREATE MATERIALIZED VIEW store_amt as 
select store_id, sum(sale_amt)  as sum_amount
from sales_records  
group by store_id; 

--針對上述場景做一個物化視圖
create materialized view store_amt as  
select store_id, sum(sale_amt) as sum_amount 
from sales_records  
group by store_id; 

-- 檢查物化視圖是否構建完成(物化視圖的創建是個異步的程序)
show alter table materialized view from 庫名  order by CreateTime desc limit 1;

show alter table materialized view from test order by CreateTime desc limit 1;

-- 查看 Base 表的所有物化視圖 
desc sales_records all;

--查詢并查看是否命中剛才我們建的物化視圖
EXPLAIN SELECT store_id, sum(sale_amt) FROM sales_records GROUP BY store_id;


-- 洗掉物化視圖語法
-- 語法:
DROP MATERIALIZED VIEW 物化視圖名 on base_table_name; 

--示例:
drop materialized view store_amt on sales_records;

練習

計算廣告的 pv、uv

pv:page view,頁面瀏覽量或點擊量
uv:unique view,通過互聯網訪問、瀏覽這個網頁的自然人

-- 創建表
drop table if exists ad_view_record;
create table ad_view_record( 
dt date,  
ad_page varchar(10),  
channel varchar(10), 
refer_page varchar(10), 
user_id int 
)  
distributed by hash(dt)  
properties("replication_num" = "1");


select 
dt,ad_page,channel,
count(ad_page) as pv,  
count(distinct user_id ) as uv
from ad_view_record
group by dt,ad_page,channel


-- 插入資料
insert into ad_view_record values \
('2020-02-02','a','app','/home',1),\
('2020-02-02','a','web','/home',1),\
('2020-02-02','a','app','/addbag',2),\
('2020-02-02','b','app','/home',1),\
('2020-02-02','b','web','/home',1),\
('2020-02-02','b','app','/addbag',2),\
('2020-02-02','b','app','/home',3),\
('2020-02-02','b','web','/home',3),\
('2020-02-02','c','app','/order',1),\
('2020-02-02','c','app','/home',1),\
('2020-02-03','c','web','/home',1),\
('2020-02-03','c','app','/order',4),\
('2020-02-03','c','app','/home',5),\
('2020-02-03','c','web','/home',6),\
('2020-02-03','d','app','/addbag',2),\
('2020-02-03','d','app','/home',2),\
('2020-02-03','d','web','/home',3),\
('2020-02-03','d','app','/addbag',4),\
('2020-02-03','d','app','/home',5),\
('2020-02-03','d','web','/addbag',6),\
('2020-02-03','d','app','/home',5),\
('2020-02-03','d','web','/home',4);

-- 創建物化視圖
-- 在doris的物化視圖中,一個欄位不能用兩次,并且聚合函式后面必須跟欄位名稱
-- count(distinct) 不能使用,需要用bitmap_union來代替
create materialized view tpc_pv_uv as  
select
dt,ad_page,channel,
count(refer_page) as pv,
bitmap_union(to_bitmap(user_id)) as uv_bitmap
from ad_view_record 
group by dt,ad_page,channel;

-- 在 Doris 中,count(distinct) 聚合的結果和 bitmap_union_count 聚合的結果是完全一致的,而 bitmap_union_count 等于 bitmap_union 的結果求 count,所以如果查詢中涉及到count(distinct) 則通過創建帶 bitmap_union 聚合的物化視圖方可加快查詢,因為本身 user_id 是一個 INT 型別,所以在 Doris 中需要先將欄位通過函式 to_bitmap 轉換為 bitmap 型別然后才可以進行 bitmap_union 聚合,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553792.html

標籤:其他

上一篇:花了億點點時間,寫了一個趕海和茶藝小程式:探索多重功能,開啟精彩互動之旅!

下一篇:返回列表

標籤雲
其他(159974) Python(38185) JavaScript(25464) Java(18151) C(15233) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7217) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4578) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1926) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Doris(三) -- Rollup和物化視圖

    # Rollup ROLLUP 在多維分析中是“上卷”的意思,即將資料按某種指定的粒度進行進一步聚合。 通過建表陳述句創建出來的表稱為 Base 表(Base Table,基表) 在 Base 表之上,我們可以創建任意多個 ROLLUP 表。這些 ROLLUP 的資料是基于 Base 表產生的,并且在 ......

    uj5u.com 2023-05-30 08:18:20 more
  • 花了億點點時間,寫了一個趕海和茶藝小程式:探索多重功能,開啟精彩互

    在繁忙的生活中,我們常常渴望找到一個靈感迸發、充滿藝術與智慧的休憩之所。幸運的是,經過小編沒日沒夜的奮斗,趕海和茶藝小程式應運而生,為您帶來一系列令人驚喜的功能,讓您盡情享受多重體驗。 趕海和茶藝小程式融合了多種功能,帶給您全方位的娛樂、學習和創作體驗。無論是積累功德、獲取每日推送的精彩內容,還是發 ......

    uj5u.com 2023-05-30 08:18:00 more
  • GaussDB(DWS)遷移實踐丨row_number輸出結果不一致

    摘要:遷移前后結果集row_number欄位值前后不一致,前在DWS上運行不一致。 本文分享自華為云社區《GaussDB(DWS)遷移 - oracle兼容 --row_number輸出結果不一致》,作者:譡里個檔 。 【問題表現】 遷移前后結果集row_number欄位值前后不一致,前在DWS上運 ......

    uj5u.com 2023-05-30 08:17:39 more
  • 玩轉MySQL資料庫之SQL優化之慢查詢

    本系列為:MySQL資料庫詳解,為千鋒資深教學老師獨家創作,致力于為大家講解清晰MySQL資料庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關注】持續追更~文末有本文重點總結,技術類問題,也歡迎大家和我們溝通交流! ......

    uj5u.com 2023-05-30 08:17:34 more
  • 上萬條全球各國紙幣大全含圖ACCESS資料庫

    《上萬條全球各國紙幣大全含圖ACCESS資料庫》是今天采集自錢幣大全網站的紙幣資料,大類包含:中國大陸、中國臺灣、中國香港、中國澳門、亞洲紙鈔、歐洲紙鈔、美洲紙鈔、非洲紙鈔 、大洋洲、其他紙鈔等,而且紙幣資訊包含:國家名稱、英文名稱、目錄編號、紙鈔面額、紙鈔年版、紙鈔規格、所屬類別、詳細資訊等。 收 ......

    uj5u.com 2023-05-30 08:11:56 more
  • GaussDB(DWS)遷移實踐丨row_number輸出結果不一致

    摘要:遷移前后結果集row_number欄位值前后不一致,前在DWS上運行不一致。 本文分享自華為云社區《GaussDB(DWS)遷移 - oracle兼容 --row_number輸出結果不一致》,作者:譡里個檔 。 【問題表現】 遷移前后結果集row_number欄位值前后不一致,前在DWS上運 ......

    uj5u.com 2023-05-30 08:00:44 more
  • 花了億點點時間,寫了一個趕海和茶藝小程式:探索多重功能,開啟精彩互

    在繁忙的生活中,我們常常渴望找到一個靈感迸發、充滿藝術與智慧的休憩之所。幸運的是,經過小編沒日沒夜的奮斗,趕海和茶藝小程式應運而生,為您帶來一系列令人驚喜的功能,讓您盡情享受多重體驗。 趕海和茶藝小程式融合了多種功能,帶給您全方位的娛樂、學習和創作體驗。無論是積累功德、獲取每日推送的精彩內容,還是發 ......

    uj5u.com 2023-05-30 08:00:06 more
  • 玩轉MySQL資料庫之SQL優化之慢查詢

    本系列為:MySQL資料庫詳解,為千鋒資深教學老師獨家創作,致力于為大家講解清晰MySQL資料庫相關知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關注】持續追更~文末有本文重點總結,技術類問題,也歡迎大家和我們溝通交流! ......

    uj5u.com 2023-05-30 07:59:52 more
  • Doris(三) -- Rollup和物化視圖

    # Rollup ROLLUP 在多維分析中是“上卷”的意思,即將資料按某種指定的粒度進行進一步聚合。 通過建表陳述句創建出來的表稱為 Base 表(Base Table,基表) 在 Base 表之上,我們可以創建任意多個 ROLLUP 表。這些 ROLLUP 的資料是基于 Base 表產生的,并且在 ......

    uj5u.com 2023-05-30 07:59:40 more
  • 上萬條全球各國紙幣大全含圖ACCESS資料庫

    《上萬條全球各國紙幣大全含圖ACCESS資料庫》是今天采集自錢幣大全網站的紙幣資料,大類包含:中國大陸、中國臺灣、中國香港、中國澳門、亞洲紙鈔、歐洲紙鈔、美洲紙鈔、非洲紙鈔 、大洋洲、其他紙鈔等,而且紙幣資訊包含:國家名稱、英文名稱、目錄編號、紙鈔面額、紙鈔年版、紙鈔規格、所屬類別、詳細資訊等。 收 ......

    uj5u.com 2023-05-30 07:59:32 more