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

Posted 刘元涛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无缝更改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等方式分发到集群中所有节点(重要!) 4. 使用ATTACH TABLE语句将底表重新挂载回去

ATTACH TABLE rtdw_dws.mv_recommend_access_stat ON CLUSTER sht_ck_cluster_pro;

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

以上是关于无缝更改ClickHouse物化视图SELECT逻辑的方法的主要内容,如果未能解决你的问题,请参考以下文章

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

大数据clickhouse clickhouse 物化视图使用详解

clickhouse-物化视图

clickhouse:在启动时创建物化视图(docker)

为啥我们不能在 clickhouse 的另一个视图之上制作物化视图?

Clickhouse外部储存表引擎(HDFSMySQLKafka)