TGViewer
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) Дима SQL-ит 🧑‍💻 (Аналитика данных, AI) @dima_sqlit · 2.22K subscribers
Post #122 1.4K
😅 Идемпотентность и Детерминированность: что это и почему аналитику важно это знать:

Друзья, всем привет. Сегодня поговорим про два термина, которые звучат страшно, но на деле — это база для любого, кто пишет скрипты, DAG'и или собирает витрины данных.

Аналитики сейчас часто не только строят графики, но и сами настраивают сбор данных (например, в Airflow). И тут важно понимать два принципа, чтобы не получить дубли или кривые цифры в отчетах.

🔜 Детерминированность (Determinism):
Звучит сложно, а суть простая:
Если мы скармливаем функции одни и те же данные на вход, она всегда должна возвращать один и тот же результат.

Детерминированный пример в SQL:
LOWER('Dima') — всегда вернет 'dima'
Это детерминировано.


Не детерминированный пример в SQL:
• NOW() или RANDOM() — каждый раз вернут разное значение, даже если вы ничего не меняли.


Почему это важно нам? Когда вы пишете расчет метрики, вы должны быть уверены: если вы запустите расчет сегодня, завтра или через год на тех же самых исходных данных — значения должны получиться одинаковые.

🔜 Идемпотентность (Idempotency):
Это про то, что количество запусков скрипта не должно ломать данные.

Представьте ситуацию: Вы написали скрипт для DAG'а, который считает продажи за вчерашний день и кладет их в итоговую таблицу. Если скрипт упал на середине или вы случайно запустили его два раза подряд — что произойдет?

❌ Плохой сценарий (Не идемпотентно): Скрипт просто берет и вставляет данные (INSERT). Запустили два раза — данные задвоились. Отчет показывает выручку x2.

✅ Хороший сценарий (Идемпотентно): Скрипт написан так, что сколько его ни запускай, результат будет корректный.


Как это делается (Логика, которую нужно прописывать): Перед тем как загрузить данные за конкретную дату (например, за 15 января), мы сначала должны «почистить» место.

Алгоритм простой:
Сначала удаляем данные за эту дату:
DELETE FROM table WHERE date = '2026-01-15'

И только потом вставляем новые данные:
INSERT INTO table ...


Теперь, даже если вы перезапустите DAG 10 раз подряд, у вас не будет дублей. Скрипт сначала удалит старое, а потом запишет новое. В таблице всегда будут актуальные данные в единственном экземпляре.

Итог: 🤩

🍸 Сохраняйте пост, чтобы не путаться в терминах и грамотно писать код.
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Слышали об этих свойствах? Спрашивали у вас такое на собеседованиях? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

🚬 Менторство, консультации и подготовка к собесам — подробнее тут: mentor.dima-sqlit.ru


@dima_sqlit
  • 🔥 21
  • ❤‍🔥 6
More from @dima_sqlit
  1. Sep 22, 2026Что сейчас стоит изучать Аналитику — чтобы перейти в DS/ML ? Замечаю общий тренд на изучен…
  2. Sep 21, 2026🧠 Уровень абстракции — навык, который сэкономит вам годы учёбы: Когда я начинал изучать P…
  3. Sep 18, 2026🏦 Задача с собеса в Т-банк на SQL: вторая зарплата в отделе Условие: есть таблица сотрудн…
  4. Sep 16, 2026🏠 IT ипотека (Часть 3) — Как я сэкономил на ремонте: кэшбэк, промокоды и один неочевидный…
  5. Sep 7, 2026🍂 Осень — сезон найма: Каждый год одна и та же история — в сентябре рынок будто просыпает…
  6. Aug 24, 2026P-value простыми словами: Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли тепе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →