**Компания:** Тинькофф
**Контекст:** Таблица транзакций в источнике растёт на 5 млн строк в день. Полная перезаливка каждый раз — слишком дорого. Нужно реализовать инкрементальную загрузку.
[см. код в задании]
**Задание:**
1. Напишите SQL для инкрементальной загрузки новых и обновлённых записей
2. Обновите watermark после успешной загрузки
3. Объясните, почему нужен updated_at, а не только created_at
Структура для ориентира — реальные значения из эталонного решения.
-- Получить watermark
WITH wm AS (
SELECT COALESCE(last_loaded_at, '1970-01-01') AS wm_ts
FROM etl_watermarks
WHERE table_name = 'dwh_transactions'
)
INSERT INTO dwh_transactions (txn_id, account_id, amount, txn_type, created_at, updated_at, loaded_at)
SELECT txn_id, account_id, amount, txn_type, created_at, updated_at, NOW()
FROM src_transactions, wm
WHERE updated_at > wm.wm_ts
ON CONFLICT (txn_id) DO UPDATE SET
account_id = EXCLUDED.account_id,
amount = EXCLUDED.amount,
txn_type = EXCLUDED.txn_type,
updated_at = EXCLUDED.updated_at,
loaded_at = NOW();
incremental load ETL watermark инкремент
Это задание для уровня easy. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: incremental load, ETL, watermark, инкремент.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания