無縫更改ClickHouse物化視圖SELECT邏輯的方法

累成狗的一天,繼續超短文模式。

在我司的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;

觀察物化視圖,出現了新加入的事件計數,大功告成。民那晚安晚安。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章