无缝更改ClickHouse物化视图SELECT逻辑的方法
Posted 刘元涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无缝更改ClickHouse物化视图SELECT逻辑的方法相关的知识,希望对你有一定的参考价值。
在我司的ClickHouse DWS层有一张ReplicatedAggregatingMergeTree引擎的物化视图,为近线推荐业务提供关键用户行为的计数值。该物化视图的底表(即所谓“inner”表)有两张,分别从不同的事实表聚合数据,如下图所示。 Q:算法同学希望在物化视图中增加一些用户行为,如何在保证不影响线上业务(不删表)的前提下把这些行为加进去? A:以mv_recommend_access_stat为例。
- 使用
DETACH TABLE
语句将底表解挂,即暂时屏蔽掉它的元数据
DETACH TABLE rtdw_dws.mv_recommend_access_stat ON CLUSTER sht_ck_cluster_pro;
- 定位到它的元数据文件所在的路径,可以从系统表查询。
SELECT metadata_path FROM system.tables WHERE name = 'mv_recommend_access_stat';
┌─metadata_path─────────────────────────────────────────────────────────┐
│ /data1/clickhouse/data/metadata/rtdw_dws/mv_recommend_access_stat.sql │
└───────────────────────────────────────────────────────────────────────┘
- 打开上述SQL文件,修改SELECT语句如下。
ATTACH MATERIALIZED VIEW mv_recommend_access_stat TO rtdw_dws.mv_recommend_events_stat
(
`ts_date` Date,
`groupon_id` Int64,
`merchandise_id` Int64,
`event_type` String,
`event_count` AggregateFunction(count, UInt64)
) AS SELECT
ts_date,
groupon_id,
merchandise_id,
event_type,
countState(toUInt64(1)) AS event_count
FROM rtdw_dwd.analytics_access_log
WHERE event_type IN ('openDetail', 'addCart', 'buyNow', 'share', 'openAllEvaluations')
GROUP BY ts_date, groupon_id, merchandise_id, event_type
然后将修改过的文件通过scp等方式分发到集群中所有节点(重要!) 4. 使用ATTACH TABLE
语句将底表重新挂载回去
ATTACH TABLE rtdw_dws.mv_recommend_access_stat ON CLUSTER sht_ck_cluster_pro;
观察物化视图,出现了新加入的事件计数,大功告成。
以上是关于无缝更改ClickHouse物化视图SELECT逻辑的方法的主要内容,如果未能解决你的问题,请参考以下文章
大数据clickhouse clickhouse 物化视图使用详解