Дима SQL-ит 🧑‍💻 (Аналитика данных, AI)
2.1K subscribers
51 photos
18 videos
110 links
👨‍💻 Блог аналитика данных в IT

📩 По менторству и сотрудничеству: @catdem
Download Telegram
🖥 SQL-шаблоны в DBeaver: как ускорить рутину аналитика за 5 минут

Большая часть SQL-работы это повторяющиеся действия.
Один из самых простых бустов продуктивности — это шаблоны в DBeaver.

Простой пример: 🟢

Часто пишем одно и то же:
select * from table_name limit 10;


Меняется только название таблицы.
Вместо ручного ввода создаем шаблон и вставляем его через
Ctrl + Alt + Space.


Как добавить такой шаблон: 🟢

• Переходим в окна (windows) → настройки (preferences) → редакторы (editors) → редактор SQL (SQL Editor) → Templates
• Там вы найдете шаблоны, которые уже идут по стандарту, по аналогии создаете свои запросы
• При этом есть возможность импортировать и экспортировать настройки (то есть вы можете быстро их восстановить в случае сбоя или поделиться своими шаблонами с коллегами, друзьями и т.д.)
• После того, как настроили шаблоны можно при написании кода использовать сочетание клавиш
Ctrl + Alt + Space

и выбрать ваш шаблон

Другие мои посты на тему ускорения вашей работы:
🟢

1️⃣Повышаем продуктивность в Jupyter Notebook - мой личный топ горячих клавиш
2️⃣ Ускоряем написание кода - горячие клавиши, которые работают в DBeaver, Jupyter Notebook, VS Code и других IDE

Итог: 🤩

Чтобы понять, насколько шаблоны в DBeaver ускоряют работу, достаточно один раз собрать свой набор шаблонов под повседневные задачи. Потом возвращаться к ручному набору уже не хочется.


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

🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥24❤‍🔥97
😨 Моржовый оператор := в Python: как писать код короче и быстрее

Если вы до сих пор не используете 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 — цикл сам завершится.

🛑 В list comprehension:

Когда нужно отфильтровать список по результату функции и этот же результат оставить в списке:
squares_gt_10 = [sq for n in nums if (sq := n * n) > 10]

Здесь мы один раз посчитали n * n, проверили его и сразу записали в результат. Красота!

Итог: 🤩

Моржовый оператор — отличный инструмент, чтобы убрать дублирование кода и оптимизировать его там где это возможно.

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

🚬 Делаю резюме, которые превращаются в офферы: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥953211
📈 Скользящее среднее (Moving Average): как увидеть реальный тренд сквозь шум данных

Представьте ситуацию: вы строите бизнесу график дневной выручки, а там — настоящая «кардиограмма». В выходные пик, в понедельник провал, в праздник аномальный выброс. Смотришь на эти качели и не понимаешь: мы глобально растем или летим в пропасть?

Данные часто содержат «шум». Чтобы увидеть реальный тренд, используется Скользящее среднее (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 дней.
Как с этим жить: Если вам нужна идеальная математическая точность для аналитики, первые дни периода (пока окно не наполнилось) на итоговом графике просто отрезают, чтобы они не искажали картину.

🟢 Как выбрать правильный интервал (окно):

Выбор зависит от того, какие циклы есть в вашем бизнесе:
1️⃣ 7 дней (МА-7) — Золотой стандарт для ритейла и e-commerce. Такое окно захватывает ровно одни выходные и пять будней. Недельная сезонность полностью исчезает с графика.
2️⃣ 28-30 дней — Отлично показывает глобальный тренд месяца. Помогает сгладить эффект от разовых промо-акций или зарплатных дней у клиентов.
3️⃣ 3 дня — Используют для метрик, где критически важно быстро заметить падение (например, конверсия в оплату после релиза новой фичи), но нужно сгладить совсем уж случайные колебания.

Итог: 🤩

🍸 Сохраняйте пост, чтобы информация была всегда под рукой.
А вы использовали скользящее среднее в своих задачах? Какие интервалы обычно берете? Пишите в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥25🐳8🔥662
🚀 SQL-хак: как проверить любой запрос без таблиц и админских прав за 5 секунд

Представьте ситуацию: вы пишете сложный 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 для каждого, кто ценит свое время!

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

🚬 Делаю резюме, которые превращаются в офферы: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2910🐳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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤‍🔥9🐳4
Airflow против Crontab: когда не стоит усложнять и проще использовать Crontab?

В мире дата-инжиниринга 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.

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

🚬 Провожу консультации и готовлю к собесам: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥10❤‍🔥3🐳11
👨‍💻 Бесплатный вайбкодинг с Qwen3-coder-next:

Сейчас такое время, что не использовать нейронки — это значит быть на несколько шагов назад. Все вокруг говорят про платные подписки, Cursor, Claude, Gemini или ChatGPT Plus, но не все готовы выкладывать по $20 в месяц просто «на попробовать».

Хорошая новость в том, что сейчас можно вайбкодить абсолютно бесплатно. Например, есть топовая модель от Китайцев — Qwen3-coder-next. Она заточена именно под кодинг и SQL, и по тестам выдает результаты не хуже топовых платных моделек.

Почему это нужно изучать прямо сейчас: 🔵
🔹 Порог входа: Можно бесплатно протестировать технологию и понять, «твоё» это или нет.
🔹 Рынок: Навык работы с AI становится актуальным (можно посмотреть тренд иностранных компаний, да и на нашем рынке бигтехи дают своим сотрудникам возможность пользоваться нейронками).
🔹 Скорость: То, что раньше гуглилось и делалось 30 минут, теперь пишется за 30 секунд.

Как всё это пощупать самому? 🔵
Если ты хочешь разобраться, как это работает, как всё настроить и не платить ни копейки — я нашёл отличное видео. Там по полочкам раскладывают, как поставить модель, как её тестировать и на что она реально способна в боевых условиях.

🛑 Видео: Как запустить Qwen3-coder-next

Итог: 🤩

Не обязательно сразу покупать дорогие подписки. Сейчас идеальный момент, чтобы запрыгнуть в тему нейросетей через мощные бесплатные инструменты. Попробуйте, посмотрите видео.

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

🚬 Провожу платные консультации: mentor.dima-sqlit.ru


@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
Please open Telegram to view this post
VIEW IN TELEGRAM
10🐳95
🐍 Рабочий кейс: как декораторы спасают мои выгрузки данных:

У нас на проекте данные постоянно перекладываются из одной СУБД в другую почти в режиме реального времени и если попасть на этот момент во время выгрузки, то выпадает ошибка и приходится перезапускать скрипт, а что если нужно выгрузить большой объема данных? Сидеть, смотреть и ручками все контролировать не наш вариант 👨‍💻

Чтобы не обкладывать каждую функцию громоздкими 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 реакций, я выложу в комментарии свою реальную рабочую версию декоратора с этого кейса. Там настроено количество попыток, время ожидания между ними.

Итог: 🤩


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


🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥30🔥1615🐳721
🔥 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
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥178🔥3322🐳111
🏦 Разбор задачи с собеседования в Тинькофф (Т-банк).
Считаем «окна» неактивности пользователя в 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'


Почему здесь нужны оконные функции?
1️⃣ PARTITION BY user_id: Мы не хотим сравнивать время Васи со временем Пети. Окно «запирает» расчеты внутри конкретного пользователя.
2️⃣ ORDER BY: Чтобы LAG понимал, какое действие было действительно предыдущим, данные должны быть отсортированы по времени.
3️⃣ Чистота: Без оконных функций пришлось бы делать тяжелый JOIN таблицы самой на себя, что на миллионах строк просто «повесит» базу.

Давайте так: 👇
Эта задача — только верхушка айсберга. Если мы наберем под этим постом 50 реакций ❤️, я выложу вторую часть решения: как не просто найти разрывы, а сгруппировать их в полноценные сессии неактивности (задача Gaps and Islands в переводе "Пробелы и Острова").

Итог: 🤩

Оконные функции — это маст-хэв для аналитика. Научитесь пользоваться LAG и LEAD, и 80% задач на временные интервалы будут решаться за 5 минут.

А вам попадались задачи на интервалы на собеседованиях? Что было самым сложным? Пишите в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.


🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥50🔥20🐳5
📊 Дашборды, за которые не стыдно

Нашёл для себя крутой канал про BI и дашборды — «Пирожки и бары»
Ведёт Маша, тимлид BI-аналитиков в Авито 😎

Здесь реально полезно и при этом не занудно. Например, недавно там была прожарка графиков для королевы Елизаветы II — да, вы не ослышались 🍟

Ещё рекомендую глянуть:

🛑Чек-лист хорошего дашборда
🛑5 вопросов для сбора требований к дашборду
🛑Как выбесить аналитика: вредные советы для заказчиков
🛑Подборка ресурсов для изучения SQL
🛑Матрица компетенций BI-разработчика
🛑Реальная история: неудачный карьерный старт

Подписывайтесь, чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳6❤‍🔥55
🏦 Разбор задачи с собеседования в Тинькофф (Т-банк).
Формируем сессии для пользователей по указанному интервалу времени в SQL. Часть 2


В предыдущем посте мы просто нашли разрывы неактивности. Сейчас рассмотрим продолжение «Сгруппируй все действия в сессии активности».

Давайте разберем это на примере с двумя пользователями (Вася и Петя) по шагам.

Исходные данные (6 строк логов):

| user_id | action_time | Комментарий 
|---------|-------------|-------------
| Вася | 10:00 | Старт Васи (Сессия 1)
| Вася | 10:15 | Вася активен
| Вася | 11:30 | Разрыв! (75 мин) → Старт Васи (Сессия 2)
| Вася | 11:40 | Вася активен
| Петя | 12:00 | Старт Пети (Сессия 1)
| Петя | 12:10 | Петя активен


Шаг 1. Находим моменты «разрыва»:

С помощью LAG мы смотрим разницу с предыдущим временем внутри каждого юзера. Если разница > 30 минут — ставим флаг 1.
| user_id | action_time | Diff   | is_new_session        |
|---------|-------------|--------|------------------------|
| Вася | 10:00 | - | 0 |
| Вася | 10:15 | 15 мин | 0 |
| Вася | 11:30 | 75 мин | 1 (Новый остров) |
| Вася | 11:40 | 10 мин | 0 |
| Петя | 12:00 | - | 0 (Сброс счетчика) |
| Петя | 12:10 | 10 мин | 0 |


WITH step1 AS (
SELECT
user_id,
action_timestamp,
CASE
WHEN action_timestamp - LAG(action_timestamp) OVER(PARTITION BY user_id ORDER BY action_timestamp) > interval '30 minutes'
THEN 1 ELSE 0
END as is_new_session
FROM user_actions
),


Шаг 2. Хитрый трюк с кумулятивной суммой:

Нам нужно дать строчкам одной сессии общий ID. Мы суммируем наши флаги сверху вниз. Благодаря PARTITION BY user_id сумма сбрасывается для нового юзера.
| user_id | action_time | is_new_session | session_id (Сумма)        |
|---------|-------------|----------------|---------------------------|
| Вася | 10:00 | 0 | 0 |
| Вася | 10:15 | 0 | 0 |
| Вася | 11:30 | 1 | 1 (Сумма стала 1) |
| Вася | 11:40 | 0 | 1 |
| Петя | 12:00 | 0 | 0 (Счетчик обнулился!) |
| Петя | 12:10 | 0 | 0 |


step2 AS (
SELECT
*,
SUM(is_new_session) OVER(PARTITION BY user_id ORDER BY action_timestamp) as session_id
FROM step1
)



Шаг 3. Финальная агрегация (и как сделать ID уникальным):

Теперь всё просто: мы говорим базе «Сгруппируй все действия с одинаковым user_id и session_id в одну строку». Чтобы ID был глобально уникальным, мы склеиваем их.
| user_id | unique_session_id | start  | end    | count |
|---------|-------------------|--------|--------|-------|
| Вася | Вася_0 | 10:00 | 10:15 | 2 |
| Вася | Вася_1 | 11:30 | 11:40 | 2 |
| Петя | Петя_0 | 12:00 | 12:10 | 2 |


SELECT 
user_id,
-- Генерируем уникальный ID для сессии
user_id || '_' || session_id as unique_session_id,
MIN(action_timestamp) as session_start,
MAX(action_timestamp) as session_end,
COUNT(*) as actions_count
FROM step2
GROUP BY user_id, session_id


Давайте так: 👇

Вы накидываете интересные вам задачи в комментарии и я постараюсь разбирать некоторые из них в следующих постах. Ну и давайте наберем под этим постом 50 реакций ❤️ и я чуть позже приложу в комментариях этот пост в формате markdown для вашего удобства.

Итог: 🤩

Сохраняйте этот пример, чтобы не запутаться в логике!

Вам, попадалась такая задача на собеседованиях? Пишите в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.


🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2410🐳9🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
👨‍💻 Кодинг — всё? Андрей Карпатый (OpenAI) перестал писать код. А ты?

«Мои навыки написания кода атрофируются» —цитата Андрея Карпатого.
Того самого, кто строил OpenAI и автопилот в Tesla.

Если даже такие гиганты признают, что перестают писать код «руками», то к чему готовиться нам? Просто нажимать кнопку «Сделай красиво» и надеяться на чудо? Скажу честно: я и сам всё меньше «пишу» и всё больше «проверяю». Дирижирую нейронками.

Казалось бы, вот оно — счастье: машина работает за тебя. Но именно за этой иллюзорной легкостью и зарыта главная западня, о которой молчат адепты «нейросети заменят всех»:

1️⃣ ИИ — это «черный ящик», который с определенной вероятностью выплевывает результат. Это типичный «кот в мешке»: нейронка не думает, она просто считает статистику и подбирает наиболее вероятные слова и куски кода. Забыл фильтр is_test или сделал кривой JOIN по не уникальному ключу — и твои продажи в отчете улетели в стратосферу. Выглядит эффектно, пока не придет реальный аудит и тебя не выставят виноватым за мусор в данных.
2️⃣ Ты не можешь проверить то, чего не понимаешь. Без знания базы ты превращаешься в «прокладку» между нейронкой и базой данных. Ты не управляешь процессом — процесс управляет тобой.
3️⃣ База — это твой страховой полис. Порядок входа в профессию только один: сначала база и «руки», понимание каждой строчки, и только потом — использование ИИ-агентов. По-другому это не работает. Без фундамента любая сложная задача превратит твой проект в тыкву при первой же ошибке нейросети.

Итог: 🤩

Есть одна жесткая правда: ИИ делает умных умнее, а глупых — ещё глупее.
Если у вас есть база, нейронка становится вашим множителем. Она дает вам суперсилу и высвобождает время для реально сложных задач. Но если ваши знания в коде — это «ноль», то результат умножения на ИИ всё равно останется нулевым.

Учите базу сейчас, чтобы завтра быть тем самым «дирижёром», который ведет проект

А вы уже ловили ИИ на жестких косяках в коде? Или доверяете ему на все сто? Поделитесь историями в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.


🚬 Вопросы, обучение, консультации: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥167🐳6🔥1
💯 База знаний dima-sqlit.ru

Пятница — время релизов! Пока все уходят на чилл, я допилил то, что давно хотел: свою собственную базу знаний.

🔥 Ловите ссылку:
dima-sqlit.ru

Скажу честно: это максимальный MVP. Я просто затащил туда часть постов из канала. Где-то криво, где-то косо, верстка местами может поплыть, но суть не в этом.

Почему я решил, что сайт — это круче, чем просто Telegram?
🔵 Поиск и структура. В Телеге найти старый пост — тот еще квест. На сайте я сделал (и буду допиливать) различные категории: SQL, Python, Карьера, AI. Всё под рукой.
🔵 Формат Longread. В Телеграме мы зажаты лимитами символов. На сайте таких ограничений нет.
🔵 Доступность. Сайт индексируется, его легко скинуть коллеге, у которого нет Телеграма, и там можно собрать все ссылки на мои соцсети в одном месте.

Что дальше? В планах — докрутить поиск, добавить новые категории и переписать посты в корректном виде.

Итог:
🤩

Это только начало. Мне очень важно ваше мнение: зайдите, потыкайте, оставьте обратную связь.


Что клево, а что — полный треш? Чего не хватает? Пишите всё как есть в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.


🚬 Вопросы, обучение, консультации: mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥30🔥14🐳63
🤖 Как бесплатно использовать Claude Code на базе Claude Sonnet 4.5:

Друзья, сегодня расскажу, как можно бесплатно попробовать Claude Code — мощный инструмент для работы с кодом на базе Claude Sonnet 4.5.

Что это даёт?
🔥 Claude Code — это не просто чат-бот. Это полноценный AI-ассистент для разработки, который умеет:
• Читать и анализировать код
• Писать и рефакторить функции
• Помогать с отладкой
• Работать с файлами проекта

Обычно доступ к Claude Sonnet 4.5 платный, но есть способ протестировать его бесплатно через omniroute.

Как это сделать:
1️⃣ Посмотрите это видео — там пошагово показано, как получить доступ к Claude Sonnet 4.5 через omniroute (код из видео я приложил в комментариях для вашего удобства).
2️⃣ Следуйте инструкциям из видео — настройка занимает буквально 10-15 минут.
3️⃣ Запускайте Claude Code и тестируйте все возможности: от генерации кода до работы с вашими проектами.

Почему стоит попробовать прямо сейчас?
⚡️ Пока есть возможность бесплатного доступа — используйте её! Это отличный шанс оценить, насколько AI может ускорить вашу работу с кодом.


🔥 Поставьте 50 реакций на этот пост — и я начну делать серию материалов о том, как я применяю нейронные сети в работе и повседневной жизни! Покажу реальные кейсы, которые упрощают рутину и экономят часы времени.

🚬 Провожу консультации по нейросетям: научу использовать эффективно, экономить на подписках и учиться быстрее с помощью AI.

🗽Написать в ЛС | mentor.dima-sqlit.ru



@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥45❤‍🔥8🐳722
🧠 Obsidian + нейронка — ваш личный второй мозг:

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

А если дать ей память? Обсидиан + нейронка решают эту проблему раз и навсегда.
Идея простая: накапливаешь свою базу знаний в Obsidian → потом нейронка работает уже на основе твоего контекста.

Как это выглядит в жизни:

1️⃣ База знаний по работе Ведёшь рабочий дневник. Описываешь задачи: что за задача, как подошёл, с чем столкнулся, как решил. Через месяц у тебя не "ну я вроде что-то похожее делал", а конкретная точка входа.

🔵 Кейс 1 — ты помнишь, что что-то похожее уже решал, но не помнишь где. Спрашиваешь нейронку: «Я что-то подобное делал, помоги найти». Бам — находит.
🔵 Кейс 2 — хочешь понять, что можно автоматизировать в своей работе. Говоришь: «Посмотри всё, что я делал. Найди слабые места. Что можно ускорить и улучшить?» И получаешь реальный разбор, а не общие советы из интернета.

2️⃣ Личная база знаний (не рабочая) Ведёшь дневник, записываешь что читал, как питался, что смотрел, что думал. Потом спрашиваешь: «Хочу улучшить свою продуктивность — посмотри мои заметки и предложи, что поменять». Нейронка знает твою ситуацию, а не абстрактного человека из интернета.

Почему Obsidian, а не просто папка с файлами?

Там можно удобно строить связи между заметками. Вы сами настраиваете, что с чем связано — нейронка потом ориентируется в этой структуре и выдаёт релевантные ответы, а не гадает по куче разрозненных файлов.

Ещё один крутой кейс — добавление нового материала

Поработал с новым материалом, прочитал статью, прошёл кусок курса. Говоришь нейронке: «Вот новый материал. Проанализируй мою базу знаний и предложи, куда это вписать, с чем это связать». Она сама найдёт нужные заметки и покажет, как это встраивается в то, что ты уже знаешь.

Это работает для чего угодно: аналитика, английский язык, питание, саморазвитие — масса применений.
Чтобы разобраться с Obsidian с нуля, я уже писал об этом статью — вот ссылка: [Obsidian]

🔥 Набираем 70 реакций на этот пост — и готовлю новый огненный пост про использования нейронок
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru



@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥46🐳5❤‍🔥221
🟡 Продолжаю вайбкодить — обновил дизайн сразу двух сайтов:


Накодил обновления на двух сайтах:
📚 Сайт с базой знаний: dima-sqlit.ru
🎓 Сайт с менторством: mentor.dima-sqlit.ru

• Переделал дизайн, подчистил интерфейс, сделал приятнее глазу.
• Добавил статьи с разбором базовых вопросов на собеседованиях — всё на сайте.

Прошу вас: 👇

📍Зайдите, покликайте, посмотрите — и напишите в комментариях:
Чего не хватает? Что стоит добавить или убрать?


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥21107🔥421
🗂 Skill для аналитиков: один файл — и нейронка всегда знает, как ты работаешь

Есть штука, которую используют единицы, хотя она реально экономит время — скилл.
Что это такое технически? Обычный Markdown-файл с YAML-заголовком (frontmatter):

---
name: my_skill
description: Используется когда нужно написать документацию к коду
---

# Инструкция
[здесь твои правила и примеры]
Нейронка читает его автоматически и сразу понимает контекст. Больше ничего объяснять не нужно.


Как вызвать скилл? Два способа:

🤖 Автоматически — в поле description прописываешь триггер: «используется когда автор пишет про документацию». Нейронка сама подхватит
Вручную — просто говоришь: «Используй скилл X, у меня вот такая задача». Я сам обычно так и делаю

Где это реально полезно в аналитике:
1️⃣ Документация Прописал раз: как оформлять описание таблиц, метрик, дашбордов. Теперь нейронка всегда пишет в твоём стиле — не нужно каждый раз объяснять структуру
2️⃣ Стиль кода Описал: функции оформляй так, комментарии — вот так, если код идёт в репозиторий — добавляй докстринги. Всё. Получаешь консистентный код без лишних правок
3️⃣ Шаблоны SQL-запросов Хочешь, чтобы запросы всегда были в определённом стиле: алиасы, форматирование, комментарии к сложной логике? Один скилл — и это работает по умолчанию

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

❗️ Важно: не используй готовые скиллы из интернета без проверки — там может быть вредоносный код. Из проверенных могу рекомендовать скилл superpowers — разберём его подробно в одном из следующих постов.

Важно понимать: Скилл даёт скелет — хорошую базу. Но проверять логику, дополнять деталями и «доводить до ума» всё равно нужно самому. Нейронка пока не знает нюансов твоего проекта лучше тебя.

Итог: 🤩

🔥 Ставим 70 реакций на этот пост — и делаю разбор скилла superpowers.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!


🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38❤‍🔥6🐳4
🌟 system.query в Trino — когда коннектор становится узким местом:

Trino — это не база данных. Это распределённый SQL-движок, который подключается к десяткам источников: PostgreSQL, ClickHouse, Hive, S3 и другим. У него есть свои ресурсы (воркеры, память, CPU), но хранить данные он не умеет — он их берёт из источников и обрабатывает у себя.

И вот здесь начинаются сюрпризы.

🟢 Что такое Pushdown — и почему без него всё тормозит:

Когда Trino выполняет запрос к внешнему источнику, в идеале он должен «протолкнуть» (push down) часть работы прямо туда: фильтры, агрегации, лимиты. Тогда источник вернёт уже обработанный результат — маленький и быстрый.

Но pushdown не всегда работает. Это зависит от конкретного коннектора, версии Trino и сложности запроса. Если pushdown не сработал — Trino тащит всю таблицу к себе и фильтрует уже у себя в памяти. Например:
-- Trino может вытащить всю таблицу orders и только потом отфильтровать
SELECT *
FROM postgres.public.orders
WHERE created_at > '2024-01-01'


Хочешь точно знать, что происходит? Смотри EXPLAIN — в плане будет видно, пошёл ли фильтр в источник или Trino делает это сам.

🟢 system.query — явный контроль вместо надежды на pushdown:

system.query — это способ сказать Trino: «не думай сам, выполни этот SQL прямо в источнике и просто верни мне результат».

1️⃣ PostgreSQL — тяжёлый фильтр по индексу:
SELECT *
FROM TABLE(
postgres.system.query(
query => 'SELECT id, amount FROM orders WHERE created_at > ''2024-01-01'''
)
)

PostgreSQL выполнит запрос сам, использует свои индексы — и вернёт только нужные строки.

2️⃣ ClickHouse — агрегация на стороне источника:
SELECT *
FROM TABLE(
clickhouse.system.query(
query => 'SELECT event_date, count() FROM events GROUP BY event_date'
)
)

ClickHouse заточен под колоночные агрегации. Если делать GROUP BY в Trino поверх ClickHouse — он сначала вытащит все сырые строки. system.query оставляет агрегацию там, где ей место.

🟢 Когда использовать system.query — интуитивно:

Используй, если мысленно отвечаешь «да» хотя бы на один вопрос:

• «Я точно знаю, что эта логика быстрее выполнится в источнике» → используй
• «Таблица большая, а мне нужен маленький срез — и я не уверен, что Trino сам догадается» → используй
• «Я делаю агрегацию в ClickHouse и не хочу гонять миллионы строк» → используй
• «EXPLAIN показывает, что pushdown не работает» → используй

Не используй, если:

• Нужно джойнить данные из разных источников — тут Trino незаменим, system.query не даст соединить PG и ClickHouse в одном запросе
• Запрос простой и ты уверен, что pushdown сработал
• Хочешь переносимый запрос без привязки к диалекту источника

Итог: 🤩


🔥 Набираем 70 реакций на этот пост — так я пойму, что стоит делать больше таких разборов.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!


🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru


@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥258❤‍🔥6
🎙 Иду на AHA'26 — и вам советую:

22 мая в Москве проходит AHA'26 — конференция для тех, кто работает с данными и AI. Решил пойти сам — и вот почему.

Там реально интересная программа: как компании проверяют идеи быстрее и дешевле, как строят AI-продукты, которые реально работают, как не утонуть в данных и доверять тому, что в них написано. Без воды — только практика от команд, которые уже это сделали.

Выступают ребята из Яндекса, Авиасейлс, Сбера, X5 Tech, ВкусВилла, Wildberries, Т-Банка и ещё десятков компаний. Это не те, кто рассказывает «как надо» в теории — это те, кто уже запустил и работает с этим каждый день.

Форматы:
• Офлайн — 39 900 ₽ (22 мая + онлайн-день 14 мая + записи на 6 месяцев)
• Онлайн — 19 900 ₽ (трансляции 14 и 22 мая + материалы на 6 месяцев)

🎁 Для подписчиков моего канала — скидка 10% по промокоду DSQLIT10 при регистрации на сайте.

👋 Если тоже идёте офлайн — пишите, возможно, пересечёмся
Планируете идти? Офлайн или онлайн? Делитесь в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥77❤‍🔥43🐳1