Практика 'Materialized View (MV)' - Clickhouse
This commit is contained in:
+157
@@ -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');
|
||||||
Reference in New Issue
Block a user