Практика 'Materialized View (MV)' - Clickhouse

This commit is contained in:
mnoskov
2026-05-21 16:44:30 +03:00
parent 7e41fd5685
commit b613634f73
@@ -0,0 +1,157 @@
-- Задание 1
--DROP TABLE mnoskov.raw_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.raw_events
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/raw_events',
'{replica}'
)
ORDER BY ts;
--DROP TABLE mnoskov.clean_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.clean_events
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/clean_events',
'{replica}'
)
ORDER BY ts;
CREATE MATERIALIZED VIEW mnoskov.mv_clean
ON CLUSTER clickhouse_cluster
TO mnoskov.clean_events
AS
SELECT
user_id,
ts,
nullif(event_type, '') AS event_type -- это я сделать чтобы выводилось NULL а не '' - пустая строка.
FROM mnoskov.raw_events
WHERE user_id != 0 AND event_type IS NOT NULL
ORDER BY ts;
-- Тесты:
SELECT * FROM raw_events;
SELECT * FROM mnoskov.mv_clean;
TRUNCATE TABLE mnoskov.raw_events ON CLUSTER clickhouse_cluster sync;
INSERT INTO mnoskov.raw_events
(user_id, ts, event_type)
VALUES
(0, '2024-07-17 10:00:00', 'click'),
(1, '2024-07-17 10:01:00', 'view'),
(2, '2024-07-17 10:02:00', NULL);
-- Задание 2
--raw_events
--DROP TABLE mnoskov.raw_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.raw_events
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/raw_events',
'{replica}'
)
ORDER BY ts;
--click_events
--DROP TABLE mnoskov.click_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.click_events
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/click_events',
'{replica}'
)
ORDER BY ts;
--login_events
--DROP TABLE mnoskov.login_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.login_events1
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/login_events1',
'{replica}'
)
ORDER BY ts;
--purchase_events
--DROP TABLE mnoskov.purchase_events ON CLUSTER clickhouse_cluster sync;
CREATE TABLE mnoskov.purchase_events1
ON CLUSTER clickhouse_cluster
(
user_id UInt64,
ts DateTime,
event_type String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/mnoskov/purchase_events1',
'{replica}'
)
ORDER BY ts;
--mv_click
--DROP VIEW mnoskov.mv_click ON CLUSTER clickhouse_cluster sync;
CREATE MATERIALIZED VIEW mnoskov.mv_click
ON CLUSTER clickhouse_cluster
TO mnoskov.click_events
AS
SELECT * FROM mnoskov.raw_events WHERE event_type = 'click'
ORDER BY ts;
--mv_login
--DROP VIEW mnoskov.mv_login ON CLUSTER clickhouse_cluster sync;
CREATE MATERIALIZED VIEW mnoskov.mv_login
ON CLUSTER clickhouse_cluster
TO mnoskov.login_events1
AS
SELECT * FROM mnoskov.raw_events WHERE event_type = 'login'
ORDER BY ts;
--mv_purchase
--DROP VIEW mnoskov.mv_purchase ON CLUSTER clickhouse_cluster sync;
CREATE MATERIALIZED VIEW mnoskov.mv_purchase
ON CLUSTER clickhouse_cluster
TO mnoskov.purchase_events1
AS
SELECT * FROM mnoskov.raw_events WHERE event_type = 'purchase'
ORDER BY ts;
-- Тесты:
SELECT * FROM mnoskov.click_events;
SELECT * FROM mnoskov.login_events1;
SELECT * FROM mnoskov.purchase_events1;
TRUNCATE TABLE mnoskov.raw_events ON CLUSTER clickhouse_cluster sync;
INSERT INTO mnoskov.raw_events
(user_id, ts, event_type)
VALUES
(1, '2024-07-17 10:00:00', 'click'),
(2, '2024-07-17 10:01:00', 'login'),
(3, '2024-07-17 10:02:00', 'purchase');