🧾 Чек-лист. Основные этапы создания Корпоративного Хранилища данных
В зависимости от компании, подход к созданию КХД может различаться: одни видят его как монолитную систему, другие — как распределенную архитектуру. Мы под КХД будем понимать как ядровую БД, так и все дополнительные инструменты для переливки информации, базы данных, BI, утилиты для мониторинга и алертинга и многое другое.
1. Определение целей и задач
Рекомендуется не отталкиваться от технических возможностей, а начинать с бизнес-контекста.
- Четко сформулируйте цели хранилища (аналитика, отчетность, оптимизация процессов и т.д.)
- Определите ключевых заинтересованных лиц (stakeholders) и их ожидания
- Изучите нюансы бизнеса
2. Анализ источников данных
В зависимости от свойств источника происходит различная работа по “вытаскиванию” необходимой информации. Активный/пассивный, имеющий дубли и вложенность хранения, типизация и эволюция схемы, а также многое другое.
- Проведите инвентаризацию всех источников данных (CRM, ERP, веб-приложения, файлы, БД, API и т.д.)
- Определите форматы данных (структурированные, неструктурированные)
- Выясните объем и частоту обновления данных и т.д.
3. Определение архитектуры хранилища
Самый сложный и важный этап.
- Выберите подход (ETL или ELT)
- Решите, будет ли хранилище on-premise, облачным или гибридным
- Определите слои хранилища: staging (сырые данные), ODS (операционные данные), DWH (исторические данные)
- Обозначьте, где будут содержаться витрины данных и “сырая” информация
- Уточните, как будет предоставляться информация конечным пользователям и т.д.
4. Выбор технологий
- Определите, нужны ли вам БД отдельно для OLAP и OLTP?
- Выберите СУБД (Greenplum, Snowflake, PosgtreSQL, ClickHouse и т.д.)
- Подберите инструменты интеграции данных (Apache NiFi, Dagster, Airflow)
- Подумайте о Вl-инструментах (Tableau, Superset, Looker)
- А так же не забывайте об инструментах мониторинга, бекапирования и алертинга
5. Проектирование модели данных
- Определите уровень нормализации данных (3NF, звездная или снежинка — или более продвинутые, Data Vault)
- Создайте ЕR-диаграммы и схемы таблиц
- Проработайте “узкие места” и слепые зоны, подумайте о связи модели данных и пользовательских ролей и доступов
6. Реализация ETL/ELT процессов
- Настройте коннекторы к источникам данных
- Создайте пайплайны для извлечения, трансформации и загрузки данных
- Автоматизируйте обновление данных
7. Управление качеством данных
- Внедрите процессы проверки данных (data validation)
- Реализуйте контроль на дубликаты, пропуски и несоответствия форматов
8. Обеспечение безопасности
- Настройте роли и права доступа. Подумайте о внедрении Active Directory для унифицирования доступа ко всем текущим инструментам
- Реализуйте шифрование данных (в покое и в процессе передачи)
- Подготовьте план аварийного восстановления
9. Тестирование и валидация
- Проведите нагрузочное тестирование (stress test)
- Убедитесь в корректности обработки данных на всех этапах
- Проверьте интеграцию с BI и всеми другими инструментами
10. Документация и обучение
- Подготовьте документацию: схемы данных, описания ETL-процессов, инструкции для пользователей
- Изучите представленные на рынке инструменты для автоматизации сбора документации
- Проведите обучение сотрудников, которые будут работать с хранилищем
11. Запуск и эксплуатация
Убедитесь, что у вас настроены как минимум области DEV, Stage, Prom
Подготовьтесь к автоматизированной раскатке в production
Настройте мониторинг производительности
Определите процессы для обновления, расширения и поддержки хранилища
12. Постоянное улучшение
- Анализируйте обратную связь от пользователей
- Оптимизируйте процессы обработки данных
- Добавляйте новые источники данных по мере необходимости
Для системного обучения рекомендуем профессиональный курс по DWH от Otus, где вы получите хорошую базу и практику.
➡️ Регистрируйтесь прямо сейчас, чтобы воспользоваться 10% скидкой на курс и учиться по 🏖 летним ценам! Условия актуальны только до 31.07.2025: https://vk.cc/cNXxCx
В зависимости от компании, подход к созданию КХД может различаться: одни видят его как монолитную систему, другие — как распределенную архитектуру. Мы под КХД будем понимать как ядровую БД, так и все дополнительные инструменты для переливки информации, базы данных, BI, утилиты для мониторинга и алертинга и многое другое.
1. Определение целей и задач
Рекомендуется не отталкиваться от технических возможностей, а начинать с бизнес-контекста.
- Четко сформулируйте цели хранилища (аналитика, отчетность, оптимизация процессов и т.д.)
- Определите ключевых заинтересованных лиц (stakeholders) и их ожидания
- Изучите нюансы бизнеса
2. Анализ источников данных
В зависимости от свойств источника происходит различная работа по “вытаскиванию” необходимой информации. Активный/пассивный, имеющий дубли и вложенность хранения, типизация и эволюция схемы, а также многое другое.
- Проведите инвентаризацию всех источников данных (CRM, ERP, веб-приложения, файлы, БД, API и т.д.)
- Определите форматы данных (структурированные, неструктурированные)
- Выясните объем и частоту обновления данных и т.д.
3. Определение архитектуры хранилища
Самый сложный и важный этап.
- Выберите подход (ETL или ELT)
- Решите, будет ли хранилище on-premise, облачным или гибридным
- Определите слои хранилища: staging (сырые данные), ODS (операционные данные), DWH (исторические данные)
- Обозначьте, где будут содержаться витрины данных и “сырая” информация
- Уточните, как будет предоставляться информация конечным пользователям и т.д.
4. Выбор технологий
- Определите, нужны ли вам БД отдельно для OLAP и OLTP?
- Выберите СУБД (Greenplum, Snowflake, PosgtreSQL, ClickHouse и т.д.)
- Подберите инструменты интеграции данных (Apache NiFi, Dagster, Airflow)
- Подумайте о Вl-инструментах (Tableau, Superset, Looker)
- А так же не забывайте об инструментах мониторинга, бекапирования и алертинга
5. Проектирование модели данных
- Определите уровень нормализации данных (3NF, звездная или снежинка — или более продвинутые, Data Vault)
- Создайте ЕR-диаграммы и схемы таблиц
- Проработайте “узкие места” и слепые зоны, подумайте о связи модели данных и пользовательских ролей и доступов
6. Реализация ETL/ELT процессов
- Настройте коннекторы к источникам данных
- Создайте пайплайны для извлечения, трансформации и загрузки данных
- Автоматизируйте обновление данных
7. Управление качеством данных
- Внедрите процессы проверки данных (data validation)
- Реализуйте контроль на дубликаты, пропуски и несоответствия форматов
8. Обеспечение безопасности
- Настройте роли и права доступа. Подумайте о внедрении Active Directory для унифицирования доступа ко всем текущим инструментам
- Реализуйте шифрование данных (в покое и в процессе передачи)
- Подготовьте план аварийного восстановления
9. Тестирование и валидация
- Проведите нагрузочное тестирование (stress test)
- Убедитесь в корректности обработки данных на всех этапах
- Проверьте интеграцию с BI и всеми другими инструментами
10. Документация и обучение
- Подготовьте документацию: схемы данных, описания ETL-процессов, инструкции для пользователей
- Изучите представленные на рынке инструменты для автоматизации сбора документации
- Проведите обучение сотрудников, которые будут работать с хранилищем
11. Запуск и эксплуатация
Убедитесь, что у вас настроены как минимум области DEV, Stage, Prom
Подготовьтесь к автоматизированной раскатке в production
Настройте мониторинг производительности
Определите процессы для обновления, расширения и поддержки хранилища
12. Постоянное улучшение
- Анализируйте обратную связь от пользователей
- Оптимизируйте процессы обработки данных
- Добавляйте новые источники данных по мере необходимости
Для системного обучения рекомендуем профессиональный курс по DWH от Otus, где вы получите хорошую базу и практику.
➡️ Регистрируйтесь прямо сейчас, чтобы воспользоваться 10% скидкой на курс и учиться по 🏖 летним ценам! Условия актуальны только до 31.07.2025: https://vk.cc/cNXxCx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576❤2👍2
Какой из следующих запросов отобразит всех студентов, у которых вторая буква в имени - «i»?
Anonymous Quiz
7%
select first_name from students where first_name like ‘%i_’;
16%
select first_name from students where first_name like ‘%i%’;
71%
select first_name from students where first_name like ‘_i%’;
5%
select first_name from students where first_name like ‘_i_’;
1%
Посмотреть ответ
Микросервисы захватили мир → а вы готовы управлять их общением?
Пока одни разработчики борются с падающими сообщениями и блокировками в очередях, другие элегантно строят отказоустойчивые распределённые системы. Разница — в глубоком понимании RabbitMQ.
Большинство программистов знают брокеры сообщений поверхностно: отправил → получил → «работает, не трогай». А когда система начинает расти, начинаются проблемы: потерянные сообщения, узкие места в производительности, сложности с масштабированием.
Курс «RabbitMQ для разработчиков и администраторов» — это advanced-погружение для тех, кто хочет стать экспертом. Три месяца практики под руководством профессионалов, и вы научитесь не просто «подключать очереди», а проектировать архитектуру, которая выдержит любые нагрузки.
Что получите:
→ Навыки разработки сложных правил маршрутизации
→ Умение планировать и масштабировать RabbitMQ-кластеры
→ Опыт настройки «Infrastructure as a code»
→ Знания по устранению узких мест и оптимизации производительности
Владение RabbitMQ — это билет в мир высокооплачиваемых позиций архитектора и senior-разработчика микросервисов.
Старт уже 31 июля, но сначала — вступительное тестирование. Скидка 10% действует только до конца месяца.
Проверьте свой уровень и получите доступ к advanced-программе: https://vk.cc/cOahd9
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Пока одни разработчики борются с падающими сообщениями и блокировками в очередях, другие элегантно строят отказоустойчивые распределённые системы. Разница — в глубоком понимании RabbitMQ.
Большинство программистов знают брокеры сообщений поверхностно: отправил → получил → «работает, не трогай». А когда система начинает расти, начинаются проблемы: потерянные сообщения, узкие места в производительности, сложности с масштабированием.
Курс «RabbitMQ для разработчиков и администраторов» — это advanced-погружение для тех, кто хочет стать экспертом. Три месяца практики под руководством профессионалов, и вы научитесь не просто «подключать очереди», а проектировать архитектуру, которая выдержит любые нагрузки.
Что получите:
→ Навыки разработки сложных правил маршрутизации
→ Умение планировать и масштабировать RabbitMQ-кластеры
→ Опыт настройки «Infrastructure as a code»
→ Знания по устранению узких мест и оптимизации производительности
Владение RabbitMQ — это билет в мир высокооплачиваемых позиций архитектора и senior-разработчика микросервисов.
Старт уже 31 июля, но сначала — вступительное тестирование. Скидка 10% действует только до конца месяца.
Проверьте свой уровень и получите доступ к advanced-программе: https://vk.cc/cOahd9
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
С помощью какого update-запроса можно обновить значения более чем одной колонки?
Anonymous Quiz
6%
Одним запросом можно обновить не более одной колонки
8%
UPDATE table_name SET col1_name = 'col1val' SET col2_name = 'col2val';
12%
UPDATE table_name SET col1_name = 'col1val' AND SET col2_name = 'col2val';
66%
UPDATE table_name SET col1_name = 'col1val', col2_name = 'col2val';
7%
Узнать ответ
Где верно прописано удаление поля в таблице?
Anonymous Quiz
16%
DROP Users COLUMN name;
7%
SELECT Users DROP COLUMN name;
5%
TRUNCATE Users DROP COLUMN name;
66%
ALTER TABLE Users DROP COLUMN name;
5%
Узнать ответ
❤1
Оператор «NOT IN» и коварный NULL
#почитать
Мольер. Мещанин во дворянстве
⏱ Читать статью
#почитать
Учитель философии. Конечно. Вы хотите написать ей стихи?
Г-н Журден. Нет-нет, только не стихи.
Учитель философии. Вы предпочитаете прозу?
Г-н Журден. Нет, я не хочу ни прозы, ни стихов.
Учитель философии. Так нельзя: или то, или другое.
Г-н Журден. Почему?
Учитель философии. По той причине, сударь, что мы можем излагать свои мысли не иначе как прозой или стихами.
Г-н Журден. Не иначе как прозой или стихами?
Учитель философии. Не иначе, сударь. Все, что не проза, то стихи, а что не стихи, то проза.
Мольер. Мещанин во дворянстве
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Какой запрос позволит получить всех пользователей так, чтобы новые оказались в начале? Дата регистрации - "reg_date".
Anonymous Quiz
71%
SELECT * FROM users ORDER BY reg_date DESC
5%
SELECT * FROM users SORT BY reg_date DESC
17%
SELECT * FROM users ORDER BY reg_date ASC
2%
SELECT * FROM users ORDER ASC BY reg_date
2%
SELECT * FROM users SORT(reg_date)
3%
Посмотреть ответ
❔ Вопрос с собеседования
Как работает SQL-триггер?
Ответ:Когда происходит событие, СУБД автоматически вызывает триггер, который затем выполняет набор операторов SQL, определенных в триггере. Триггеры определяются для каждой таблицы и создаются с помощью оператора CREATE TRIGGER. Они могут запускаться до или после наступления события и выполняться один раз для каждой затронутой строки либо один раз для каждого оператора.
➡️ SQL Pro | #собеседование
Как работает SQL-триггер?
Ответ:
➡️ SQL Pro | #собеседование
❤8👌2
Чем различаются запросы с UNION и UNION ALL?
Anonymous Quiz
6%
Различия только в написании операции. Union - это сокращенный вариант написания UNION ALL
80%
UNION объединяет наборы строк, исключая дубли. UNION ALL объединяет наборы с сохранением всех строк
8%
UNION соединяет таблицы через внутреннее соенидение, а UNION ALL соединяет строки слева и справа
2%
Все варианты неверные
5%
Узнать ответ
Трюк дня. Найти медиану
Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.
Необходимо найти медиану для данного столбца.
Решение:
В PostgreSQL используйте функцию percentile_count:
В MS SQL также используйте функцию percentile_count:
В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.
В Oracle используйте функцию MEDIAN:
Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.
Ответ: медиана = 4.
#tips
Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.
Необходимо найти медиану для данного столбца.
Решение:
В PostgreSQL используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) FROM table;
В MS SQL также используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) OVER (PARTITION BY 1) FROM table;
В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.
В Oracle используйте функцию MEDIAN:
SELECT MEDIAN (sales) OVER (PARTITION BY 1) FROM table; Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.
/*задаем переменную row_index = -1, чтобы отсчет индекса начался с 0 */
SET @row_index := -1;
/*находим среднее двух значений в центре отсортированного набора. Охватывает те случаи, когда общее число записей четное*/
SELECT AVG (subq.sales) as median_value
FROM (
SELECT @row_index:=@row_index + 1 AS row_index, sales
FROM table
ORDER BY sales
) AS subq
WHERE subq.row_index
/*выбираем только значения в центре: одно если число записей нечетное и два если четное*/
IN (FLOOR(@row_index / 2) , CEIL(@row_index / 2));
Ответ: медиана = 4.
#tips
🔥4
Какой знак в запросах с использованием LIKE соответствует произвольному количеству символов в строке?
Anonymous Quiz
80%
%
1%
-
1%
|
0%
/
13%
*
4%
Посмотреть ответы
Трюк дня. Сравнение с предыдущим
Напишите SQL-запрос, который находит в таблице
Решение будет вечером.
#tips
Напишите SQL-запрос, который находит в таблице
weather все даты (идентификаторы дат), когда температура была бы выше температуры на предшествующие им даты. То есть, нас интересуют даты, в которые «сегодняшняя» температура выше «вчерашней».Решение будет вечером.
#tips
Трюк дня. Сравнение с предыдущим. Решение.
Решение: использование
Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.
#tips
Решение: использование
DATEDIFF
DATEDIFF: эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.
SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1
#tips
👍5
Какой результат вернет следующий PostgreSQL/MySQL запрос:
SELECT GREATEST (6.62, - 8, '82');
SELECT GREATEST (6.62, - 8, '82');
Anonymous Quiz
23%
6.62
3%
- 8
26%
82
32%
Ошибка
15%
Посмотреть ответы
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Разобраться в современном data-engineering-стеке — это возможность выйти на новый уровень в аналитике и научиться работать с инфраструктурой, которую сегодня используют крупнейшие компании.
📅 2 декабря в 19:00 МСК — открытый урок «Data Engineering & Analytics: от данных к бизнес-инсайтам» в рамках курса «Data Warehouse Analyst. Advanced». За один вечер разберём всё самое важное:
🔹 Архитектуру хранилищ и потоковую обработку данных
🔹 Сравним аналитические СУБД: Greenplum и ClickHouse
🔹 Покажем подходы Data Vault 2.0
🔹 Роль Spark и Kafka в аналитике
🔹 Как Python, Pandas и Scikit-learn помогают строить модели
После урока у вас будет чёткое понимание:
✔️ Какие навыки нужны Data Engineer и Data Analyst
✔️ Как организовать полный цикл работы с данными
✔️ Как формируются инсайты, влияющие на решения бизнеса
🔗 Регистрация по ссылке: https://vk.cc/cRGZcp
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 2 декабря в 19:00 МСК — открытый урок «Data Engineering & Analytics: от данных к бизнес-инсайтам» в рамках курса «Data Warehouse Analyst. Advanced». За один вечер разберём всё самое важное:
🔹 Архитектуру хранилищ и потоковую обработку данных
🔹 Сравним аналитические СУБД: Greenplum и ClickHouse
🔹 Покажем подходы Data Vault 2.0
🔹 Роль Spark и Kafka в аналитике
🔹 Как Python, Pandas и Scikit-learn помогают строить модели
После урока у вас будет чёткое понимание:
✔️ Какие навыки нужны Data Engineer и Data Analyst
✔️ Как организовать полный цикл работы с данными
✔️ Как формируются инсайты, влияющие на решения бизнеса
🔗 Регистрация по ссылке: https://vk.cc/cRGZcp
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что покажет следующий запрос:
select * from Orders where date between '2017-01-01' and '2017-12-31'
select * from Orders where date between '2017-01-01' and '2017-12-31'
Anonymous Quiz
4%
Все данные по заказам, совершенным за 2017 год, за исключением 01 января 2017 года
20%
Все данные по заказам, совершенным за 2017 год, за исключением 31 декабря 2017 года
66%
Все данные по заказам, совершенным за 2017 год
6%
Ничего: запрос составлен неверно
4%
Посмотреть ответ
👎5
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем
В столбце
Напишите MySQL-запрос, который извлечет
Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
А из строки 'Jack Powers' получится следующее:
Решение будет вечером.
#tips
В столбце
fullname таблицы customers содержится имя, отчество и фамилия в следующем формате: 'name middlename surname'.Напишите MySQL-запрос, который извлечет
name, middlename и surname в отдельные столбцы. Если middlename не существует, то в результате в middlename должен быть NULL.Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
• name = 'Alena', • middlename = 'Igorevna', • surname = 'Petrova'. А из строки 'Jack Powers' получится следующее:
• name = 'Jack', • middlename = NULL, • surname = 'Powers'.Решение будет вечером.
#tips
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем. Решение.
#tips
SELECT
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 1), ' ', -1) AS name,
IF (LENGTH (fullname) - LENGTH (REPLACE (fullname, ' ', '')) > 1,
SUBSTRING_INDEX(SUBSTRING_INDEX (fullname, ' ', 2), ' ', -1), NULL)
AS middlename,
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 3), ' ', -1) AS surname
FROM customers;
#tips
👍3
Решение сегодняшней задачи на логику и мышление.
Вместо знака вопроса должно стоять число 179. Если двигаться по часовой стрелке начиная с 3, то каждое последующее число равно удвоенному предыдущему, к которому прибавили 1, 3, 5, 7, 9.
3 × 2 + 1 = 7.
7 × 2 + 3 = 17.
17 × 2 + 5 = 39.
39 × 2 + 7 = 85.
85 × 2 + 9 = 179.
#логика
Вместо знака вопроса должно стоять число 179. Если двигаться по часовой стрелке начиная с 3, то каждое последующее число равно удвоенному предыдущему, к которому прибавили 1, 3, 5, 7, 9.
3 × 2 + 1 = 7.
7 × 2 + 3 = 17.
17 × 2 + 5 = 39.
39 × 2 + 7 = 85.
85 × 2 + 9 = 179.
#логика