Дима SQL-ит 🧑‍💻 (Аналитика данных)
1.18K subscribers
10 photos
1 video
56 links
👨‍💻 Блог аналитика данных в IT

📩 По менторству и сотрудничеству: @catdem
Download Telegram
🤩 Бесплатные нейросети для аналитики и кода: Qwen, DeepSeek и Google Notebook AI — без ограничений:

Если вы хотите упростить себе работу с SQL, Python или анализом данных с помощью LLM (больших языковых моделей), но не готовы платить за подписки — это пост для вас. Сегодня расскажу про три полностью бесплатных инструмента, которые можно использовать без ограничений.


1️⃣ Qwen:
Китайская модель, которая не уступает многим западным аналогам и полностью бесплатна.

Что умеет:
• Общаться и давать советы по любым темам.
• Анализировать загруженные файлы.
• Писать код на Python, SQL, Java и других языках.

🔜 Начать пользоваться можно по ссылке

2️⃣ Deepseek:
Ещё один топовый китайский проект, который также абсолютно бесплатен и обладает схожим набором функций, как у Qwen

🔜 Начать пользоваться можно по ссылке

3️⃣ Google Notebook AI:
Notebook AI работает не просто как чат, а как исследовательский ассистент. Вы создаете «блокнот» и указываете ему источники (текст, PDF, видео с YouTube), а нейросеть будет отвечать на ваши вопросы, основываясь только на предоставленной вами информации.

🔜Начать пользоваться можно по ссылке
🔜Более подробное описние этой нейронки можно посмотреть у меня в посте по ссылке

Итог:
🙂 Теперь у вас есть три мощных и абсолютно бесплатных ИИ-инструмента в арсенале. Qwen и DeepSeek — ваши универсальные инструменты для кода, анализа файлов и идей, а Google Notebook AI — уникальный сервис для глубокой работы с вашими собственными документами и источниками без «выдумок».

🍸 Если этот обзор сэкономил вам время и силы (и возможно, деньги на подписке), то накидывайте реакций 🔥! Так я пойму, что тема ИИ-инструментов вам интересна.
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

А вы уже пользовались этими нейросетями? Какая впечатлила больше всего? Или может знаете другие бесплатные аналоги? Жду ваши мнения в комментариях!

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25🐳5❤‍🔥3
🍌 Здоровье в IT: как я борюсь с сидячим образом жизни. Часть 1 — про БАДы:

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

😐Сегодня — первая часть про БАДы, которые я использую. Расскажу про каждый, зачем он мне и как помогает.
Но помните, это не медсовет!

Мой топ 5 добавок:
1️⃣ Омега-3: Стараюсь пить на постоянной основе — по 1-2 капсулы в день. Помогает с сердцем, мозгом и иммунитетом, снижает воспаления. Также хочется подсветить один интересный момент — в СССР рыбий жир (это и есть источник Омега-3) давали детям в школах и детсадах для профилактики рахита, улучшения зрения и памяти. Врачи тогда считали, что в обычной еде мало этих кислот. Делайте выводы сами.

2️⃣ Лютеин: Идеально для глаз, которые устают от экранов. Я пью по 10-20 мг в день курсами. В чем его основная польза — это природный антиоксидант, который защищает сетчатку от вредного синего света (экраны компьютеров и смартфонов), снижает риск возрастных проблем, улучшает остроту зрения и помогает глазам адаптироваться к свету, снижает усталость.

3️⃣ Группа витаминов B: Беру комплекс B-витаминов (B1, B6, B12 и т.д.) пью курсами. Они хорошо поддерживают нервную систему: дают энергию, улучшают память и концентрацию, помогают со стрессом. Также полезны для кожи, волос и иммунитета.

4️⃣ Витамин D: Пью курсами по 5000 международных единиц (МЕ), особенно зимой, когда солнца мало. Основная польза — укрепляет кости, иммунитет, борется с депрессией и усталостью. Дефицит витамина D сегодня фиксируют даже в солнечных странах, а что уж говорить про Россию, где большую часть года ​солнца мало.

5️⃣ Мультивитамины: Когда хочу просто поддержать организм, добавляю мультивитаминный комплекс курсами. Там всё сразу: от витамина A до цинка, для общей энергии, иммунитета и восстановления. Пью по ощущениям, особенно когда близиться зима или наступление весны.

Итог:
🙂 Это был топ 5 моих БАДов, которые помогают мне повысить качество жизни. Помните, это только мои личные наблюдения, а не универсальный план и не призыв к действию. Сдайте анализы, проконсультируйтесь с врачом — хоть дефицит витаминов наблюдается у многих, но лучше убедиться в этом и только после этого идите закрывать проблемные места.

🍸 Если пост сэкономил вам время на ресерч или вдохновил вас в этом разобраться, накидывайте реакций 🔥! Так я пойму, что тема актуальна.
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

А вы что пьёте из БАДов? Как часто, какую фирму предпочитаете или может вообще не пьёте? Что думаете про БАДы в общем — пустышка или реально помогают? Жду ваши мнения в комментариях!

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👌5🤩3
👨‍💻 Как выгрузить большой объём данных (SQL, API и т.п.) по частям в Python с помощью батчинга:

Когда данных слишком много — например, тысячи ID для выгрузки из базы или API — обрабатывать всё сразу рискованно: можно словить таймаут, ошибку или просто "зависание". Здесь на помощь приходит батчинг — разбиение на маленькие порции.

1️⃣ Представим, что у нас крупный сервис по доставке еды и нас попросили посмотреть по определенным пользователям их количество покупок за август. Нам предоставили список в виде excel файла c user_id (там список порядка 300 тыс.пользователей), по которым нужно собрать статистику. Отлично, давайте писать код:
import pandas as pd
from utils import sql_query #Представим, что это функция, которая берет на вход sql запрос и возвращает результат в Pandas DataFrame

user_id_df = pd.read_excel('user_id.xlsx') #Загружаем файл с user_id в Pandas DataFrame
user_id_tuple = tuple(user_id_df['user_id']) #Преобразуем в формат кортежа, чтобы можно было подставить удобно в sql запрос через f строку Python

sql_query("""select
user_id,
count(*)
from events
where
user_id in {user_id_tuple} #подставляем через f строку наши user_id
and event_date between '2025-08-01' and '2025-08-31' #рассматриваем август
and event_name = 'purchase' #смотрим события покупки
group by
1
""")


Все отлично, но такой запрос, скорее всего, упадет с ошибкой, так как список с user_id нам дали большой и событий соответственно тоже много и СУБД выдаст ошибку, чтобы защититься от "падения". Что делать в таком случае? Ответ - а давайте ограничим выборку, а как мы ее можем ограничить? Давайте будем смотреть не сразу всех user_id из списка, а по частям.

2️⃣ Функция для разбиения списка на n равных частей:
def split_into_n_parts(lst, n=10):
k = len(lst) // n #Целочисленное деление (Например, 23//10 = 2)
m = len(lst) % n #Остаток от деления (Например, 23//10 = 3)
parts = [] #Результат
start = 0
for i in range(n):
size = k + (1 if i < m else 0)
end = start + size
parts.append(lst[start:end])
start = end
return parts


Вот наша функция: она берёт список lst и делит его на ровно n частей (по умолчанию 10). Остаток распределяется по первым частям для равномерности.

3️⃣ Применим функцию и выполним итоговый запрос по частям и объединим все в один DataFrame:
user_id_list = list(user_id_df['user_id']) #Преобразуем в формат списка, чтобы можно было подставить в нашу функцию для батчинга
iters = split_into_n_parts(user_id_list, 10) #Получили список у которого в качестве элементов другие списки, например [[1,2,3] , [4,5,6]] и т.д.
df_list = [] #Сюда будем запихивать промежуточные результаты, чтобы в конце их объединить

for batch_user_id_list in iters:
df_add = sql_query("""select
user_id,
count(*)
from events
where
user_id in {tuple(batch_user_id_list)} #подставляем через f строку наши user_id
and event_date between '2025-08-01' and '2025-08-31' #рассматриваем август
and event_name = 'purchase' #смотрим события покупки
group by
1)

df_list.append(df_add)

# Объединяем все DataFrame в один
df_buy = pd.concat(df_list, ignore_index=True)


Вуаля, мы смогли выгрузить все нужные нам данные.

Итог:
Батчинг — супер-инструмент для работы с большими данными в Python. С этой функцией и циклом вы легко обработаете любые объёмы без сбоев!
Вопрос, который может возникнуть — а что если нужно по всем user_id информацию выгрузить за тот же август, то уже не выйдет так сделать ? Ответ — выйдет, но для этого, как правило используют хэш функцию (Об этом в одном из следующих постов).

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

Как вам объяснение? Пробовали подобное для выгрузки данных? Делитесь в комментариях!

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🐳6❤‍🔥5
😱 Как быстро освоить аналитику? Начните с ключевых терминов!

Вы когда-нибудь замечали, что в новой теме, будь то Математика, Языки программирования и т.п. всё кажется хаосом, пока не разберётесь с базовыми понятиями? Есть крутая теория, которая говорит: если сначала выучить ключевые термины в предметной области, то освоение пойдёт в разы быстрее. Это не просто слова — это подкреплено когнитивными подходами, такими как Cognitive Learning Theory и Fast Mapping.

🤔 А теперь представьте курс, который идеально воплощает эту идею! Я нашёл на Stepik отличный бесплатный курс по аналитике, где всё структурировано вокруг терминов. Он разбит на разделы по алфавиту (на английском и русском), с объяснениями от A до Z. Вот примеры тем:

• Eng – A>>>M: Acid, API, Airflow, A/B-tests, BI, BigQuery, ClickHouse, Confluence, DWH, Docker, Excel, ETL, Figma, Git, Hadoop и многое другое.
• Eng – N>>>Z: NoSQL, OLAP/OLTP, Pandas, Plotly, PostgreSQL, Redash, SQL, Spark, Tableau, UML, VBA, XML, Yandex Metrika.
• Рус – А>>>М: Анализ, Агрегация, Визуализация, Гипотезы, Дашборды, Инсайт, Кластеризация, Линейная регрессия, Модели.
• Рус – Н>>>Я: Нормализация, Оптимизация, Панели, Ритейл, Статистика, Телеком, Управление данными, Хранилище, Яндекс Директ.
• Плюс разделы по метрикам (финансовые, маркетинговые, продуктовые), базам данных, моделям.

Итог:
Ссылка на курс - Аналитик данных: подготовка к собеседованию

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥29🔥14🦄9
😉 Коррелированные подзапросы в SQL — что это такое и как они работают? Простое объяснение:

Коррелированные подзапросы — это подзапросы, которые зависят от основного запроса. Они ссылаются на данные из внешней части и выполняются для каждой строки основного запроса. Звучит сложно? На самом деле, это как если подзапрос "спрашивает" у основной таблицы: "Эй, для этой строки дай мне нужное значение!". Давайте разберём на простом примере.

1️⃣ Будем работать с таблицей employees (сотрудники в компании):

Таблица: employees

id | name | department | salary
1 Ваня IT 50000
2 Таня IT 60000
3 Петя Sales 40000
4 Саша Sales 55000
5 Маша HR 45000
6 Коля IT 70000


2️⃣ Пример в блоке WHERE: Найдем сотрудников с зарплатой выше средней в своём отделе.
SELECT
id,
name,
department,
salary
FROM
employees as e
WHERE
salary > (SELECT AVG(salary) FROM employees WHERE department = e.department);


3️⃣ Как работает?
• Для каждой строки e подзапрос берёт её department (например, IT для Вани) и считает среднюю зарплату только по этому отделу ((50000 + 60000 + 70000)/3 = 60000). Если salary строки > этой средней — она попадет в результат.

Итог:
Коррелированные подзапросы — для случаев, когда нужно "персонализированное" вычисление по строке, как сравнение со средней в группе. Выбирайте их, когда join усложняет запрос и данных в таблице не много.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤‍🔥6🐳4🗿1
😲 CTE vs Представления (VIEW - вьюхи) в SQL — простое объяснение: что это такое и в чём разница? Часть 1.

Многие путают CTE (Common Table Expressions) и представления (VIEW), потому что оба позволяют создавать "временные таблички" из запросов. Но под капотом они работают по-разному: CTE — для одного запроса, а представления — как сохранённые ярлыки. Давайте разберёмся на простых примерах.

Представим что у нас в базе данных есть таблица sales (продажи в магазине:
id | user_id     | product   |  amount  |     date
1 | 101 | Кофе | 500 | 2025-01-15
2 | 102 | Чай | 300 | 2025-01-16
3 | 101 | Печенье | 200 | 2025-01-17
4 | 103 | Кофе | 500 | 2025-01-18


1️⃣ Что такое представления (VIEW)?

Представление — это просто сохранённый SQL-запрос, который выглядит и работает как обычная таблица. Оно не хранит данные физически — каждый раз при обращении запрос выполняется заново, показывая свежие данные. Есть два типа: постоянные (живут пока не удалишь) и временные (исчезают с закрытием сеанса).

Сеанс — это период времени от подключения к базе данных до отключения от неё. Представьте: вы открываете DBeaver или другой SQL-клиент, подключаетесь к серверу — начинается сеанс. Вы выполняете запросы, создаёте временные объекты. Закрываете программу, отваливается соединение или истекает таймаут — сеанс заканчивается.

Пример постоянного представления:
-- Создаём постоянное VIEW
CREATE VIEW user_summary AS
SELECT user_id, COUNT(*) as order_count, SUM(amount) as total_spent
FROM sales GROUP BY user_id;

-- Используем как таблицу
SELECT * FROM user_summary WHERE total_spent > 400; -- Работает даже через неделю


Пример временного представления:
-- Создаём временное VIEW
CREATE TEMP VIEW temp_summary AS
SELECT user_id, COUNT(*) as order_count, SUM(amount) as total_spent
FROM sales GROUP BY user_id;

-- Работает в текущем сеансе
SELECT * FROM temp_summary; --

-- Новый сеанс (закрыли/открыли клиент) — исчезло
SELECT * FROM temp_summary; -- Ошибка!


2️⃣ Что такое CTE (Common Table Expressions)?

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

Простой пример CTE:
-- CTE для расчёта сумм по пользователям
WITH user_totals AS (
SELECT user_id, SUM(amount) as total_spent
FROM sales GROUP BY user_id
)
SELECT * FROM user_totals WHERE total_spent > 500; -- Работает в этом запросе

-- В следующем запросе CTE уже нет
SELECT * FROM user_totals; -- Ошибка!


3️⃣В чём разница между CTE и представлениями?

• Область видимости: CTE — только в одном запросе, представления — в сеансе (временные) или постоянно.
• Создание: CTE с WITH внутри запроса, представления с CREATE VIEW или CREATE TEMP VIEW.

Итог:
CTE и VIEW — это похожие инструменты, только с разным "сроком хранения". CTE — для быстрых фишек внутри одного запроса, типа "собрал данные на лету и сразу использовал". А представления — как готовые шаблоны, которые можно дёргать когда угодно, чтобы не писать одно и то же по сто раз.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥26🔥148
А вы знали, что не все аналитики в IT ежедневно пишут SQL-запросы — для некоторых это редкий гость? 🤩

Я слышал краем уха о системных аналитиках, но толком не вникал, пока не наткнулся на канал Системный анализ на максималках от Сергея, старшего системного аналитика в UmbrellaIT, который делится своим путем и карьерным развитием простым и увлекательным языком

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

🔜 Нужно ли СА знать программирование? + Краткий анализ рынка
🔜 Шаблоны документации – пустая трата времени или действительно полезно?
🔜 Промт для генерации User Story и Use Case
🔜 Фронт раньше бэка – это вообще законно?
🔜Что такое Polling и причем тут Шрек

А еще Сергей рассказывает о своих намерениях дорасти до архитектора и делится планом по достижению цели:

🔜Путь до архитектора (части 1-3)

Частая проблема в IT это выгорание и про это Сергей тоже написал, советую ознакомиться очень полезно:

🔜 Почему я впервые отдохнул только в 26 лет
🔜 Лучшее лекарство от стресса – спорт

Рекомендую подписаться 🏖 и ознакомиться, может быть СА это именно ваше направление?

А вы сталкивались с системными аналитиками в работе? Делитесь в комментариях, используете ли их подходы в своей аналитике!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54🐳3
🔥 GitHub Copilot Pro за 400 рублей: доступ к GPT-5 mini с unlimited запросами для IT, аналитики, разработки и повседневной жизни:

Если вы работаете в IT — будь то программирование, аналитика данных, системное администрирование или другие направления — GitHub Copilot Pro может стать вашим суперпомощником. Сегодня разберём, как купить подписку дёшево, что она даёт и почему это выгодно для повседневных задач. Я расскажу на простых примерах, чтобы было понятно даже тем, кто только начинает.

1️⃣ Цены на подписку:
400 рублей за месяц или 830 за три месяца (купить можно на plati market):
• 1 месяц за 400 рублей — отлично для теста, чтобы понять, как инструмент вписывается в ваш workflow
• 3 месяца за 830 рублей — выгоднее в долгосрочной перспективе, около 277 рублей в месяц

2️⃣ Что позволяет подписка:
• Доступ к GPT-5 mini с unlimited запросами — генерируйте код, SQL-запросы, аналитику и т.д. сколько угодно, без ограничений.
• Copilot Pro интегрирует мощный ИИ в вашу среду разработки (VS Code)
• Всего 300 премиум-запросов в месяц на топовые модели (claude, gemini, gpt), но для рутинных задач mini-версии более чем достаточно.
• Одна из ключевых фич — автодополнение кода в реальном времени: пока вы печатаете, ИИ предлагает готовые строки или блоки кода, которые идеально вписываются в ваш стиль.
• Ещё круче — понимание контекста проекта: ИИ анализирует все файлы, структуру кода и зависимости, чтобы давать персонализированные предложения. Не просто общий ответ, а такой, который учитывает вашу библиотеку (например, Pandas для аналитики) или настройки (типа Airflow для задач).

Важно сказать, что для работы требуется VPN

3️⃣ Если вам интересна тема ИИ, можете посмотреть предыдущие посты на эту ему:
Бесплатные нейросети для аналитики и кода
Вайбкодинг — бесплатный аналог Cursor AI от Alibaba (Qoder)
Бесплатная нейросеть от Google для работы с любыми материалами — NotebookLM
Как за 400 рублей в год получить доступ к Claude, ChatGPT, Gemini и Grok через Perplexity и без использования VPN

Итог:
GitHub Copilot Pro — универсальный инструмент для IT-специалистов (и не только), ускоряющий задачи в программировании, аналитике и за её пределами.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

Пробовали GitHub Copilot Pro как чат или для кодинга? Делитесь в комментариях, помогает ли автодополнение в ваших задачах или предпочитаете другие ИИ?
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1266
🧐 Временные таблицы (TEMP TABLE) vs Материализованные представления (MATERIALIZED VIEW) в SQL — простое объяснение: что это такое и в чём разница? Часть 2.

Продолжаем разбираться с временными конструкциями в SQL.
Первую часть можно посмотреть вот здесь


Многие путают временные таблицы (TEMP TABLE) и материализованные представления (MATERIALIZED VIEW), потому что оба хранят данные физически. Но временные таблицы — для сеанса, а материализованные — как кэш с обновлениями. Давайте разберём их работу на таблице sales из первой части.

Представим, что у нас в базе данных есть таблица sales (продажи в магазине):
id | user_id     | product   |  amount  |     date
1 | 101 | Кофе | 500 | 2025-01-15
2 | 102 | Чай | 300 | 2025-01-16
3 | 101 | Печенье | 200 | 2025-01-17
4 | 103 | Кофе | 500 | 2025-01-18


1️⃣ Что такое временные таблицы (TEMP TABLE)?

Временная таблица — это реальная таблица, которая создаётся на время сеанса и хранит данные физически. Она исчезает автоматически при закрытии сеанса (что такое сеанс описано в первой части). Полезна для промежуточных расчётов с большими данными.

Пример временной таблицы:
-- Создаём временную таблицу
CREATE TEMP TABLE temp_sales AS
SELECT * FROM sales WHERE amount > 300;

-- Используем в сеансе
SELECT user_id, SUM(amount) FROM temp_sales GROUP BY user_id; -- Работает

-- Новый сеанс — исчезла
SELECT * FROM temp_sales; -- Ошибка!


2️⃣ Что такое материализованные представления (MATERIALIZED VIEW)?

Материализованное представление — это VIEW, которое хранит данные физически, как таблица, но обновляется по расписанию или вручную. В отличие от обычного VIEW, оно не пересчитывается каждый раз — данные "заморожены" до обновления. Полезно для тяжёлых отчётов.

Пример материализованного VIEW (в PostgreSQL, например):
-- Создаём материализованное VIEW
CREATE MATERIALIZED VIEW mat_user_summary AS
SELECT user_id, COUNT(*) as order_count, SUM(amount) as total_spent
FROM sales GROUP BY user_id;

-- Используем как таблицу
SELECT * FROM mat_user_summary WHERE total_spent > 400; -- Быстро, данные из кэша

-- Обновляем данные
REFRESH MATERIALIZED VIEW mat_user_summary; -- Пересчитывает


3️⃣ В чём разница между временными таблицами и материализованными VIEW?

• Хранение: Оба физически, но временные — только в сеансе, материализованные — постоянно, с обновлениями.
• Создание: TEMP TABLE для сеанса, MATERIALIZED VIEW для долгосрочного кэша.
• Обновление: Временные таблицы не обновляются автоматически (данные статичны после создания; для изменений нужно вручную обновлять их содержимое, например, через INSERT/UPDATE). Материализованные — вручную по команде (REFRESH) или через триггеры/расписания в некоторых СУБД.

Итог:
Временные таблицы — для быстрых расчётов в одном сеансе, а материализованные VIEW — для ускорения частых запросов с редкими обновлениями. Не путайте с обычными VIEW!

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1364🐳3
🤩 Как отслеживать прогресс цикла в Python — от простых print до tqdm:

Многие новички (и не только) в Python сталкиваются с длинными циклами — например, при обработке больших данных или вычислениях.
Возникает вопрос — завис ли процесс? Можно, конечно, проставлять print с номером итерации, но это примитивно и неудобно.

Есть крутое решение — библиотека tqdm, которая добавляет стильный прогресс-бар.
Представим, что у нас есть список из 100 элементов, и мы хотим мониторить цикл for.

1️⃣ Простой способ — print с номером итерации:
import time  # Для имитации задержки

items = range(100) # 100 элементов

for i in items:
print(f"Обработка элемента {i}") # Выводит номер каждый раз
time.sleep(0.1) # Имитация работы


Это базовый вариант — вставляем print внутри цикла, чтобы видеть, на каком шаге мы. Полезно для отладки, но консоль быстро замусоривается, и нет информации о времени или скорости.

2️⃣ Лучшее решение — библиотека tqdm:
import time  # Для имитации задержки
from tqdm import tqdm # Импортируем tqdm

items = range(100) # 100 элементов

for item in tqdm(items, desc="Обработка элементов"):
time.sleep(0.1) # Имитация работы (0.1 секунды на итерацию)

print("Цикл завершён!")


Tqdm — это лёгкая библиотека, которая оборачивает ваш цикл в прогресс-бар с процентами, скоростью (итераций в секунду) и временем до завершения.
Устанавливается просто:
pip install tqdm


3️⃣ Как работает? При запуске в консоли появляется прогресс-бар вроде:
Обработка элементов:  42%|████▏     | 42/100 [00:04<00:06,  9.50it/s]


Итог:
Если цикл короткий — хватит print. Но для серьёзных задач используйте tqdm.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤‍🔥76
🤩 Копируем данные из DataFrame к себе в буфер обмена без лишних шагов с сохранением файлов:

Аналитики часто сталкиваются с задачей — нужно быстро скопировать данные из DataFrame в Excel или наоборот, без лишних сохранений в файлы. Pandas предлагает удобные инструменты для работы с буфером обмена:

1. Вставка из буфера обмена (загрузка данных):🔙
df = pd.read_clipboard()  # создаем DataFrame из скопированных данных

Работает с таблицами из Excel, браузера и других источников. 

2. Копирование в буфер обмен (выгрузка данных):🔜
df.to_clipboard()  # копируем DataFrame в буфер обмена

Теперь данные можно вставить в Excel или другую программу обычным Ctrl+V.

Я работаю в jupyter notebook на удаленном сервере и я встретился с ошибкой:
Pyperclip could not find a copy/paste mechanism for your system.....

И что теперь делать ? Можно конечно установить Pyperclip к себе в систему на удаленном сервере, но для этого, как правило нужны права супер пользователя (sudo), а мы работаем в большой компании и нам никто не даст этого сделать. Я нашел выход (смотрим пункт 3).

3. Копирование в буфер обмен на удаленном сервере (выгрузка данных):🔜

Установим библиотеку copydf
pip install copydf

Импортируем функцию copyDF и в качестве аргумента дадим ей на вход наш Pandas DataFrame:
from copydf import copyDF

copyDF(df)


Готово — теперь данные можно вставить в Excel или другую программу обычным Ctrl+V.

Итог:
Pandas clipboard — удобная штука для локальной работы, но на серверах можно встретиться с проблемами.
copydf решает проблему без прав и лишних заморочек
Попробуйте — и забудьте о файлах!

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤‍🔥7421
😭 Как загружать данные из CSV, Excel или Pandas DataFrame во временные таблицы ClickHouse:

Работая с ClickHouse, часто сталкиваешься с ситуацией: тебе дали список из десятков тысяч user_id или сотен городов, и нужно отфильтровать данные по ним. Но часто возникают проблемы следующего характера:
❗️ Нет прав на создание таблиц (даже временных)
❗️ Подставлять всё через IN (...) в запрос через f строку — не вариант: СУБД ругается на длину запроса
✔️ Выход есть — внешние временные таблицы через ExternalData!

1️⃣Что понадобится?

• Устанавливаем библиотеку (если ещё не стоит):
pip install clickhouse-connect pandas


• Импортируем нужное:
import clickhouse_connect
import pandas as pd
from clickhouse_connect.driver.external import ExternalData


• Подключаемся к ClickHouse (настройки у всех разные, но вот пример подключения):
def get_click_dl_client():
client = clickhouse_connect.get_client(
host='host',
port=8443,
username='your_login',
password='your_password',
secure=True,
verify=False,
send_receive_timeout=6000000
)
return client

client = get_click_dl_client()


2️⃣ Сценарий (у нас два файла):

1) users.csv — содержит user_id (int) и флаг actual (String: «да»/«нет»)
2) city.xlsx — список городов в колонке city (String)
Нам нужно отобрать user_id только с actual = 'да' и только из указанных городов.

• Загружаем данные через ExternalData
Создаём объект — он будет "контейнером" для наших временных таблиц:
ext_data = ExternalData()


• Вариант 1: Прямая загрузка из CSV-файла
ext_data.add_file(
file_name='user_table_tmp', # имя таблицы в SQL-запросе
fmt='CSVWithNames', # Формат с именами столбцов в первой строке (если без имён — используйте 'CSV')
structure=['user_id Int32', 'actual String'], # Структура - типы полей
data=open('users.csv', 'rb').read() # путь к файлу (строка!)
)


• Вариант 2: Загрузка из Pandas DataFrame (из Excel):
city_df = pd.read_excel('city.xlsx')  # Читаем Excel в DataFrame

ext_data.add_file(
file_name='city_table_tmp', # имя таблицы в SQL-запросе
fmt='CSVWithNames', # С именами столбцов
structure=['city String'], # Структура - типы полей
data=city_df.to_csv(index=False).encode('utf-8') # Конвертируем DF в CSV-строку и в байты для передачи
)

Здесь .to_csv() превращает DataFrame в CSV-строку, а .encode('utf-8') — в байты для ExternalData.

• Теперь используем в запросе — без прав на создание таблиц в БД!
q = '''
SELECT
user_id,
SUM(money_spend) AS total_spend
FROM events
WHERE
1=1
AND user_id IN (SELECT user_id FROM user_table_tmp WHERE actual='да')
AND city IN (SELECT city FROM city_table_tmp)
GROUP BY 1
'''

df_total_spend = client.query_df(q, external_data=ext_data) # Выполняем с внешними данными


Итог:
ExternalData — супер-способ обойти отсутствие прав на temp tables в ClickHouse. Загружайте из файлов или DataFrame и джойньте/фильтруйте на здоровье!

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤‍🔥64🐳31
🤔 Claude Sonnet 4.5 от Anthropic вышла пару дней назад:

Обновлённая модель, заточенная под кодинг, создание агентов и сложные вычисления. По бенчмаркам, она лидирует в некоторых задачах, обходя GPT-5 и Gemini 2.5 Pro. По моему личному опыту эта моделька лучше всего отвечает на мои запросы ну и еще Grok, как по мне хорош.

Хочу в ближайшие дни протестировать ее и написать проекты. Интересно ваше мнение, какие модельки вы используете и могут ли они уже помочь написать полноценный проект?

Не хочу перегружать вас бенчмарками и прочими умными словами, просто интересно ваше мнение, хотели бы такие посты, где я бы оповещал вас о новых инструментах, как в ИИ, так и в целом мире IT, что думаете? 🤩

попробовать можно здесь

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

🍸 Если пост полезен, накидывайте реакций, чтобы я понимал, что тема интересна!
❤️ Поддержать канал бустами (бесплатно с Telegram Premium) можно здесь: t.me/boost/dima_sqlit

Вы уже тестили Claude Sonnet 4.5? Как впечатления — лучше ли она в кодинге/аналитике по сравнению с GPT или Gemini? И как вам такая рубрика: интересно ли быть в курсе ИИ-новостей и чтобы я на канале их рассказывал? Может быть интересно, как я применяю ИИ в работе/жизни и т.п.? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤‍🔥32
😱 Важность типов данных в SQL: почему данные не джойнятся, функции не применяются:

Аналитики часто сталкиваются с ситуациями, когда SQL-запросы дают неожиданные результаты — таблицы не джойнятся, функции не работают или сравнения ломаются. Всё это из-за несоответствия типов данных полей: строка не склеивается с числом, дата не сравнивается с текстом. Особенно это актуально для JOIN, где типы должны идеально совпадать. Давайте разберём на простых примерах, почему типы данных — это основа стабильных запросов, и как с этим работать.

Представим две таблицы в базе: orders (заказы) и customers (клиенты).
Вот их структура с данными: 😐

Таблица orders:

| id (INT) | customer_id (VARCHAR) | amount (DECIMAL) | order_date (DATE) |
|----------|-----------------------|------------------|-------------------|
| 1 | '101' | 500.00 | 2025-10-01 |
| 2 | '102' | 300.00 | 2025-10-02 |
| 3 | '101' | 200.00 | 2025-10-03 |


Таблица customers:

| id (INT) | name (VARCHAR) | join_date (VARCHAR) |
|----------|----------------|---------------------|
| 101 | Ваня | '2025-09-01' |
| 102 | Таня | '2025-09-15' |


Обратите внимание: customer_id в orders — VARCHAR, а id в customers — INT. Это классическая ловушка!

1️⃣ Проблемы с JOIN: несоответствие типов приводит к пустым результатам
Если типы не совпадают, SQL может не найти совпадений, даже если значения выглядят одинаково. Например, '101' (строка) не равно 101 (число) без явного приведения:


Плохой пример (JOIN не сработает):
SELECT o.id, c.name, o.amount
FROM orders o
JOIN customers c ON o.customer_id = c.id; -- Нет совпадений! Результат пустой


Почему?
• Поле "o.customer_id" — VARCHAR('101'),
• Поле "c.id" — INT(101).
SQL сравнивает типы строго.

Решение: Приведите типы с CAST.
Хороший пример:
SELECT o.id, c.name, o.amount
FROM orders o
JOIN customers c ON CAST(o.customer_id AS INT) = c.id; -- Теперь джойнится: Ваня с заказами 1 и 3


2️⃣ Функции не применяются: математические операции и агрегаты ломаются на "чужих" типах
Функции вроде MAX, SUM, AVG и другие ожидают конкретные типы:


Представим столбец amount как VARCHAR в таблице test_amounts:
| amount (VARCHAR) |
|------------------|
| '10' |
| '2' |
| '100' |


Плохой пример:
SELECT MAX(amount) FROM test_amounts;  -- Возвращает '2', потому что лексикографически '2' > '10' > '100' (сравнивает по символам)


Решение: Приведите к числу.
SELECT MAX(CAST(amount AS DECIMAL)) FROM test_amounts;  -- Возвращает 100, как ожидается


Итого:
Типы данных — фундамент SQL. Несоответствия приводят к пустым джойнам, ошибкам функций и неверным расчётам. Всегда анализируйте типы заранее, приводите их явно. Это сэкономит часы отладки!

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥292❤‍🔥1🐳1
Привет!
Хочу сегодня поделиться каналом Натальи, где она рассказывает свой путь самостоятельного развития от инженера-конструктора на заводе до senior data scientist в крупном банке.
Она может:
рассказать, какие скиллы реально нужны в работе
рассказать, что делать чтобы вашу работу не заменил ИИ
подсказать, как проходить собеседования в ML/DSs,
поделиться опытом работы дата саентистом в бигтех компании
пошутить и повеселиться

Если думаете, куда развиваться в сфере Data Science — очень советую заглянуть к ней в канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥922
📱 Как забирать данные из Google Sheets по API через Python:

Сегодня покажу, как за 10-15 минут настроить доступ к Google Sheets через API и загрузить данные прямо в Pandas.

Что сделаем:
1️⃣ Зарегистрируем Gmail и создадим проект в Google Cloud Console.
2️⃣ Включим Sheets API и сгенерируем JSON-ключ для аутентификации.
3️⃣ Добавим сервис-аккаунт в права доступа к вашей таблице.
4️⃣ Установим gspread и pandas, напишем скрипт для загрузки данных в DataFrame.

Зачем это нужно?
🔥 Это поможет для простой аналитики личных расходов или быстрых бизнес-запросов
Легко стройте базовую аналитику: фильтры, join'ы и графики для бюджета или метрик бизнеса.

Приятного чтения

😢 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥20🔥14🐳411
🍌 Здоровье в IT: как я поддерживаю свое ментальное состояние. Часть 2 — про Менталку:

Привет! В прошлой части я рассказал про БАДы для борьбы с сидячим образом жизни, а сегодня, пока я нахожусь в родном крае и вдали от московской суеты, решил поделиться, как поддерживаю голову в тонусе. Работа за компом — это не только тело, но и мозг. Я стараюсь держать баланс, чтобы не скатиться в выгорание. Расскажу про свои приёмы — они простые, но реально работают. Но помните, это только мои личные наблюдения и у вас может быть по другому!

Мой топ-3 для менталки:
1️⃣ Смена обстановки: Я стараюсь уезжать из Москвы хотя бы раз в месяц — на пару дней в родной край или куда-то за город. Это даёт ощущение спокойствия, замедляет время: можно подышать другим воздухом, подумать о целях, мечтах и пути без отвлекающих уведомлений. Если у вас нет возможности рвануть в другой город (финансы, работа), попробуйте просто выбираться в другую часть своего города — в парк, на набережную или в тихий район. Даже полчаса свежего воздуха и новой обстановки придают новые силы: мозг перезагружается, и вам сразу становится лучше.
2️⃣ Оффлайн-общение и смена контекста: Больше говорите с людьми не через экран! В крупных городах полно конференций, митапов или просто сходок по IT/хобби — идите, заводите новые знакомства. Я раньше думал: "Надо сесть и решать задачу до победного", но на деле, когда застрял, лучше отвлечься. Переключаешься на разговоры — и бац, решение приходит само, как по волшебству. Новые люди дают свежие идеи, а общение оффлайн снижает стресс и добавляет энергии. Не бойтесь "потерять время" на это — оно окупается.
3️⃣ Чтение книг: Найдите то, что цепляет именно вас — классика вроде Достоевского, нон-фикшн по психологии/бизнесу или биографии крутых личностей (типа Илона Маска или Стива Джобса). Я стараюсь читать по 20-30 минут перед сном — это помогает отвлечься от кода, найти вдохновение и новые инсайты. Книги как терапия: развивают эмпатию, дают паузу от рутины и мотивируют на изменения. Главное — не заставлять себя, а выбрать жанр, который заинтересует.

Итог: 🤩
Менталка в IT — это не роскошь, а необходимость, чтобы не выгорать. Для меня смена обстановки, живое общение и книги — как перезагрузка мозга: дают силы, ясность и радость. Попробуйте внедрить хотя бы один хак — начните с прогулки в парк. Но если чувствуете, что нужна помощь, обратитесь к специалисту — психолог, психотерапевт или коуч лучше подскажут персонально.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥18🔥156
Повышаем продуктивность в Jupyter Notebook - мой личный топ горячих клавиш:

Jupyter Notebook — мощный инструмент, но его горячие клавиши могут ускорить рутину в разы.
Важно знать: в Jupyter есть два режима работы с ячейками:

🛑 Command mode (неактивный, когда ячейка выбрана, но курсор в ней не активен)
🛑 Edit mode (активный, когда ячейка выбрана и курсор в ней активен)

Разберём топ-комбинации для Command mode:
1️⃣ A (Англ.) — Создаёт новую ячейку выше текущей. Идеально, когда нужно вставить блок перед существующим кодом — без копирования.
2️⃣ B (Англ.) — Создаёт новую ячейку снизу от текущей. Новая пустая ячейка, а не копия — быстро расширяй ноутбук.
3️⃣ M (Англ.) — Переключает ячейку в markdown-режим (текстовый). Здесь пишешь форматированный текст, заголовки или объяснения. (Markdown — это простой язык разметки, рекомендую освоить: он супер полезен для документации кода и отчётов.)
4️⃣ Y (Англ.) — Переключает ячейку в code-режим (код).
5️⃣ X (Англ.) — Вырезает выделенную ячейку (или блок ячеек) и копирует в буфер — для перемещения в другое место.
6️⃣ C (Англ.) — Копирует выделенную ячейку.
7️⃣ V (Англ.) — Вставляет скопированную/вырезанную ячейку (из пункта 4 или 5) снизу от текущей.
8️⃣ D, D (двойное нажатие D) — Удаляет текущую ячейку.
9️⃣ Z (Англ.) — Отменяет удаление ячейки. Ошибся с D, D? Один клик — и всё на месте.
1️⃣0️⃣ Ctrl + Enter — Выполняет текущую ячейку без перехода к следующей.
1️⃣1️⃣ Shift + Enter — Выполняет текущую ячейку с переходом к следующей.

🔜 Бонус:
Выделение нескольких ячеек для массовых действий
• Shift + ↑ / ↓ — Зажмите Shift и жмите стрелки вверх/вниз, чтобы быстро выделить блок ячеек. Теперь комбинируйте с другими шорткатами:
— Выделите группу и нажмите D, D — удалите все сразу.
— Или Ctrl + Enter — запустите весь блок без перехода.
Это удобно для чистки или тестирования цепочек кода в больших ноутбуках.

Также, вы, можете ознакомиться с другими горячими клавишами, которые работают не только в jupyter notebook — об этом я писал пост вот здесь

Итого:
Это был топ моих горячих клавиш в Jupyter — от создания ячеек до редактирования кода. Начните с A/B/M и этим, вы, уже сэкономите много времени.

😢 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

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

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤‍🔥6🐳31