问题描述
我这样创建了材料视图:
创建目标表:
CREATE TABLE user_deatils_daily (
day date,hour UInt8,appid UInt32,isp String,city String,country String,session_count UInt64,avg_score AggregateFunction(avg,Float32),min_revenue AggregateFunction(min,max_load_time AggregateFunction(max,Int32)
)
ENGINE = SummingMergeTree()
PARTITION BY toRelativeWeekNum(day)
ORDER BY (day,hour)
创建视频:
CREATE MATERIALIZED VIEW user_deatils_daily_mv
TO user_deatils_daily as
select toDate(session_ts) as day,toHour(toDateTime(session_ts)) as hour,appid,isp,city,country,count(session_uuid) as session_count,avgState() as avg_score,minState(revenue) as min_revenue,maxState(perf_page_load_time) as max_load_time
from user_deatils where toDate(session_ts)>='2020-08-26' group by session_ts,country
目标表中的数据开始填充数据。 一段时间后,目标表被新数据填充,并且不保存旧数据。 为什么呢?
解决方法
SummingMergeTree()分区依据toRelativeWeekNum(day)ORDER BY(日期,小时)
均值计算总和groupby toRelativeWeekNum(day),day,hour)
user_deatils_daily
对user_deatils_daily_mv
一无所知。它们没有关系。
user_deatils_daily_mv
只是插入user_deatils_daily
SummingMergeTree对group by session_ts,appid,isp,city,country
一无所知
我希望看到ORDER BY (ts,country);
我会做的:
CREATE TABLE user_details_daily
( ts DateTime,appid UInt32,isp String,city String,country String,session_count SimpleAggregateFunction(sum,UInt64),avg_score AggregateFunction(avg,Float32),min_revenue SimpleAggregateFunction(min,max_load_time SimpleAggregateFunction(max,Int32) )
ENGINE = AggregatingMergeTree()
PARTITION BY toStartOfWeek(ts)
ORDER BY (ts,country);
CREATE MATERIALIZED VIEW user_deatils_daily_mv TO user_details_daily
as select
toStartOfHour(toDateTime(session_ts)) ts,country,count(session_uuid) as session_count,avgState() as avg_score,min(revenue) as min_revenue,max(perf_page_load_time) as max_load_time
from user_details
where toDate(session_ts)>='2020-08-26' group by ts,country;