Готовый список задач для DE и не только
Зашла тут посмотреть, что на хх происходит. Я не поняла исходя из чего, но под местом работы вам предлагаются готовые задачи. Скорее всего, они подбираются по выбранной специализации, у меня там стоит аналитика и разработка. Кто-то уже видел такое, когда оно появилось?
Задачи через плюсик сразу вставляются в описание в виде отдельных пунктов. Я не поленилась, прокликала все, и у меня получилось 33 штуки. Пошлите играть в бинго)
Зашла тут посмотреть, что на хх происходит. Я не поняла исходя из чего, но под местом работы вам предлагаются готовые задачи. Скорее всего, они подбираются по выбранной специализации, у меня там стоит аналитика и разработка. Кто-то уже видел такое, когда оно появилось?
Задачи через плюсик сразу вставляются в описание в виде отдельных пунктов. Я не поленилась, прокликала все, и у меня получилось 33 штуки. Пошлите играть в бинго)
❤8 8🔥5
Активность коллег в мессенджере в выходные
Я несколько раз заглядывала в чаты в нерабочее время и видела, что многие коллеги онлайн. А вот сейчас таки решила подвести стату)
Взяла выборку в 55 коллег из моего ближайшего окружения и получила, что только 16% соблюдают work-life balance и не заходят по выходным😐
Или они просто смотрят киношку на корп ноуте с открытой прогой...
Я несколько раз заглядывала в чаты в нерабочее время и видела, что многие коллеги онлайн. А вот сейчас таки решила подвести стату)
Взяла выборку в 55 коллег из моего ближайшего окружения и получила, что только 16% соблюдают work-life balance и не заходят по выходным
Или они просто смотрят киношку на корп ноуте с открытой прогой...
Please open Telegram to view this post
VIEW IN TELEGRAM
🤷9🌚3👍2
CollapsingMergeTree
Прохожу бесплатный курс по кх "Managed Service for ClickHouse". Дошла до модуля 2 про виды движков, и меня настигло озарение☁️
Вот есть движок CollapsingMergeTree - он сворачивает пары строк, у которых в ключе сортировки одинаковые значения, но при этом поле sign у одной из них равно 1, а у другой -1. Без паники!🤚 Сейчас поясню на примере
Наш пользак 999 захотел что-то купить:
Т.е. тут явно видно, что update = delete + insert, где sign - это флажок удаления
Но есть нюанс - теперь в нашей таблице 3 строки, а нужна 1. Почему 3, ведь CollapsingMergeTree как раз и должен сам все объединить?
Потому что кх свои слияния производит не сразу, а когда-то потом. Но есть несколько способов получить то, что нужно:
1. FINAL - как будто слияние уже произошло
2. OPTIMIZE - заставляем сделать слияние прямо сейчас. Но у вас может не быть прав на это в продовой базе
3. Посчитать самим
А ведь действительно 10*1 + 10*(-1) + 11*1 дает то, что нужно…
Прохожу бесплатный курс по кх "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🔥5 3🌚2👀2❤1
YARN API
Иногда могут случаться разные вещи: у вас завис юпитер/вы сделали что-то не то, и вас заблочили/просто хочется программно килять приложухи. Мне пригодилось, когда я задудосила сервер, пытаясь в пт вечером разом создать тысячу папочек в hdfs😁 У меня перестал открываться юпитер с 504 ошибкой
При этом у меня осталось работать тяжеловесное приложений с кучей ресурсов, и оно само по себе не убьется...
Нам понадобится всего два шага:
1️⃣ Находим id приложения
2️⃣ Становимся киллерами
Можно сделать из Postman:
PUT-запрос
Content-Type: application/json
Body raw -> JSON {"state": "KILLED"}
Или в терминале:
Проблему с 504 ошибкой я нашла в истории чата - пришлось в выходные отдохнуть, а в пн утром меня разблочили🙂
Иногда могут случаться разные вещи: у вас завис юпитер/вы сделали что-то не то, и вас заблочили/просто хочется программно килять приложухи. Мне пригодилось, когда я задудосила сервер, пытаясь в пт вечером разом создать тысячу папочек в hdfs
При этом у меня осталось работать тяжеловесное приложений с кучей ресурсов, и оно само по себе не убьется...
Нам понадобится всего два шага:
https://yarn.com/ws/v1/cluster/apps?states=RUNNING,ACCEPTED&user=myuser&queue=myqueue
Можно сделать из Postman:
PUT-запрос
Content-Type: application/json
Body raw -> JSON {"state": "KILLED"}
https://yarn.com/ws/v1/cluster/apps/application_1750947191600_26250/state?user.name=myuser
Или в терминале:
curl -X PUT "https://yarn.com/ws/v1/cluster/apps/application_1750404105050_1823/state?user.name=myuser" \
-H "Content-Type: application/json" \
-d '{"state": "KILLED"}'
Проблему с 504 ошибкой я нашла в истории чата - пришлось в выходные отдохнуть, а в пн утром меня разблочили
Please open Telegram to view this post
VIEW IN TELEGRAM
Новое событие
Ходила в прошлом году на E-CODE, было просто бомбезно🔥 🔥 Еда, активности, крутые стримы с лекциями, мерч, туса - и все бесплатно!
Пока все выкладывают сторис, рилс и шортсы, я сокращаю еще больше и делаю сторис из сторис))
Ходила в прошлом году на E-CODE, было просто бомбезно
Пока все выкладывают сторис, рилс и шортсы, я сокращаю еще больше и делаю сторис из сторис))
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥9
2. Постановка задач, делегирование, фидбек
Продолжаю рассказывать про курс команды
Первый модуль - тут
Описание программы - тут
Что было?
🤩 алгоритм постановки задач
🤩 точки контроля
🤩 уровни делегирования
🤩 виды руководства
🤩 стили общения
🤩 уровни зрелости
🤩 модели фидбэков (SBI, IBOFF, SLC)
🤩 фидфорвард
🤩 и еще много всего полезного
Лектор просто топ, очень харизматичный!🔥 Нашла страничку про него. А ниже крутые цитаты с лекций:
Мысли, которые мне показались наиболее интересными:
Таск-трекеры нужны для единого понимания. Лучше, чтобы сотрудники сами заводили задачи со своим пониманием
❌ Как ты понял задачу? Расскажи, как ты понял? Ты понял?
✅ Я бы хотел проверить себя, насколько мне получилось объяснить
Контроль - это сервис, чтобы сотрудники справились классно. Получать удовольствие от того, что ты организовал сделать что-то других
Поддерживать сильные стороны важнее, чем корректировать. Цель фидбека - помочь развить навык или укрепить уверенность. Постоянно должен быть мотивирующий фон работы. Можно своими вопросами выводить человека на самофидбек. При этом с разными людьми нужно быть разным. Важно, чтобы рядом был человек, который видит в тебе того, кто может справиться
Продолжаю рассказывать про курс команды
Первый модуль - тут
Описание программы - тут
Что было?
Лектор просто топ, очень харизматичный!
Парадокс менеджмента: люди, которым мы платим зп, должны радоваться каждой задаче
Как менеджер вы должны руководить картинками в голове у сотрудника
Абсолютная безоценочность - это уже поближе к Будде
Грамотный руководитель говорит языком наблюдений и цифр, а не языком ярлыков и обобщений
Шоколад должен быть шоколадным для всех
Не надо замахиваться, что руководитель знает, как мир устроен. Да, конечно, это так, но не признавайтесь людям. Планетой нужно управлять незаметно для санитаров, чтобы не вызывать подозрений
Мысли, которые мне показались наиболее интересными:
Таск-трекеры нужны для единого понимания. Лучше, чтобы сотрудники сами заводили задачи со своим пониманием
Контроль - это сервис, чтобы сотрудники справились классно. Получать удовольствие от того, что ты организовал сделать что-то других
Поддерживать сильные стороны важнее, чем корректировать. Цель фидбека - помочь развить навык или укрепить уверенность. Постоянно должен быть мотивирующий фон работы. Можно своими вопросами выводить человека на самофидбек. При этом с разными людьми нужно быть разным. Важно, чтобы рядом был человек, который видит в тебе того, кто может справиться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3 3
Моя коллекция наклеек
Пока добавляла новую порцию наклеек, решила еще раз посмотреть на собранную коллекцию
И вот оно мне нужно вообще?
Пока добавляла новую порцию наклеек, решила еще раз посмотреть на собранную коллекцию
И вот оно мне нужно вообще?
👍18😁7❤5
Сейчас конфа про выгорание!
Увидела фотку в сторис одногруппницы - оказывается, сегодня в Питере проходит конфа про выгорание
Программа тут
Трансляция здесь
Увидела фотку в сторис одногруппницы - оказывается, сегодня в Питере проходит конфа про выгорание
Программа тут
Трансляция здесь
dayoff.selectel.ru
Selectel Day Off 2025
IT-фестиваль против выгорания
Вы наверняка слышали про такую команду в гите, но никогда не использовали. Она символизирует то, как вы с дерева аккуратненько срываете вишенки одну за одной
В чем суть и зачем она нужна?
Допустим, есть ветка dev. У вас появилась новая задача. Вы создаете feature/DE-111 и пушите свои изменения
Потом вы хотите потестить определенную функциональность на деве, но в фича-ветке уже намешано много всего. А вам нужны всего лишь 1-2 коммита
Что делать?
Сначала из своей ветки достаем хэши коммитов. Потом идем в нужную ветку и вставляем их туда
git checkout feature/DE-111
git log --oneline -10 # последние 10 коммитов
git checkout dev
git cherry-pick commit1-hash commit2-hash
git push
Теперь в деве такая история коммитов:
Но если теперь вы сделаете merge ветки, то каждый коммит задублируется:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17 7🤷4👍2🔥1
Проблема мелких файлов на практике
Я игралась с iceberg-таблицами, и у меня странно долго работали запросы. Исходные данные: 2,8 млрд строк и 111гб. Я поресерчила, что запросы сильно тормозят на этапе чтения. Пошла смотреть, как лежат данные, и увидела в каждой партиции по 100 файлов размером 1кб🥺
1825 партиций, 182400 файлов - представляете, сколько накладных расходов открыть каждый файлик?
В чем особенность айсберга - вы не можете просто взять и переложить/пересохранить данные. Потому что в мете лежат ссылочки на файлики с данными. У вас просто все поломается😒 Для компакта есть процедура рерайта:
Проверено: на драйвере должно быть достаточно памяти, чтобы выполнить эту операцию. Иначе файлики создадутся, но мета не обновится. Это значит, что ничего не поменялось, вы просто теперь храните в 2 раза больше данных, которые придется удалять ручками
После процедуры стало 6283 актуальных файликов - теперь все лежит как надо👍
На картинке - запрос
Что получилось:
- файлы уменьшились в 30 раз
- таски в 6,7 раз
- время в 1,8 раз
Я игралась с iceberg-таблицами, и у меня странно долго работали запросы. Исходные данные: 2,8 млрд строк и 111гб. Я поресерчила, что запросы сильно тормозят на этапе чтения. Пошла смотреть, как лежат данные, и увидела в каждой партиции по 100 файлов размером 1кб
hdfs dfs -count /my_table
# 1825 182400
1825 партиций, 182400 файлов - представляете, сколько накладных расходов открыть каждый файлик?
В чем особенность айсберга - вы не можете просто взять и переложить/пересохранить данные. Потому что в мете лежат ссылочки на файлики с данными. У вас просто все поломается
spark.sql("""CALL system.rewrite_data_files(
table => 'my_db.my_table',
options => map('target-file-size-bytes', '134217728') --128 мб
)""")
Проверено: на драйвере должно быть достаточно памяти, чтобы выполнить эту операцию. Иначе файлики создадутся, но мета не обновится. Это значит, что ничего не поменялось, вы просто теперь храните в 2 раза больше данных, которые придется удалять ручками
После процедуры стало 6283 актуальных файликов - теперь все лежит как надо
На картинке - запрос
spark.table().cache().count()
, который до компакта проходился по 5730 партициям, а теперь всего 856Что получилось:
- файлы уменьшились в 30 раз
- таски в 6,7 раз
- время в 1,8 раз
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38👍11
3. Управление ожиданиями руководства и команды
Продолжаю рассказывать про курс команды
Второй модуль - тут
Описание программы - тут
Что рассмотрели:
⏺ типология по Адизесу (PAEI)
⏺ этапы развития компании
⏺ корпоративные культуры
⏺ психологическая безопасность в команде
⏺ командная вовлеченность
⏺ матрица прозрачности и доверия
⏺ пороки команды
Лектор тоже классный, 5ч просто незаметно пролетают
Майндсет сотрудника: я сделаю сам
Майндсет руководителя: делегирование = инвестирование, потом будет больше времени для стратегических задач, развития команды и т.д.
Идеальный найм = Task Fit + Team Fit + Culture Fit
А на собесе на менеджера важно попросить описать корп культуру, потому что руководитель ее транслирует
🍰 PAEI
По этой модели идеальный руководитель = постоянные результаты (Production) + совершенствование процессов (Administration) + креативный подход (Entrepreneurship) + работа с командой (Integration)
Он умеет во все функции, но 1-2 выражены наиболее ярко. Если у вас не хватает, например, креативности или не хочется следовать всем правилам - в команде должен быть генератор идей или человек, которому нравится выстраивать процессы. Если таких нет - нужно развить
🐸 Маркеры для собственного проявления
Кого наказывают, кого поощряют?
Кого продвигают, кого нет?
На что выделяются бюджеты?
🐸 Психологическая безопасность
Есть 7 вопросов для определения ок/не ок:
🐻 Командная вовлеченность
Чтобы группа людей была реально командой, нужна общая цель, коллаборации внутри команды, ME -> WE, коллеги -> тиммейты, свои ритуалы, артефакты, табу, язык
Не надо бояться конфликтов, в них появляется решение проблемы и энергия на это решение. При работе в группе вкинули, что можно даже попробовать самому подрывать команду из проблем на 1-1, чтобы быстрее выводить команду на другую стадию развития. Но это может не сработать. Не сломать то, что уже есть
Прикольная цитата
Тест на PAEI можно пройти тут
Продолжаю рассказывать про курс команды
Второй модуль - тут
Описание программы - тут
Что рассмотрели:
Лектор тоже классный, 5ч просто незаметно пролетают
Майндсет сотрудника: я сделаю сам
Майндсет руководителя: делегирование = инвестирование, потом будет больше времени для стратегических задач, развития команды и т.д.
Идеальный найм = Task Fit + Team Fit + Culture Fit
А на собесе на менеджера важно попросить описать корп культуру, потому что руководитель ее транслирует
По этой модели идеальный руководитель = постоянные результаты (Production) + совершенствование процессов (Administration) + креативный подход (Entrepreneurship) + работа с командой (Integration)
Он умеет во все функции, но 1-2 выражены наиболее ярко. Если у вас не хватает, например, креативности или не хочется следовать всем правилам - в команде должен быть генератор идей или человек, которому нравится выстраивать процессы. Если таких нет - нужно развить
Кого наказывают, кого поощряют?
Кого продвигают, кого нет?
На что выделяются бюджеты?
Есть 7 вопросов для определения ок/не ок:
1. If you make a mistake on your team, is it held against you?
2. Are you able to bring up problems and tough issues?
3. Do people on the team sometimes reject others for being different?
4. Is it safe to take a risk?
5. Is it difficult to ask other team members for help?
6. Do people on the team deliberately act to undermine your efforts?
7. Are your unique skills and talents valued and utilized?
Чтобы группа людей была реально командой, нужна общая цель, коллаборации внутри команды, ME -> WE, коллеги -> тиммейты, свои ритуалы, артефакты, табу, язык
Не надо бояться конфликтов, в них появляется решение проблемы и энергия на это решение. При работе в группе вкинули, что можно даже попробовать самому подрывать команду из проблем на 1-1, чтобы быстрее выводить команду на другую стадию развития. Но это может не сработать. Не сломать то, что уже есть
Прикольная цитата
Ошибка - оплаченная возможность для развития
Тест на PAEI можно пройти тут
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤9🔥1 1
Media is too big
VIEW IN TELEGRAM
Бесплатный ресурс для англа
Недавно не знала, чем занять очередной вечер, и решила полистать свои чатики с встречками по англу. Там я наткнулась (не реклама) на American Center in Moscow. Я когда-то подписалась на них, но особо не заглядывала, потому что они все организуют онлайн, а мне хотелось прийти вживую
И вот у меня был свободный вечер, у них - просмотр и обсуждение TED Talk на тему прокрастинации, почему бы и да? Мы рассказали про наши дела, посмотрели видос, пообсуждали, прошли тест на прокрастинацию, пообсуждали тест и пошли обсуждать в группах, что мы прокрастинируем и как с этим будем бороться - всего 1,5ч
Оказывается, у них каждый день что-то происходит, и это все бесплатно😋
А видос я нашла в другом чатике, по-моему, очень правдоподобно😁
Недавно не знала, чем занять очередной вечер, и решила полистать свои чатики с встречками по англу. Там я наткнулась (не реклама) на American Center in Moscow. Я когда-то подписалась на них, но особо не заглядывала, потому что они все организуют онлайн, а мне хотелось прийти вживую
И вот у меня был свободный вечер, у них - просмотр и обсуждение TED Talk на тему прокрастинации, почему бы и да? Мы рассказали про наши дела, посмотрели видос, пообсуждали, прошли тест на прокрастинацию, пообсуждали тест и пошли обсуждать в группах, что мы прокрастинируем и как с этим будем бороться - всего 1,5ч
Оказывается, у них каждый день что-то происходит, и это все бесплатно
А видос я нашла в другом чатике, по-моему, очень правдоподобно😁
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍13❤6😁6
Разбираемся в движках клика
Этот день настал, и я наконец-то поняла, что происходит с разными движками в кх🕺
Возьмем такую конфигурацию кластера: 2 шарда по 2 реплики. И для примера 3 движка: MergeTree, ReplicatedMergeTree, Distributed
Подключаемся к 1му хосту, создаем 6 таблиц на кластере. Чтобы результаты не мешали друг другу, под Distributed создаем отдельные свежие чистые таблички:
1) MergeTree
2) ReplicatedMergeTree
3) Distributed поверх MergeTree
4) Distributed поверх ReplicatedMergeTree
Каждая таблица теперь существует на каждом хосте, потому что мы создали на всем кластере. Инсертим 10к строк данных и сравним
Что получается?
🎈 MergeTree
Данные хранятся только на том хосте, на котором мы заинсертили. На остальных 0
🎈 ReplicatedMergeTree
Данные хранятся на всех репликах одного шарда. На остальных шардах 0
🎈 Distributed
Данные вообще не хранит, они лежат в исходной таблице. В каком-то смысле это как view
Если в основе MergeTree - то данные будут на одной из реплик в шарде. В нашем случае это replica1 для shard1 и replica2 для shard2
Когда мы делаем count(), рандомно выбирается одна реплика из каждого шарда. Т.е. на нашем кластере возможны 4 комбинации:
Это значит, что при каждом новом запросе, например, для хоста 3 мы можем получить либо 5030 строк, либо 0
Если в основе ReplicatedMergeTree - то между репликами будет одинаковое количество строк, но между шардами разное. А при запросе к distributed всегда будет участвовать одинаковое количество строк
🌷 Поэтому если нужно получать консистентные данные, обеспечивать отказоустойчивость - используем Distributed на базе ReplicatedMergeTree и селектим из Distributed
Этот день настал, и я наконец-то поняла, что происходит с разными движками в кх
Возьмем такую конфигурацию кластера: 2 шарда по 2 реплики. И для примера 3 движка: MergeTree, ReplicatedMergeTree, Distributed
Подключаемся к 1му хосту, создаем 6 таблиц на кластере. Чтобы результаты не мешали друг другу, под Distributed создаем отдельные свежие чистые таблички:
1) MergeTree
ENGINE MergeTree()
2) ReplicatedMergeTree
ENGINE ReplicatedMergeTree()
3) Distributed поверх MergeTree
ENGINE = Distributed(local_cluster, default, mt_table, rand())
4) Distributed поверх ReplicatedMergeTree
ENGINE = Distributed(local_cluster, default, rmt_table, rand())
Каждая таблица теперь существует на каждом хосте, потому что мы создали на всем кластере. Инсертим 10к строк данных и сравним
Что получается?
Данные хранятся только на том хосте, на котором мы заинсертили. На остальных 0
Данные хранятся на всех репликах одного шарда. На остальных шардах 0
Данные вообще не хранит, они лежат в исходной таблице. В каком-то смысле это как view
Если в основе MergeTree - то данные будут на одной из реплик в шарде. В нашем случае это replica1 для shard1 и replica2 для shard2
Когда мы делаем count(), рандомно выбирается одна реплика из каждого шарда. Т.е. на нашем кластере возможны 4 комбинации:
1 + 3 = 5030 + 0 = 5030
1 + 4 = 5030 + 4970 = 10000
2 + 3 = 0 + 0 = 0
2 + 4 = 0 + 4970 = 4970
Это значит, что при каждом новом запросе, например, для хоста 3 мы можем получить либо 5030 строк, либо 0
Если в основе ReplicatedMergeTree - то между репликами будет одинаковое количество строк, но между шардами разное. А при запросе к distributed всегда будет участвовать одинаковое количество строк
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥5🤔4😁1 1
Ох, как давно у нас их не было, сегодня смотрим на ROLLUP. Даже если не знаете, попробуйте прикинуть/придумать, а потом я все расскажу
Есть табличка population - она на картинке. К ней делаем такой запрос:
SELECT
country,
region,
city,
SUM(population) AS total
FROM population
GROUP BY ROLLUP (country, region, city)
Сколько строк выведет запрос?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
3👍8🔥4 3
ROLLUP vs CUBE vs GROUPING SETS
Суть этих штук - добавить промежуточные тоталы (как в экселе). Как будто мы group by делаем несколько раз с разными полями
🍣 ROLLUP
country-region-city - 6 строк
country-region - 4 строки
country - 2 строки
all - 1 строка
————
13 строк
Мы с каждым уровнем отбрасываем более детальный столбец и считаем тотал шире
Первые 6 строк - как в обычной группировке (поэтому не расписываю). К ним еще добавляем тоталы по стране с регионом, стране и глобальный тотал:
🎲 CUBE
Здесь нужны все комбинации: по 3 элемента, 2, 1, 0
country-region-city - 6 строк
country-region - 4 строк
country-city - 6 строк
region-city - 6 строк
country - 2 строки
region - 4 строки
city - 6 строк
all - 1 строка
————
35 строк
👥 GROUPING SETS
Здесь можно кастомно задавать группы. В этом примере будет то же самое, что и ROLLUP
Суть этих штук - добавить промежуточные тоталы (как в экселе). Как будто мы group by делаем несколько раз с разными полями
GROUP BY ROLLUP (country, region, city)
country-region-city - 6 строк
country-region - 4 строки
country - 2 строки
all - 1 строка
————
13 строк
Мы с каждым уровнем отбрасываем более детальный столбец и считаем тотал шире
Первые 6 строк - как в обычной группировке (поэтому не расписываю). К ним еще добавляем тоталы по стране с регионом, стране и глобальный тотал:
Russia Moscow Oblast NULL 12800
Russia Siberia NULL 1600
USA California NULL 4900
USA Texas NULL 2300
Russia NULL NULL 14400
USA NULL NULL 7200
NULL NULL NULL 21600
GROUP BY CUBE (country, region, city)
Здесь нужны все комбинации: по 3 элемента, 2, 1, 0
country-region-city - 6 строк
country-region - 4 строк
country-city - 6 строк
region-city - 6 строк
country - 2 строки
region - 4 строки
city - 6 строк
all - 1 строка
————
35 строк
GROUP BY GROUPING SETS ((country, region, city), (country, region), (country), ())
Здесь можно кастомно задавать группы. В этом примере будет то же самое, что и ROLLUP
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍9🔥6