This media is not supported in your browser
VIEW IN TELEGRAM
Привет! В прошлых частях я рассказал про БАДы и про Менталку, на очереди спорт.
Прошлые части:
1) Про БАДы
2) Про Менталку
Начну с того, что я считаю, что все что мы делаем должно быть в кайф и должно иметь баланс, как в работе, как в отношениях, так и в спорте. По этой причине в плане спорта я нашел для себя упражнения, которые мне очень нравятся, которые можно выполнят почти везде и инвентарь для этого либо не нужен либо он минимальный, вот упражнения которые я очень люблю и стараюсь выполнять.
Мой топ 6 упражнений:
🔥Вот короткое видео с моими подтягиваниями вживую (смотрим прикрепленное видео).
Создал отдельный канал @dima_not_sqlit там будет life-контент:
Уже сейчас загрузил туда несколько видео где я занимаюсь спортом, заходим, ставим лайки, подписываемся, комментируем)
Итог:
Это база для меня, но мы все разные — ищите свои упражнения, чтобы шло в кайф. Пробуйте, экспериментируйте!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤🔥12🐳7
Друзья, всем привет. Сегодня поговорим про два термина, которые звучат страшно, но на деле — это база для любого, кто пишет скрипты, DAG'и или собирает витрины данных.
Аналитики сейчас часто не только строят графики, но и сами настраивают сбор данных (например, в Airflow). И тут важно понимать два принципа, чтобы не получить дубли или кривые цифры в отчетах.
Звучит сложно, а суть простая:
Если мы скармливаем функции одни и те же данные на вход, она всегда должна возвращать один и тот же результат.
Детерминированный пример в SQL:
LOWER('Dima') — всегда вернет 'dima'
Это детерминировано.
Не детерминированный пример в SQL:
• NOW() или RANDOM() — каждый раз вернут разное значение, даже если вы ничего не меняли.
Почему это важно нам? Когда вы пишете расчет метрики, вы должны быть уверены: если вы запустите расчет сегодня, завтра или через год на тех же самых исходных данных — значения должны получиться одинаковые.
Это про то, что количество запусков скрипта не должно ломать данные.
Представьте ситуацию: Вы написали скрипт для DAG'а, который считает продажи за вчерашний день и кладет их в итоговую таблицу. Если скрипт упал на середине или вы случайно запустили его два раза подряд — что произойдет?
❌ Плохой сценарий (Не идемпотентно): Скрипт просто берет и вставляет данные (INSERT). Запустили два раза — данные задвоились. Отчет показывает выручку x2.
✅ Хороший сценарий (Идемпотентно): Скрипт написан так, что сколько его ни запускай, результат будет корректный.
Как это делается (Логика, которую нужно прописывать): Перед тем как загрузить данные за конкретную дату (например, за 15 января), мы сначала должны «почистить» место.
Алгоритм простой:
Сначала удаляем данные за эту дату:
DELETE FROM table WHERE date = '2026-01-15'
И только потом вставляем новые данные:
INSERT INTO table ...
Теперь, даже если вы перезапустите DAG 10 раз подряд, у вас не будет дублей. Скрипт сначала удалит старое, а потом запишет новое. В таблице всегда будут актуальные данные в единственном экземпляре.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤🔥6 4 2
Друзья, всем привет. Многие, слышали понятие Асинхронность и думали: «Ну, это какая-то сложная идея, пожалуй обойду ее стороной»
На самом деле, вы используете принцип асинхронности каждый день в обычной жизни, даже не замечая этого. И понять его проще, чем кажется.
Представьте, что вы решили сварить суп. Вы поставили кастрюлю с водой на плиту. Вода закипит только через 10 минут.
Два варианта ваших действий:
❌ Синхронный подход (По очереди): Вы встаете напротив плиты и 10 минут пристально смотрите на воду. Вы не отвечаете на сообщения, не режете овощи, не листаете ленту. Вы полностью заблокированы ожиданием кипятка. Глупо? Глупо.
✅ Асинхронный подход (Эффективный): Пока вода греется, вы не ждете, а переключаетесь: чистите картошку, отвечаете в рабочем чате или читаете книгу. Как только вода закипела, вы возвращаетесь к кастрюле и закидываете мясо.
Суть простая: Вы не ждете завершения долгого процесса (нагрев воды), чтобы начать делать что-то другое. Это и есть асинхронность.
В программировании это работает точно так же. Представьте, что ваш скрипт или сайт — это кассир в магазине.
❌ Без асинхронности: Подходит покупатель и говорит: «Мне нужно узнать баланс карты» (это запрос в Базу Данных). База данных думает 5 секунд. В этом сценарии кассир просто замирает и ждет. Вся очередь за этим покупателем стоит. Сайт «висит», никто ничего не может купить, все злятся.
✅ С асинхронностью: Покупатель просит баланс. Кассир отправляет запрос в БД и, не дожидаясь ответа, сразу начинает обслуживать следующего человека! Он как бы говорит: «Я отправил запрос, пока ждем ответ — следующий!». Как только база данных "ответила", кассир на секунду возвращается к первому покупателю и говорит результат.
Один кассир успевает обслуживать сотни людей, просто эффективно используя время, пока система "думает".
🧠 Как применять это в жизни?
Этот принцип — отличный лайфхак для личной продуктивности. Мы часто теряем время в режимах пассивного ожидания (пока выгружается отчет, пока едет такси).
Как стать асинхронным:
• Запустили тяжелый SQL-запрос на 15 минут? Не сидите и не смотрите, как бежит полоска загрузки. Переключайтесь на мелкие задачи (ответить на почту, навести порядок в папках и т.д.).
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10🐳6🔥5 3
🐍 Бесплатно изучаем ООП на Python: нужно ли это аналитику?
Слышал много споров на тему: «Нужно ли аналитику знать ООП (Объектно-Ориентированное Программирование) или можно обойтись без него?».
У меня эта тема давно висела в списке «хочу изучить», но руки не доходили. Я начинал проходить много курсов, но они мне не заходили: либо материал подавали слишком сложно, либо формат объяснения был скучным и непонятным.
🤨 Что я нашел:
Совсем недавно наткнулся на автора на Stepik, у которого куча бесплатных курсов с огромным количеством положительных отзывов. Решил попробовать и не пожалел.
Курсы по ООП (там две части) мне сильно понравились. Да, безусловно, там покрывается не 100% всех тонкостей ООП, но для бесплатных материалов — это одни из лучших курсов. Для базового понимания парадигмы — то, что нужно.
🤩 Важный нюанс:
Если вы не знаете базового Python, вам будет сложновато. Поэтому новичкам рекомендую сначала пройти базу. Я всегда и всем советую курсы «Поколение Python» (для начинающих и продвинутых) — это золотой стандарт.
🚬 Мой лайфхак:
Я зарегистрировался сразу на все бесплатные курсы этого автора. Почему стоит сделать так же? В перспективе курсы могут обновиться, улучшиться и стать платными. А если вы уже записаны — доступ останется у вас бесплатно.
Ссылки на курсы:
• ООП Часть 1
• ООП Часть 2
• Все курсы автора
Итог:🤩
🍸 Сохраняйте пост, чтобы не потерять ссылки на курсы.
❓ А как у вас отношения с ООП? Изучали или считаете лишним? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru
@dima_sqlit
Слышал много споров на тему: «Нужно ли аналитику знать ООП (Объектно-Ориентированное Программирование) или можно обойтись без него?».
У меня эта тема давно висела в списке «хочу изучить», но руки не доходили. Я начинал проходить много курсов, но они мне не заходили: либо материал подавали слишком сложно, либо формат объяснения был скучным и непонятным.
Совсем недавно наткнулся на автора на Stepik, у которого куча бесплатных курсов с огромным количеством положительных отзывов. Решил попробовать и не пожалел.
Курсы по ООП (там две части) мне сильно понравились. Да, безусловно, там покрывается не 100% всех тонкостей ООП, но для бесплатных материалов — это одни из лучших курсов. Для базового понимания парадигмы — то, что нужно.
Если вы не знаете базового Python, вам будет сложновато. Поэтому новичкам рекомендую сначала пройти базу. Я всегда и всем советую курсы «Поколение Python» (для начинающих и продвинутых) — это золотой стандарт.
Я зарегистрировался сразу на все бесплатные курсы этого автора. Почему стоит сделать так же? В перспективе курсы могут обновиться, улучшиться и стать платными. А если вы уже записаны — доступ останется у вас бесплатно.
Ссылки на курсы:
• ООП Часть 1
• ООП Часть 2
• Все курсы автора
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤🔥6🐳3
Увидел в соседнем канале разбор задач с собеседования в Магнит OMNI и одна задачка была не разобрана и она показалось мне очень интересной — решил разобрать ее здесь, думаю многим будет полезно.
Условия задачи (это секция на языке Python):
• Представим что вы пришли в кинотеатр зал которого состоит только из одного ряда.
• Вы хотите сидеть максимально далеко от других зрителей
• Напишите функцию которая принимает на вход список мест в виде 0/1 и возвращает расстояние от оптимального места до ближайшего соседа
• Гарантируется что есть свободные места и хотя бы один зритель
Пример того, как должна работать итоговая функция:
func([1, 0, 1]) == 0
func([1, 0, 0, 0, 0, 1]) == 1
func([1, 0, 0, 0, 0, 1, 0, 0, 0, 0]) == 3
func([0, 0, 0, 0, 0, 1, 0, 0, 0, 1]) == 4
Разбор задачи по шагам:
Я сразу покажу вам решение, чтобы мы его разобрали.
def func(seats):
occupied = [i for i, seat in enumerate(seats) if seat == 1]
best = []
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
return max(best)
Давайте разбираться, что здесь происходит:
1) Сначала проходимся по списку и находим места, которые заняты:
occupied = [i for i, seat in enumerate(seats) if seat == 1]
То есть мы проверяем, если значение равно 1, то это место занято и мы сохраним индекс этого места в списке
2) Далее посмотрим все не занятые места и найдем для каждого из них минимальное расстояние до занятого места и вычтем единицу и будем добавлять эти расстояния в список:
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
3) Отлично, теперь остается взять наибольшее значение из списка и получить ответ:
return max(best)
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10🐳9 6🔥4
Сегодня поговорим про навык, который отделяет сеньора от джуна, а продуктивного человека — от того, кто вечно в прокрастинации. Речь про декомпозицию.
Если по-простому: декомпозиция — это умение разбивать одну большую и страшную «непонятную задачу» на мелкие, понятные и решаемые подзадачи.
Разберем на примере кода:
В Python декомпозиция начинается с функций. Вместо того чтобы писать простыню кода на 500 строк, мы выделяем логический блок, даем ему понятное имя и вызываем там, где нужно. Это база: мы избавляемся от дублей и делаем код читаемым.
Но что, если функций стало слишком много? Мы идем дальше и используем модули.
• Мы не забиваем один файл всем подряд.
• Раскидываем функции по отдельным файлам (модулям) по смыслу.
Например, функции для работы с БД — в файл
db_utils.py
Функции для парсинга — в файл
parser_tools.py
Это позволяет не перегружать контекст. Ты открываешь файл и видишь только то, что нужно сейчас.
Как это работает в жизни:
Тот же принцип применим к любой жизненной задаче. Хотите «стать аналитиком» или «запустить свой проект»? Это абстрактные идеи, к которым непонятно как подступиться. Мозг пугается объема и саботирует работу.
Что делать:
Разбивайте задачу до тех пор, пока каждый подпункт не станет вам предельно ясен.
Вопрос: а до какой степени делить?
Ответ: всё индивидуально. Главное — не переусердствовать (не нужно дробить задачу «налить кофе» на «встать», «подойти к столу», «взять чашку»). Делите ровно до того момента, пока вы не сможете сказать: «Окей, я точно знаю, как сделать этот шаг за 30-60 минут».
Итог:
Попробуйте прямо сейчас применить это к своей самой «висячей» задаче. Возьмите листок, ручку (или чистый файл в Notion, Obsidian) и начните превращать абстрактную идею в список конкретных, понятных действий.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🐳4❤🔥3
В посте про итоги года я писал, что сделал несколько интересных покупок, и новый телефон — одна из них. Рассказываю, как это вышло.
Все знают про систему СберСпасибо. Многие застали период, когда Мегамаркет раздавал жирные промокоды и сыпал гору бонусов за покупки. В то время я успел заказать несколько вещей и накопить порядка 30к бонусов.
Для понимания: ими можно оплатить до 99% стоимости товара. Но сейчас цены на площадке часто х2 от рынка, и тратить их там просто «жаба» душила.
Как всё закрутилось:
1) Пуш: Приходит пуш от Сбера — если не потрачу бонусы до конца месяца, обнулится около 8к. Я начал суетиться, составил список того, что давно хотел купить. Поковырялся пару дней и забил, решив, что время еще есть и идеи появятся.
2) Промокод: Через пару дней прилетает новый пуш: скидка 10к при покупке от 40к. Вот тут я загорелся.
3) Поиск: Найти что-то в рынке даже с промокодом было сложно — к многим товарам он просто не применялся. В какой-то момент решил посмотреть телефоны, так как свой как раз хотел обновить.
Какой телефон выбрал и почему именно Android:
Я пользуюсь Android(ами) всю свою жизнь, так сложилось, и мне принципиально было взять именно его:
• Уже привык к системе.
• Нет заморочек с установкой приложений (банков и т.д.).
• И т.п.
В итоге выбор пал на Samsung Galaxy S25 Ultra. С учетом промокода его цена была в рынке (сравнивал с известным магазином который заканчивается на «77») + я списал свои 30к бонусов. Вот так я и стал счастливым обладателем нового флагмана
Итог:
О покупке вообще не жалею: работает быстро, экран классный, камера — огонь. Кто знает, возможно, ворвусь в блогинг с Reels? Время покажет.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤🔥5 4
Многие слышали о системе контроля версий, она же — GIT. Для аналитики не нужно быть гуру консоли, достаточно понять базовые команды и принципы работы.
Часто GIT в аналитике используется как стандарт для хранения всех DAGов в Airflow и совместной работы над кодом. Рекомендую следующие материалы, которых будет более чем достаточно:
Видеокурсы (видеоматериалы):
1) GIT - Полный Курс Git и GitHub Для Начинающих [4 ЧАСА]
2) Курс по Git, который делает жизнь разработчика проще
3) Основы командной разработки git в Visual Studio Code [20 МИНУТ]
Курсы на Stepik:
1) Основы Git и GitHub
2) Основы Git и консольных команд
Итог:
Освоив эту базу, вы закроете 90% рабочих задач. Если возникнут специфические вопросы, их уже можно будет точечно решать при помощи любой LLM. GIT — это стандарт, и его знание сильно упрощает жизнь в команде.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤🔥8🐳6
Использование LLM скоро станет таким же базовым навыком, как SQL или Python — это мое предположение.
Я активно пользуюсь чат-версиями нейросетей, но всегда скептически относился к ассистентам, работающим прямо в IDE или через CLI (в терминале). Казалось, это только усложнит жизнь.
Но решил попробовать. Выбор пал на Antigravity от Google — там есть топовые модели, включая Opus 4.5 от Anthropic. И я изменил свое мнение.
В чем преимущество перед браузерными LLM? Всё просто: такие ассистенты позволяют:
1) Создавать файлы: Вы пишете промт, даете права, и ассистент сам создает файл с кодом.
2) Запускать и тестировать код: Нейронка может не только написать код, но и запустить его, протестировать и, если что-то пойдет не так, сама же переписать.
3) Работать с GIT: Ассистент умеет пушить код в репозиторий. (Кстати, про Git я недавно писал здесь).
4) Воспринимать контекст всего проекта: Скачали новый проект? Чтобы быстро разобраться, вам не нужно копировать код кусками в браузер. Просто задайте промт ассистенту, и он прочитает весь проект, ответит на вопросы и даст полное понимание архитектуры. Это реально чудо!
5) И масса других возможностей, которые экономят время.
Итог:
Чтобы понять всю мощь этих инструментов, нужно попробовать его самостоятельно. Antigravity с Claude Opus 4.5 — это не просто чат, это полноценный помощник, который ускоряет процесс разработки и анализа данных, берет на себя рутину и позволяет сосредоточиться на главном.
Также рекомендую и другие инструменты в сторону которых можно посмотреть (claude code, opencode, codex, cursor, gemini)
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12 5🐳4
Думаю, часто у многих возникает один и тот же вопрос: как правильно переносить код в Python, чтобы он был и рабочий, и читаемый?
Особенно когда у вас длинные вызовы функций, цепочки методов и SQL внутри скрипта.
База, которую нужно запомнить
1. Внутри
(), [], {} можно переносить строки без \.2. Закрывающую скобку лучше ставить на отдельной строке.
А теперь рассмотрим эти правила на примерах:
Пример правильного шаблона:
df = pd.read_excel(
"path",
sheet_name="Sheet1",
header=0,
)
Почему так удобно:
• быстро читается;
• легко добавлять новые аргументы;
Главное:
• все аргументы на одном уровне отступа;
• без "лесенки" из разного количества пробелов.
Вот так писать нельзя:
(
pd.read_excel("path")
text = input("Введите запрос")
)
Почему так писать нельзя: в круглых скобках Python ждет выражение, а не несколько инструкций с присваиванием.
Правильно:
df = pd.read_excel(
"path",
sheet_name="Sheet1",
)
text = input("Введите запрос: ")
1) Лучший вариант это через написания выражения в скобках: читается проще и меньше шансов сломать форматирование:
result = (
pd.read_excel(
"data.xlsx",
sheet_name="Sheet1",
)
.rename(columns={"old": "new"})
.query("amount > 0")
.groupby("category", as_index=False)
.agg(total=("amount", "sum"))
)
2) Можно через обратный слэш, но лучше как исключение:
df = pd.read_excel("dataframe.xlsx") \
.rename(columns={"name_column": "new_name_column"}) \
.describe()Минусы
\:• случайный пробел после
\ может сломать строку;• хуже поддерживать длинные выражения.
Итог:
Переносы это не "красота ради красоты", а скорость чтения и меньше ошибок.
Рабочее правило простое: перенос через скобки + 4 пробела (табуляция) + единый стиль во всем проекте.
\ или смешанный стиль? Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11 5❤🔥3
Большая часть SQL-работы это повторяющиеся действия.
Один из самых простых бустов продуктивности — это шаблоны в DBeaver.
Простой пример:
Часто пишем одно и то же:
select * from table_name limit 10;
Меняется только название таблицы.
Вместо ручного ввода создаем шаблон и вставляем его через
Ctrl + Alt + Space.
Как добавить такой шаблон:
• Переходим в окна (windows) → настройки (preferences) → редакторы (editors) → редактор SQL (SQL Editor) → Templates
• Там вы найдете шаблоны, которые уже идут по стандарту, по аналогии создаете свои запросы
• При этом есть возможность импортировать и экспортировать настройки (то есть вы можете быстро их восстановить в случае сбоя или поделиться своими шаблонами с коллегами, друзьями и т.д.)
• После того, как настроили шаблоны можно при написании кода использовать сочетание клавиш
Ctrl + Alt + Space
и выбрать ваш шаблон
Другие мои посты на тему ускорения вашей работы:
Итог:
Чтобы понять, насколько шаблоны в DBeaver ускоряют работу, достаточно один раз собрать свой набор шаблонов под повседневные задачи. Потом возвращаться к ручному набору уже не хочется.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥24❤🔥9 7
Если вы до сих пор не используете walrus operator (тот самый «морж»), то самое время это исправить. Если коротко - оператор
:=
Позволяет присвоить значение переменной прямо внутри выражения. То есть вам не нужно писать одну и ту же функцию или расчет дважды.
Что это дает на практике:
1️⃣ Меньше повторений и лишних вычислений.
2️⃣ Код становится компактнее (особенно в циклах и list comprehension).
3️⃣ Меньше нагрузка на CPU/API, если расчет «тяжелый».
Где это реально экономит время:
Без := (вызываем функцию 2 раза):
if get_user_score(user_id) > 80:
print(get_user_score(user_id))
С := (вызываем 1 раз, результат сохраняем в score на лету):
if (score := get_user_score(user_id)) > 80:
print(score)
Классика для тех, кто работает с API или агентами:
while (msg := get_next_message()):
handle_message(msg)
Пока сообщение приходит → обрабатываем. Как только вернулся None — цикл сам завершится.
Когда нужно отфильтровать список по результату функции и этот же результат оставить в списке:
squares_gt_10 = [sq for n in nums if (sq := n * n) > 10]
Здесь мы один раз посчитали n * n, проверили его и сразу записали в результат. Красота!
Итог:
Моржовый оператор — отличный инструмент, чтобы убрать дублирование кода и оптимизировать его там где это возможно.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Дима SQL-ит 🧑💻 (Аналитика данных, AI)
Проголосуйте за канал, чтобы он получил больше возможностей.
1🔥9 5 3 2 1 1
Представьте ситуацию: вы строите бизнесу график дневной выручки, а там — настоящая «кардиограмма». В выходные пик, в понедельник провал, в праздник аномальный выброс. Смотришь на эти качели и не понимаешь: мы глобально растем или летим в пропасть?
Данные часто содержат «шум». Чтобы увидеть реальный тренд, используется Скользящее среднее (Moving Average). Если коротко: мы берем каждую дату и считаем среднее значение не только за этот день, но и за N предыдущих. График выравнивается, и скрытое становится явным.
Разберем на практике: 👨💻
Допустим, нам нужно сгладить дневную выручку (revenue) за 7 дней. В SQL это элегантно решается через оконные функции:
SELECT
dt,
revenue,
AVG(revenue) OVER (
ORDER BY dt
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) as ma_7d
FROM daily_revenue;
Здесь магия кроется в ROWS BETWEEN 6 PRECEDING AND CURRENT ROW. Мы буквально говорим базе: «для каждой даты возьми текущую строку и 6 строк до неё, а потом усредни».
🛑 Главная ловушка — проблема «Холодного старта»:
Частый вопрос на собесах:
«А что будет с первой строкой в таблице? У неё же нет истории за 6 дней!»
SQL не упадет с ошибкой. Для 1-го дня он посчитает среднее только по 1 дню. Для 2-го — по 2-м. Окно будет постепенно «накапливаться», пока не достигнет 7 дней.
Как с этим жить: Если вам нужна идеальная математическая точность для аналитики, первые дни периода (пока окно не наполнилось) на итоговом графике просто отрезают, чтобы они не искажали картину.
🟢 Как выбрать правильный интервал (окно):
Выбор зависит от того, какие циклы есть в вашем бизнесе:
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥25🐳8🔥6 6 2
🚀 SQL-хак: как проверить любой запрос без таблиц и админских прав за 5 секунд
Представьте ситуацию: вы пишете сложный SQL-запрос. Возможно, там хитрый CASE WHEN или другой хитрый код. Но таблицы, с которыми вы работаете, огромные, тестовой среды нет, а админские права на создание временных таблиц — отсутствуют. Как проверить, что ваш кусок кода вообще работает, не дожидаясь часа, пока выполнится запрос на 100М строк? 😨
В Python мы просто открываем консоль, накидываем тестовые данные в список и проверяем функцию. А в SQL?
Есть решение:
SQL позволяет "создать" временную таблицу прямо внутри запроса, используя оператор VALUES. Это мгновенно, не требует никаких прав и не оставляет следов в базе.
Как это работает:👨💻
Допустим, нам нужно проверить, как поведет себя CASE WHEN с разными статусами.
Что здесь происходит:✅
• VALUES (...): Мы передаем список кортежей, где каждый кортеж — это одна строка нашей "виртуальной" таблицы.
• AS t(id, status): Мы даем этому набору данных имя t (как будто это таблица) и присваиваем имена колонкам: id и status.
• FROM (...) as t: Теперь к этому "набору данных" можно обращаться как к обычной таблице t, джойнить, применять оконные функции, фильтровать — все, что угодно!
Итог:🤩
Оператор VALUES — это как маленькая песочница для SQL-разработчика. Позволяет мгновенно проверить любую SQL-логику, изолировать ошибку и быть уверенным в своем коде, прежде чем запускать его на "боевых" данных. Must-have для каждого, кто ценит свое время!
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Знали об этом трюке? Или тоже мучались, создавая временные таблицы? Делитесь в комментариях! 👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Делаю резюме, которые превращаются в офферы: mentor.dima-sqlit.ru
@dima_sqlit
Представьте ситуацию: вы пишете сложный SQL-запрос. Возможно, там хитрый CASE WHEN или другой хитрый код. Но таблицы, с которыми вы работаете, огромные, тестовой среды нет, а админские права на создание временных таблиц — отсутствуют. Как проверить, что ваш кусок кода вообще работает, не дожидаясь часа, пока выполнится запрос на 100М строк? 😨
В Python мы просто открываем консоль, накидываем тестовые данные в список и проверяем функцию. А в SQL?
Есть решение:
оператор VALUES! 🤩
SQL позволяет "создать" временную таблицу прямо внутри запроса, используя оператор VALUES. Это мгновенно, не требует никаких прав и не оставляет следов в базе.
Как это работает:
Допустим, нам нужно проверить, как поведет себя CASE WHEN с разными статусами.
-- Создаем "виртуальную" таблицу прямо на лету!
SELECT
t.id,
t.status,
CASE
WHEN t.status = 'approved' THEN '✅ Одобрено'
WHEN t.status = 'pending' THEN '⏳ В ожидании'
ELSE '❌ Отклонено'
END as status_text
FROM (
VALUES
(1, 'approved'),
(2, 'pending'),
(3, 'rejected'),
(4, 'approved'),
(5, 'unknown')
) as t(id, status);
Что здесь происходит:
• VALUES (...): Мы передаем список кортежей, где каждый кортеж — это одна строка нашей "виртуальной" таблицы.
• AS t(id, status): Мы даем этому набору данных имя t (как будто это таблица) и присваиваем имена колонкам: id и status.
• FROM (...) as t: Теперь к этому "набору данных" можно обращаться как к обычной таблице t, джойнить, применять оконные функции, фильтровать — все, что угодно!
Итог:
Оператор VALUES — это как маленькая песочница для SQL-разработчика. Позволяет мгновенно проверить любую SQL-логику, изолировать ошибку и быть уверенным в своем коде, прежде чем запускать его на "боевых" данных. Must-have для каждого, кто ценит свое время!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29 10🐳6❤🔥2
🎙 Handy: как превращать голос в текст и не терять гениальные идеи:
Бывает так: сидишь, пилишь сложную задачу или пишешь код, и тут в голову пришла гениальная идея по другому проекту или пришел инсайт, как пофиксить старый баг.
Обычно в этот момент мы либо бросаем текущую задачу и лезем записывать (теряя фокус), либо надеемся на память (и благополучно забываем всё через 5 минут). Печатать текст руками — это долго и часто лень, особенно когда ты «в потоке».
Решение: Handy. Это бесплатная утилита (работает она на основе Whisper от OpenAI) которая позволяет мгновенно превратить голос в текст, не отрываясь от работы. 🚀
👨💻 В чем киллер-фича для продуктивности:
1️⃣ Мгновенный ввод: Зажимаем Ctrl + Пробел (дефолтный хоткей в Handy), наговорили мысль, как только закончили отжимаем Ctrl + Пробел и Handy транскрибирует голос и сразу вставляет текст в активное поле (IDE, мессенджер, заметки).
2️⃣ Сохранение контекста: Вы тратите 5 секунд на то, чтобы «выгрузить» идею из головы, и тут же продолжаешь работать над основной задачей. Время на написание текста не тратится вообще
3️⃣ Программа всегда работает в фоне и не мешает вашим основным задачам.
🤖 Идея для мощного воркфлоу: Суммаризация через LLM
Я использую Handy, чтобы быстро «сливать» поток сознания в одну заметку в течение дня. А вечером делаю следующее:
Собираю все записанные за день мысли в один блок.
• Закидываю их в нейронку (ChatGPT/Claude).
• Прошу: «Суммаризируй эти идеи и преврати их в список задач или структуру для постов».
• Это позволяет освободить голову для работы прямо сейчас, зная, что ни одна деталь не потеряется и будет обработана позже.
Где забрать Handy:🔥
Рекомендую попробовать всем, кто ценит свое время и хочет ускорить процесс формализации идей.
• 📂 Исходники на GitHub — если хотите посмотреть, как всё устроено внутри.
• 🌐 Официальный сайт Handy — здесь можно изучить подробности и скачать программу.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А вы пробовали накидывать идеи голосом, а потом «скармливать» их нейронке для структуры? Делитесь опытом в комментариях! 👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Провожу консультации, подробности по ссылке: mentor.dima-sqlit.ru
@dima_sqlit
Бывает так: сидишь, пилишь сложную задачу или пишешь код, и тут в голову пришла гениальная идея по другому проекту или пришел инсайт, как пофиксить старый баг.
Обычно в этот момент мы либо бросаем текущую задачу и лезем записывать (теряя фокус), либо надеемся на память (и благополучно забываем всё через 5 минут). Печатать текст руками — это долго и часто лень, особенно когда ты «в потоке».
Решение: Handy. Это бесплатная утилита (работает она на основе Whisper от OpenAI) которая позволяет мгновенно превратить голос в текст, не отрываясь от работы. 🚀
👨💻 В чем киллер-фича для продуктивности:
🤖 Идея для мощного воркфлоу: Суммаризация через LLM
Я использую Handy, чтобы быстро «сливать» поток сознания в одну заметку в течение дня. А вечером делаю следующее:
Собираю все записанные за день мысли в один блок.
• Закидываю их в нейронку (ChatGPT/Claude).
• Прошу: «Суммаризируй эти идеи и преврати их в список задач или структуру для постов».
• Это позволяет освободить голову для работы прямо сейчас, зная, что ни одна деталь не потеряется и будет обработана позже.
Где забрать Handy:
Рекомендую попробовать всем, кто ценит свое время и хочет ускорить процесс формализации идей.
• 📂 Исходники на GitHub — если хотите посмотреть, как всё устроено внутри.
• 🌐 Официальный сайт Handy — здесь можно изучить подробности и скачать программу.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤🔥9🐳4
В мире дата-инжиниринга Airflow — это стандарт. Но часто бывает так: вам нужно просто запускать один SQL-скрипт или Python-парсер раз в день. Вы идете к дата-инженерам, а там: «Создай тикет, подожди аппрува в GitLab, пропиши DAG, дождись деплоя...».
Иногда проще и быстрее вспомнить про дедовский, но рабочий метод — Crontab.
Почему все топят за Airflow?
Airflow — это мощный оркестратор, и он крут, когда:
• У вас сложные зависимости (скрипт Б должен упасть, если не отработал скрипт А).
• Нужен красивый UI, чтобы следить за статусами.
• Нужна встроенная отчетность и легкий перезапуск.
• И так далее.....
Но если ваша задача — «просто запусти этот скрипт в 8 утра», Airflow может стать лишним бюрократическим барьером.
Crontab: быстро и просто
Crontab — это встроенный в Linux планировщик задач. Его главный плюс: автономия. Вам не нужно ждать деплоя или одобрения всей команды инженеров.
Как это работает:
Вы заходите на сервер и одной строчкой в терминале прописываете расписание. Например:
0 8 * * * python3 /path/to/your_script.py
(Запуск каждый день в 08:00)
«А как же логи и алерты?» — спросите вы. ✅
• Да, у Cron нет UI, но это решается парой строк кода:
• Логирование: Просто дописываем в скрипт базовый logging или сохраняем вывод в .txt файл.
• Алерты: Пишем простенькую функцию, которая в блоке except кидает сообщение об ошибке вам в Telegram-бота (как написать просто бота для Telegram смотрите в моем посте)
Итог:
Airflow придуман не просто так, и для больших систем он незаменим. Но если вам нужно быстро и просто запустить автоматизацию здесь и сейчас, не бойтесь использовать Crontab.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10❤🔥3🐳1 1
Сейчас такое время, что не использовать нейронки — это значит быть на несколько шагов назад. Все вокруг говорят про платные подписки, Cursor, Claude, Gemini или ChatGPT Plus, но не все готовы выкладывать по $20 в месяц просто «на попробовать».
Хорошая новость в том, что сейчас можно вайбкодить абсолютно бесплатно. Например, есть топовая модель от Китайцев — Qwen3-coder-next. Она заточена именно под кодинг и SQL, и по тестам выдает результаты не хуже топовых платных моделек.
Почему это нужно изучать прямо сейчас:
🔹 Порог входа: Можно бесплатно протестировать технологию и понять, «твоё» это или нет.
🔹 Рынок: Навык работы с AI становится актуальным (можно посмотреть тренд иностранных компаний, да и на нашем рынке бигтехи дают своим сотрудникам возможность пользоваться нейронками).
🔹 Скорость: То, что раньше гуглилось и делалось 30 минут, теперь пишется за 30 секунд.
Как всё это пощупать самому?
Если ты хочешь разобраться, как это работает, как всё настроить и не платить ни копейки — я нашёл отличное видео. Там по полочкам раскладывают, как поставить модель, как её тестировать и на что она реально способна в боевых условиях.
Итог:
Не обязательно сразу покупать дорогие подписки. Сейчас идеальный момент, чтобы запрыгнуть в тему нейросетей через мощные бесплатные инструменты. Попробуйте, посмотрите видео.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤🔥7🐳5
🏠 IT-ипотека и личные финансы: как управлять деньгами, когда вписался в крупную покупку:
Не так давно я взял IT-ипотеку (да-да, об этом будет отдельная серия постов). В такие моменты мозг невольно переключается в режим усиленного контроля: начинаешь внимательнее следить за тратами и активнее искать новые источники дохода. 💸
Круто, когда есть у кого перенять опыт. Для меня таким опытом является канал Наташи — она раскладывает по полочкам не только IT-будни, но и финансовую грамотность. Если хотите привести свои счета в порядок, рекомендую начать с этих постов:
Топ материалов по финансам:🔵
1️⃣ Как следить за своими доходами — база для тех, кто хочет понимать, куда уходят деньги.
2️⃣ Сколько можно заработать на вкладах — реальные цифры и личный опыт.
3️⃣ Самые простые источники доп. дохода — как заставить ресурсы работать на вас.
Кстати, Наташа тоже недавно прошла через квест с IT-ипотекой. Можете почитать её историю, пока я готовлю свою:
📌 Айти-ипотека: Часть 1
📌 Айти-ипотека: Часть 2
Итог:🤩
Управление финансами — это такой же хард-скилл, как SQL или Python. Чем раньше начнете его прокачивать, тем спокойнее будете чувствовать себя при любом курсе валют или ипотечной ставке.
@dima_sqlit
Не так давно я взял IT-ипотеку (да-да, об этом будет отдельная серия постов). В такие моменты мозг невольно переключается в режим усиленного контроля: начинаешь внимательнее следить за тратами и активнее искать новые источники дохода. 💸
Круто, когда есть у кого перенять опыт. Для меня таким опытом является канал Наташи — она раскладывает по полочкам не только IT-будни, но и финансовую грамотность. Если хотите привести свои счета в порядок, рекомендую начать с этих постов:
Топ материалов по финансам:
Кстати, Наташа тоже недавно прошла через квест с IT-ипотекой. Можете почитать её историю, пока я готовлю свою:
📌 Айти-ипотека: Часть 1
📌 Айти-ипотека: Часть 2
Итог:
Управление финансами — это такой же хард-скилл, как SQL или Python. Чем раньше начнете его прокачивать, тем спокойнее будете чувствовать себя при любом курсе валют или ипотечной ставке.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍 Рабочий кейс: как декораторы спасают мои выгрузки данных:
У нас на проекте данные постоянно перекладываются из одной СУБД в другую почти в режиме реального времени и если попасть на этот момент во время выгрузки, то выпадает ошибка и приходится перезапускать скрипт, а что если нужно выгрузить большой объема данных? Сидеть, смотреть и ручками все контролировать не наш вариант👨💻
Чтобы не обкладывать каждую функцию громоздкими
Посмотрим на максимально простой пример:
Что здесь происходит на самом деле?
Многие думают, что
Ваша функция
Давайте так:💯
Если под этим постом наберем 50 реакций, я выложу в комментарии свою реальную рабочую версию декоратора с этого кейса. Там настроено количество попыток, время ожидания между ними.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А какой самый непонятный момент в декораторах для вас? Попробуем разобрать в комментариях!👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru
@dima_sqlit
У нас на проекте данные постоянно перекладываются из одной СУБД в другую почти в режиме реального времени и если попасть на этот момент во время выгрузки, то выпадает ошибка и приходится перезапускать скрипт, а что если нужно выгрузить большой объема данных? Сидеть, смотреть и ручками все контролировать не наш вариант
Чтобы не обкладывать каждую функцию громоздкими
try-except и не перезапускать всё руками, я использую декораторы. Давайте разберемся, что такое декораторы.Посмотрим на максимально простой пример:
def retry(func):
def wrapper(*args, **kwargs):
print("--- Логика ДО запуска (например, проверка связи) ---")
result = func(*args, **kwargs) # Запуск вашей функции
print("--- Логика ПОСЛЕ запуска ---")
return result
return wrapper
@retry
def get_data(month):
print(f"Выгружаем данные за {month}...")
get_data("Январь")
Что здесь происходит на самом деле?
Многие думают, что
@ — это какая-то магия. На самом деле, когда вы пишете @retry над функцией, Python делает за вас вот такую подстановку:get_data = retry(get_data)Ваша функция
get_data буквально залетает в retry как аргумент. А внутри wrapper мы уже можем докрутить что угодно: добавить цикл for для повторных попыток или поставить паузу time.sleep, чтобы подождать, пока данные «доедут» до хранилища.Давайте так:
Если под этим постом наберем 50 реакций, я выложу в комментарии свою реальную рабочую версию декоратора с этого кейса. Там настроено количество попыток, время ожидания между ними.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥30🔥16 15🐳7 2 1
🔥 Claude Opus 4.6 (бесплатно) — а точнее MiMo-V2-Pro:
Да, вы не ослышались — бесплатный аналог уровня Claude Sonnet и Claude Opus. И я сам в это не верил, пока не попробовал.
Сейчас расскажу, как получить доступ к MiMo-V2-Pro абсолютно бесплатно и без ограничений на 7 дней.
Что такое MiMo-V2-Pro? 🤔
Это языковая модель от Xiaomi, которая по качеству ответов реально тянет на уровень Claude Sonnet и Claude Opus. Я активно тестирую её последние несколько дней и вам скажу честно — уровень вышка.
Сравнивал на своих задачах:
• Генерация SQL-запросов
• Объяснение кода
• Написание Python-скриптов
• Анализ данных
И самое главное — это бесплатно и безлимитно на 7 дней.
Как подключить? Всего 3 шага: ⚡️
1️⃣ Скачайте VS Code (если ещё нет):
https://code.visualstudio.com/
2️⃣ Установите расширение Kilo Code:
Откройте VS Code → Extensions (Ctrl+Shift+X) → найдите "Kilo Code" → Install
3️⃣ Выберите модель MiMo-V2-Pro:
После установки расширения в настройках выберите модель MiMo-V2-Pro — и всё, можно работать.
Почему стоит попробовать? 🔥
• Абсолютный безлимит на 7 дней — никаких ограничений по запросам
• Уровень Claude Sonnet/Opus — проверено на практике
• Работает прямо в VS Code — не нужно переключаться между окнами
• Бесплатно — ни копейки не платите
Я сам сейчас активно тестирую MiMo-V2-Pro для своих задач по аналитике и вам советую попробовать. Успевайте — неизвестно, сколько будет действовать бесплатный период.
Давайте так: 💯
Если под этим постом наберем 60 реакций, я выложу пост про то, как бесплатно использовать Nano Banana Pro — тоже топовая модель, для генерации изображений.
Итог:🤩
Если вы аналитик, разработчик или просто пишете код — попробуйте MiMo-V2-Pro через Kilo Code. Это реальная альтернатива платным моделям, которая работает не хуже.
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Пробовали MiMo-V2-Pro? Какие впечатления? Делитесь в комментариях!👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru
@dima_sqlit
Да, вы не ослышались — бесплатный аналог уровня Claude Sonnet и Claude Opus. И я сам в это не верил, пока не попробовал.
Сейчас расскажу, как получить доступ к MiMo-V2-Pro абсолютно бесплатно и без ограничений на 7 дней.
Что такое MiMo-V2-Pro? 🤔
Это языковая модель от Xiaomi, которая по качеству ответов реально тянет на уровень Claude Sonnet и Claude Opus. Я активно тестирую её последние несколько дней и вам скажу честно — уровень вышка.
Сравнивал на своих задачах:
• Генерация SQL-запросов
• Объяснение кода
• Написание Python-скриптов
• Анализ данных
И самое главное — это бесплатно и безлимитно на 7 дней.
Как подключить? Всего 3 шага: ⚡️
https://code.visualstudio.com/
Откройте VS Code → Extensions (Ctrl+Shift+X) → найдите "Kilo Code" → Install
После установки расширения в настройках выберите модель MiMo-V2-Pro — и всё, можно работать.
Почему стоит попробовать? 🔥
• Абсолютный безлимит на 7 дней — никаких ограничений по запросам
• Уровень Claude Sonnet/Opus — проверено на практике
• Работает прямо в VS Code — не нужно переключаться между окнами
• Бесплатно — ни копейки не платите
Я сам сейчас активно тестирую MiMo-V2-Pro для своих задач по аналитике и вам советую попробовать. Успевайте — неизвестно, сколько будет действовать бесплатный период.
Давайте так: 💯
Если под этим постом наберем 60 реакций, я выложу пост про то, как бесплатно использовать Nano Banana Pro — тоже топовая модель, для генерации изображений.
Итог:
Если вы аналитик, разработчик или просто пишете код — попробуйте MiMo-V2-Pro через Kilo Code. Это реальная альтернатива платным моделям, которая работает не хуже.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥17 8🔥3 3 2 2🐳1 1 1
Считаем «окна» неактивности пользователя в SQL. Часть 1
На интервью в крупные финтех-компании (Тинькофф, Яндекс, Авито) часто дают эту задачу, чтобы проверить, умеете ли вы работать с временными рядами и оконными функциями.
Суть задачи:
Есть таблица логов
user_actions с колонками user_id и action_timestamp. Нужно найти все случаи, когда пользователь «пропадал» более чем на 30 минут между двумя действиями.Как это решается «на пальцах»?
Нам нужно сравнить время текущего действия со временем ПРЕДЫДУЩЕГО. В SQL для этого есть идеальный инструмент — оконная функция
LAG. Представьте, что вы стоите в очереди и спрашиваете человека сзади: «А когда зашел тот, кто был перед тобой?».Простейший пример решения:
WITH time_diffs AS (
SELECT
user_id,
action_timestamp,
-- Достаем время предыдущего действия для этого же юзера
LAG(action_timestamp) OVER(PARTITION BY user_id ORDER BY action_timestamp) as prev_ts
FROM user_actions
)
SELECT
user_id,
prev_ts as gap_start,
action_timestamp as gap_end,
-- Считаем разницу (в разных СУБД синтаксис даты чуть разный)
(action_timestamp - prev_ts) as duration
FROM time_diffs
WHERE (action_timestamp - prev_ts) > interval '30 minutes'
Почему здесь нужны оконные функции?
LAG понимал, какое действие было действительно предыдущим, данные должны быть отсортированы по времени.JOIN таблицы самой на себя, что на миллионах строк просто «повесит» базу.Давайте так: 👇
Эта задача — только верхушка айсберга. Если мы наберем под этим постом 50 реакций ❤️, я выложу вторую часть решения: как не просто найти разрывы, а сгруппировать их в полноценные сессии неактивности (задача Gaps and Islands в переводе "Пробелы и Острова").
Итог:
Оконные функции — это маст-хэв для аналитика. Научитесь пользоваться
LAG и LEAD, и 80% задач на временные интервалы будут решаться за 5 минут.@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥50🔥20🐳5