ClickHouse 物化視圖 AggregatingMergeTree 使用示例


創建普通數據表

create table agg_source(
	id UInt8,
	name String,
	city String,
	money UInt32
)engine=MergeTree()
partition by city
order by id;

插入數據

insert into agg_source values
(1, 'aa', 'SD', 200), 
(2, 'bb', 'SD', 200), 
(3, 'cc', 'SH', 200), 
(4, 'dd', 'BJ', 200), 
(5, 'ee', 'SZ', 200), 
(6, 'ff', 'BJ', 100);
(7, 'gg', 'HZ', 100);
(8, 'ww', 'WH', 100);

執行查詢

select 
	city,
	uniq(name) num,
	sum(money) money
from agg_source
group by city;

創建該表的物化視圖,用來聚合每個城市的 money 和 人數

create materialized view agg_view
engine = AggregatingMergeTree()
partition by city
order by city
populate
as 
select 
	city, 
	uniqState(name) name, 
	sumState(money) money
from agg_source
group by city;

執行查詢

select 
	city,
	uniqMerge(name),
	sumMerge(money)
from agg_view
group by city;

populate 表示實時同步源表數據的變化,會影響性能。如果不加,則會在合並分區或者手動執行 optimeize table 的時候更新視圖中的數據。

總結

物化視圖可以理解為預計算,聚合函數的值提前在物化視圖中已經計算好了,查詢的時候就直接拿值就好了,提高了查詢的速度,當然物化視圖也占用本地磁盤空間,相當於空間換時間,並且源表數據變化物化視圖也會跟着修改,所以要盡可能減少修改操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM