Data Science. SQL hub
По всем вопросам- @workakkk @itchannels_telegram - 🔥лучшие ит-каналы @ai_machinelearning_big_data - Machine learning @pythonl - Python @pythonlbooks- python книги📚 @datascienceiot - ml книги📚 РКН: https://vk.cc/cIi9vo #VRHSZ
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Data Science. SQL hub
تُعد قناة Data Science. SQL hub (@sqlhub) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 35 960 مشتركاً، محتلاً المرتبة 3 610 في فئة التكنولوجيات والتطبيقات والمرتبة 17 707 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 35 960 مشتركاً.
بحسب آخر البيانات بتاريخ 31 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 66، وفي آخر 24 ساعة بمقدار 19، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 6.43%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 3.46% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 2 311 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 243 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 10.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل sql, индекс, postgres, index, sqlite.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“По всем вопросам- @workakkk
@itchannels_telegram - 🔥лучшие ит-каналы
@ai_machinelearning_big_data - Machine learning
@pythonl - Python
@pythonlbooks- python книги📚
@datascienceiot - ml книги📚
РКН: https://vk.cc/cIi9vo
#VRHSZ”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 01 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
CASE WHEN.
SELECT
customer_id,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sum,
SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) AS pending_sum
FROM orders
GROUP BY customer_id;
🔎 В одном запросе можно посчитать суммы по разным статусам — и не делать несколько JOIN или подзапросов.
Работает также с COUNT(), AVG() и другими агрегатами.
@sqlhubinnodb_buffer_pool_size обычно = 70%+ RAM на выделенном сервере
- Обход кэша ОС: с innodb_flush_method='O_DIRECT' InnoDB работает напрямую с диском
- Двухсекционный LRU: страницы сначала в old, только потом (через innodb_old_blocks_time`) в `young. Это спасает от «выметания» кэша при больших сканах
Postgres
- Внутренний кэш + page cache ОС: shared_buffers обычно около 30% RAM, остальное оставляют ОС
- Clock-sweep: у страницы счётчик обращений, уменьшается при «прокрутке часов». Когда падает до нуля — страница освобождается
Практические выводы
- Bulk-операции: InnoDB устойчивее к «пробиванию» кэша, в Postgres часть нагрузки идёт в кэш файловой системы
- Тюнинг памяти: в MySQL раздувают buffer pool, в Postgres shared_buffers умеренный, а остальное доверяют ОС
Что стоит проверить в бенчмарках Postgres
- Размер shared_buffers: 4% / 10% / 30% / 50% RAM
- Сценарии: OLTP, последовательные сканы, смешанные нагрузки
- Рабочий набор: меньше / равен / больше доступной RAM
- Метрики: TPS/QPS, p95/p99 латентность, hit ratio, про
https://github.com/postgres/postgres/blob/master/src/backend/storage/buffer/READMEappend, обрабатывая только новые данные.
- Экономия времени, памяти и ресурсов.
💡 Преимущества Delta Lake:
- Инкрементальная загрузка данных.
- Работа с большими объёмами без полной перезагрузки.
- Поддержка транзакций (ACID).
- Совместимость с большими дата-платформами (Spark, Pandas и др.).
📊 Если у тебя миллионы строк — выигрыш в скорости будет колоссальным.
@sqlhub
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("financial_report.pdf")
for table in result.document.tables:
df = table.export_to_dataframe()
📌 Github
@sqlhub
#AI #RAG #Docling #DataEngineering #PDFTRUNC с датами для фильтрации и агрегации
В Oracle функция `TRUNC(date, 'fmt')` обрезает дату до заданного формата, обнуляя менее значимые части (часы, минуты, секунды и т.д.). Это помогает:
- фильтровать данные по дням, месяцам, годам, неделям, кварталам,
- делать группировки без сложных выражений,
- избавляться от ошибок, когда время мешает сравнению дат.
📌 Форматы:
- 'DD' — начало дня (по умолчанию)
- 'MM' — первый день месяца
- 'YYYY' — первый день года
- 'IW' — начало ISO-недели
- 'Q' — первый день квартала
📍 Примеры:
- Все сделки за сегодня
select *
from trades
where trunc(ts) = trunc(sysdate);
- Группировка по месяцам
select trunc(ts, 'MM') as month_start, sum(price) as total
from trades
group by trunc(ts, 'MM')
order by month_start;
-- Данные за текущий квартал
select *
from trades
where trunc(ts, 'Q') = trunc(sysdate, 'Q');
⚡ Плюсы:
- Удобно в чтении и написании
- Убирает проблемы с «лишними» часами и минутами в датах
- Работает напрямую с типом DATE без лишних кастов
@sqlhub🟠узнаете, какие навыки и знания необходимы для успешного выполнения заданий; 🟠поймёте, что хочет увидеть работодатель; 🟠получите советы и лайфхаки; 🟠вместе с Андроном разберете в прямом эфире реальный пример тестового 🔥Чему именно научимся на вебинаре:
🟠С помощью Pandas проанализируем Яндекс-запросы за несколько недель, загрузив их из json-файла; 🟠Найдем закономерности и отличия использования сервиса на мобильных устройствах и компьютерах; 🟠Разберем фишки Pandas: сложную агрегацию, маппинг, конкатенацию, чейнинг и др.🕗 Настоятельно рекомендуем не пропускать — для зрителей у нас есть особый бонус, который обеспечит вам уверенный старт в вашей карьере. 😶Зарегистрироваться на бесплатный вебинар
amount строго возрастает каждый день, а на следующий день после интервала происходит разворот вниз (т.е. amount меньше, чем в последний день серии). Для каждого такого интервала вернуть:
- customer_id
- start_date, end_date серии
- length (длина серии в днях)
- last_amount (сумма в последний день серии)
- drop_amount (сумма в день разворота)
- drop_pct (процент падения относительно last_amount)
Решение (Oracle 12c+): используем MATCH_RECOGNIZE
SELECT *
FROM sales
MATCH_RECOGNIZE (
PARTITION BY customer_id
ORDER BY day_date
MEASURES
FIRST(day_date) AS start_date,
LAST(day_date) AS end_date,
COUNT(A.*) AS length,
LAST(amount) AS last_amount,
NEXT(amount) AS drop_amount,
ROUND( (LAST(amount) - NEXT(amount)) / NULLIF(LAST(amount),0) * 100, 2 ) AS drop_pct
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN (A{3,} D)
DEFINE
A AS ( PREV(amount) IS NULL OR amount > PREV(amount) ),
D AS amount < PREV(amount)
);
Пояснение
- PATTERN (A{3,} D) — ищем подпоследовательность из минимум трёх строго возрастающих дней A, за которой сразу идёт день падения D.
- DEFINE A — рост относительно предыдущего дня в группе клиента.
- DEFINE D — падение относительно предыдущего дня (последнего A).
- MEASURES — извлекаем границы серии и метрики, NEXT(amount) берёт сумму в день разворота.
- AFTER MATCH SKIP PAST LAST ROW — не пересекаем серии.
Бонус: защита от «лестниц» с пропусками дат
Если в данных бывают пропуски дней, а вам нужны подряд идущие даты, добавьте проверку календарной последовательности:
DEFINE
A AS ( (PREV(amount) IS NULL OR amount > PREV(amount))
AND (PREV(day_date) IS NULL OR day_date = PREV(day_date) + 1) ),
D AS ( amount < PREV(amount) AND day_date = PREV(day_date) + 1 )
Зачем так делать
MATCH_RECOGNIZE — мощный инструмент Oracle для поиска сложных паттернов по времени (распознавание трендов, разрывов, «голова-плечи», аномалий). Он заменяет громоздкие CTE с аналитиками и делает запрос короче, быстрее и точнее при работе с последовательностями.
@sqlhub