Практика 'Типы данных' - ClickHouse
This commit is contained in:
+1
-1
@@ -34,7 +34,7 @@ ON CLUSTER clickhouse_cluster
|
|||||||
)
|
)
|
||||||
ENGINE = SummingMergeTree
|
ENGINE = SummingMergeTree
|
||||||
PARTITION BY toYYYYMM(date)
|
PARTITION BY toYYYYMM(date)
|
||||||
ORDER BY (region, date)
|
ORDER BY (region, date);
|
||||||
|
|
||||||
INSERT INTO mnoskov.region_sales (region, date, sales)
|
INSERT INTO mnoskov.region_sales (region, date, sales)
|
||||||
VALUES
|
VALUES
|
||||||
+5
-5
@@ -38,7 +38,7 @@ ENGINE = ReplicatedMergeTree(
|
|||||||
)
|
)
|
||||||
ORDER BY (ts, user_id);
|
ORDER BY (ts, user_id);
|
||||||
|
|
||||||
CREATE VIEW top_active_users AS
|
CREATE VIEW mnoskov.top_active_users AS
|
||||||
SELECT
|
SELECT
|
||||||
user_id,
|
user_id,
|
||||||
count(*) AS cnt_user
|
count(*) AS cnt_user
|
||||||
@@ -56,7 +56,7 @@ LIMIT 100;
|
|||||||
|
|
||||||
-- тут вообще жопа какая-то. Если смотреть на пример создания MV, то выдает ошибку мол engine указывать нельзя. Полез в документацию, там сказано что после указания имени mv нужно добавлять TO ... но все равно выдется ошибка.
|
-- тут вообще жопа какая-то. Если смотреть на пример создания MV, то выдает ошибку мол engine указывать нельзя. Полез в документацию, там сказано что после указания имени mv нужно добавлять TO ... но все равно выдется ошибка.
|
||||||
-- этот способ я в хабре нашел
|
-- этот способ я в хабре нашел
|
||||||
CREATE TABLE raw_events
|
CREATE TABLE mnoskov.raw_events
|
||||||
(
|
(
|
||||||
event_time DateTime,
|
event_time DateTime,
|
||||||
user_id UInt32,
|
user_id UInt32,
|
||||||
@@ -65,7 +65,7 @@ CREATE TABLE raw_events
|
|||||||
ENGINE = MergeTree
|
ENGINE = MergeTree
|
||||||
ORDER BY (event_time, user_id);
|
ORDER BY (event_time, user_id);
|
||||||
|
|
||||||
CREATE TABLE agr_clicks_per_day
|
CREATE TABLE mnoskov.agr_clicks_per_day
|
||||||
ON CLUSTER clickhouse_cluster
|
ON CLUSTER clickhouse_cluster
|
||||||
(
|
(
|
||||||
event_date Date,
|
event_date Date,
|
||||||
@@ -74,7 +74,7 @@ ON CLUSTER clickhouse_cluster
|
|||||||
ENGINE = MergeTree
|
ENGINE = MergeTree
|
||||||
ORDER BY event_date;
|
ORDER BY event_date;
|
||||||
|
|
||||||
CREATE MATERIALIZED VIEW mv_clicks_per_day TO agr_clicks_per_day AS
|
CREATE MATERIALIZED VIEW mnoskov.mv_clicks_per_day TO mnosokv.agr_clicks_per_day AS
|
||||||
SELECT
|
SELECT
|
||||||
toDate(event_time) AS event_date,
|
toDate(event_time) AS event_date,
|
||||||
count(*) AS count
|
count(*) AS count
|
||||||
@@ -83,5 +83,5 @@ FROM
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
event_date;
|
event_date;
|
||||||
|
|
||||||
SELECT * FROM agr_clicks_per_day;
|
SELECT * FROM mnoskov.agr_clicks_per_day;
|
||||||
-- ничего у меня получилось, и с SummingMergeTree ни с MergeTree. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает.
|
-- ничего у меня получилось, и с SummingMergeTree ни с MergeTree. Как очень непонятно материализованные таблицы работают. Если делать как в теории в инфре, то тоже ничего не работает.
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
-- Задание 1
|
||||||
|
|
||||||
|
CREATE TABLE mnoskov.raw_data1
|
||||||
|
ON CLUSTER clickhouse_cluster (
|
||||||
|
user_id String,
|
||||||
|
balance String,
|
||||||
|
created_at String
|
||||||
|
)
|
||||||
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/mnoskov/raw_data1',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY tuple();
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
toDecimal64OrNull(balance,2) AS balance,
|
||||||
|
toDateTime64OrNull(created_at, 3) AS created_at
|
||||||
|
FROM
|
||||||
|
mnoskov.raw_data1
|
||||||
|
WHERE
|
||||||
|
balance IS NOT NULL AND created_at IS NOT NULL;
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 2
|
||||||
|
|
||||||
|
CREATE TABLE events
|
||||||
|
ON CLUSTER clickhouse_cluster (
|
||||||
|
event_id String,
|
||||||
|
event_date String, -- форматы: "2023-01-01", "01.02.2023", "invalid"
|
||||||
|
event_time String -- форматы: "12:30:45", "25:99:99"
|
||||||
|
)
|
||||||
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/mnoskov/events',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY
|
||||||
|
event_id;
|
||||||
|
|
||||||
|
SELECT * FROM mnoskov.events;
|
||||||
|
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
event_id,
|
||||||
|
toDate(parseDateTimeBestEffortOrNull(event_date)) AS event_dates,
|
||||||
|
CASE
|
||||||
|
WHEN toDayOfMonth(parseDateTimeBestEffortOrNull(event_time)) = 1 THEN toHour(parseDateTimeBestEffortOrNull(event_time))
|
||||||
|
ELSE (toDayOfMonth(parseDateTimeBestEffortOrNull(event_time)) - 1) * 24 + toHour(parseDateTimeBestEffortOrNull(event_time))
|
||||||
|
END AS event_times,
|
||||||
|
toDateTime(parseDateTimeBestEffortOrNull(event_date)) + toIntervalHour(event_times) AS event_datetime
|
||||||
|
FROM
|
||||||
|
mnoskov.events
|
||||||
|
ORDER BY
|
||||||
|
event_dates;
|
||||||
|
-- Все преобразования с to... и parse... нашел тут https://clickhouse.com/docs/ru/sql-reference/functions/type-conversion-functions#toIntervalMonth.
|
||||||
|
-- explain analyze не работает, потэому не могу посмотреть насколько это эффективно, НО главное сам запрос работает.
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 3
|
||||||
|
|
||||||
|
CREATE TABLE mnoskov.user_activity
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
user_id UInt32,
|
||||||
|
actions String -- JSON: ["login", "purchase", "logout"]
|
||||||
|
)
|
||||||
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/mnoskov/user_activity',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY
|
||||||
|
user_id;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
count(*)
|
||||||
|
FROM
|
||||||
|
mnoskov.user_activity
|
||||||
|
WHERE
|
||||||
|
has(JSONExtract(actions, 'Array(String)'), 'purchase')
|
||||||
|
GROUP BY
|
||||||
|
user_id
|
||||||
|
ORDER BY
|
||||||
|
user_id;
|
||||||
|
|
||||||
|
|
||||||
|
-- Задание 4
|
||||||
|
|
||||||
|
CREATE TABLE mnoskov.sensor_data
|
||||||
|
ON CLUSTER clickhouse_cluster
|
||||||
|
(
|
||||||
|
sensor_id UInt32,
|
||||||
|
value Float64,
|
||||||
|
status Enum('ok' = 1, 'error' = 2)
|
||||||
|
)
|
||||||
|
ENGINE = ReplicatedMergeTree(
|
||||||
|
'/clickhouse/tables/{shard}/mnoskov/sensor_data',
|
||||||
|
'{replica}'
|
||||||
|
)
|
||||||
|
ORDER BY sensor_id;
|
||||||
|
|
||||||
|
--1-2.
|
||||||
|
SELECT
|
||||||
|
toString(status) AS str_status,
|
||||||
|
avg(value) AS avg_value
|
||||||
|
FROM
|
||||||
|
mnoskov.sensor_data
|
||||||
|
GROUP BY
|
||||||
|
str_status;
|
||||||
|
--3
|
||||||
|
-- не понял задание. все строки в value можно преобразовать в Decimal(10,2), потому что value - Float64, а он все null переделывает в 0.
|
||||||
Reference in New Issue
Block a user