**Компания:** Авито
**Контекст:** Аналитическое хранилище переезжает с MySQL 8 на PostgreSQL 15. Нужно спланировать миграцию и написать скрипты конвертации.
**Проблемы совместимости:**
- Типы данных: TINYINT, UNSIGNED, ENUM, DATETIME vs TIMESTAMP
- Функции: IFNULL vs COALESCE, GROUP_CONCAT vs STRING_AGG
- Auto-increment: AUTO_INCREMENT vs SERIAL/IDENTITY
- Кавычки: backticks vs double quotes
**Задание:**
1. Составьте маппинг типов данных MySQL → PostgreSQL
2. Напишите скрипт конвертации DDL (хотя бы для 3-4 таблиц)
3. Составьте чек-лист миграции: от планирования до cutover
4. Напишите SQL для верификации: данные совпадают после миграции
Структура для ориентира — реальные значения из эталонного решения.
-- MySQL:
-- CREATE TABLE users (
-- id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
-- name VARCHAR(200) NOT NULL,
-- email VARCHAR(200) NOT NULL,
-- status ENUM('active','blocked','deleted') DEFAULT 'active',
-- is_premium TINYINT(1) DEFAULT 0,
-- created_at DATETIME DEFAULT CURRENT_TIMESTAMP
-- );
-- PostgreSQL:
CREATE TABLE users (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(200) NOT NULL,
email VARCHAR(200) NOT NULL,
status VARCHAR(20) DEFAULT 'active'
CHECK (status IN ('active', 'blocked', 'deleted')),
is_premium BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- MySQL:
-- SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users GROUP BY city;
-- PostgreSQL:
SELECT STRING_AGG(name, ', ') FROM users GROUP BY city;
-- MySQL: IFNULL(x, 0)
-- PostgreSQL: COALESCE(x, 0)
-- MySQL: DATE_FORMAT(dt, '%Y-%m')
-- PostgreSQL: TO_CHAR(dt, 'YYYY-MM')
-- MySQL: LIMIT 10 OFFSET 20
-- PostgreSQL: LIMIT 10 OFFSET 20 (совместимо)
миграция MySQL PostgreSQL совместимость план
Это задание для уровня hard. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: миграция, MySQL, PostgreSQL, совместимость, план.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания