ClickHouse

无缝更改ClickHouse物化视图SELECT逻辑的方法

2021-07-29  本文已影响0人  LittleMagic

累成狗的一天,继续超短文模式。

在我司的ClickHouse DWS层有一张ReplicatedAggregatingMergeTree引擎的物化视图,为近线推荐业务提供关键用户行为的计数值。该物化视图的底表(即所谓“inner”表)有两张,分别从不同的事实表聚合数据,如下图所示。

Q:算法同学希望在物化视图中增加一些用户行为,如何在保证不影响线上业务(不删表)的前提下把这些行为加进去?

A:以mv_recommend_access_stat为例。

  1. 使用DETACH TABLE语句将底表解挂,即暂时屏蔽掉它的元数据。
DETACH TABLE rtdw_dws.mv_recommend_access_stat ON CLUSTER sht_ck_cluster_pro;
  1. 定位到它的元数据文件所在的路径,可以从系统表查询。
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 │
└───────────────────────────────────────────────────────────────────────┘
  1. 打开上述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等方式分发到集群中所有节点(重要!)

  1. 使用ATTACH TABLE语句将底表重新挂载回去。
ATTACH TABLE rtdw_dws.mv_recommend_access_stat ON CLUSTER sht_ck_cluster_pro;

观察物化视图,出现了新加入的事件计数,大功告成。民那晚安晚安。

上一篇下一篇

猜你喜欢

热点阅读