DATA_ENGINEERETTE Telegram 393
CollapsingMergeTree

Прохожу бесплатный курс по кх "Managed Service for ClickHouse". Дошла до модуля 2 про виды движков, и меня настигло озарение ☁️

Вот есть движок CollapsingMergeTree - он сворачивает пары строк, у которых в ключе сортировки одинаковые значения, но при этом поле sign у одной из них равно 1, а у другой -1. Без паники! 🤚 Сейчас поясню на примере

CREATE TABLE user_activity (
UserID UInt64, --есть пользак
PageViews UInt8, --он посетил столько страниц
Sign Int8 --системное поле
)
ENGINE = CollapsingMergeTree(Sign)
ORDER BY UserID; --будем сворачивать по этому полю


Наш пользак 999 захотел что-то купить:

INSERT INTO user_activity VALUES (999, 10, 1); --сначала просмотрел 10 страниц
INSERT INTO user_activity VALUES (999, 10, -1), --а теперь 10 страниц уже неактуальны (видите -1?)
(999, 11, 1); --потому что он просмотрел 11 страниц


Т.е. тут явно видно, что update = delete + insert, где sign - это флажок удаления

Но есть нюанс - теперь в нашей таблице 3 строки, а нужна 1. Почему 3, ведь CollapsingMergeTree как раз и должен сам все объединить?

Потому что кх свои слияния производит не сразу, а когда-то потом. Но есть несколько способов получить то, что нужно:

1. FINAL - как будто слияние уже произошло

SELECT * FROM user_activity FINAL;


2. OPTIMIZE - заставляем сделать слияние прямо сейчас. Но у вас может не быть прав на это в продовой базе

OPTIMIZE TABLE user_activity;
SELECT * FROM user_activity; --FINAL уже не нужен


3. Посчитать самим

SELECT UserID, sum(PageViews * Sign)
FROM user_activity
group by UserID;


А ведь действительно 10*1 + 10*(-1) + 11*1 дает то, что нужно…
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥53🌚2👀21



tgoop.com/data_engineerette/393
Create:
Last Update:

CollapsingMergeTree

Прохожу бесплатный курс по кх "Managed Service for ClickHouse". Дошла до модуля 2 про виды движков, и меня настигло озарение ☁️

Вот есть движок CollapsingMergeTree - он сворачивает пары строк, у которых в ключе сортировки одинаковые значения, но при этом поле sign у одной из них равно 1, а у другой -1. Без паники! 🤚 Сейчас поясню на примере

CREATE TABLE user_activity (
UserID UInt64, --есть пользак
PageViews UInt8, --он посетил столько страниц
Sign Int8 --системное поле
)
ENGINE = CollapsingMergeTree(Sign)
ORDER BY UserID; --будем сворачивать по этому полю


Наш пользак 999 захотел что-то купить:

INSERT INTO user_activity VALUES (999, 10, 1); --сначала просмотрел 10 страниц
INSERT INTO user_activity VALUES (999, 10, -1), --а теперь 10 страниц уже неактуальны (видите -1?)
(999, 11, 1); --потому что он просмотрел 11 страниц


Т.е. тут явно видно, что update = delete + insert, где sign - это флажок удаления

Но есть нюанс - теперь в нашей таблице 3 строки, а нужна 1. Почему 3, ведь CollapsingMergeTree как раз и должен сам все объединить?

Потому что кх свои слияния производит не сразу, а когда-то потом. Но есть несколько способов получить то, что нужно:

1. FINAL - как будто слияние уже произошло

SELECT * FROM user_activity FINAL;


2. OPTIMIZE - заставляем сделать слияние прямо сейчас. Но у вас может не быть прав на это в продовой базе

OPTIMIZE TABLE user_activity;
SELECT * FROM user_activity; --FINAL уже не нужен


3. Посчитать самим

SELECT UserID, sum(PageViews * Sign)
FROM user_activity
group by UserID;


А ведь действительно 10*1 + 10*(-1) + 11*1 дает то, что нужно…

BY дата инженеретта


Share with your friend now:
tgoop.com/data_engineerette/393

View MORE
Open in Telegram


Telegram News

Date: |

To delete a channel with over 1,000 subscribers, you need to contact user support Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. More>> To edit your name or bio, click the Menu icon and select “Manage Channel.” When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name.
from us


Telegram дата инженеретта
FROM American