Обновить
72.75

SQL *

Формальный непроцедурный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Тестирование систем и движков массивно-параллельных вычислений. Часть II. TPC-DS

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели5.3K

Привет! Сегодня я продолжаю тему сравнения систем и движков массивных параллельных вычислений. В прошлой публикации я раскрыл основные принципы проведения тестирования, которыми руководствуется наша команда, и привел результаты как реальных промышленных сценариев, так и синтетических тестов. Материал вызвал интерес и дискуссию: значит, он актуальный и полезный. Для кого-то факты стали убедительными, а кто-то усомнился в объективности результатов, поэтому, как и было обещано, я делюсь материалами сравнительного тестирования, выполненного по общепринятому стандарту TPC-DS. Сегодня вы узнаете, повлияла ли смена методики на результаты.

Читать далее

«IT-Планета 2025»: задачи второго этапа по PostgreSQL

Уровень сложностиПростой
Время на прочтение29 мин
Охват и читатели7.6K

Мы продолжаем свое участие в международной олимпиаде «IT-Планета».  Как и в прошлые годы, проводился конкурс по SQL, состоящий из трех этапов: теоретический и практический туры, проходящие онлайн, и финальный очный тур.

В первом туре участвовало свыше 4 500 человек, из которых 245 были отобраны во второй. В этом году я занимался разработкой задач и проведением первых двух туров. Предлагаю перейти к рассмотрению задач практического этапа.

Читать далее

Плохие JOIN’ы: приемы, которые (нечаянно) кладут прод

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели53K

Привет, Хабр!

В этой статье разбираем один из самых коварных способов убить базу — плохие JOIN'ы. Казалось бы, простое дело: связать пару таблиц — и вперёд. Но если в ON засунуть LOWER(email), забыть про индексы или перепутать LEFT JOIN с INNER — сервер мигом начнет дышать на ладан.

Читать далее

Как заставить вашу базу данных летать, а не ползать. Часть 2 – когда репликации недостаточно и пора использовать шардинг

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели13K

Всем привет! На связи снова Илья Криволапов — системный аналитик в SENSE, где мы трудимся на проекте одного из цветных банков РФ. Работаю в профессии уже пятый год и, несмотря на мою фамилию, с продом у нас в целом тёплые отношения. 

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

Цикл состоит из 3 частей. В первой мы обсудили два базовых подхода к масштабированию БД: вертикальный и горизонтальный. Поговорили о плюсах, минусах и о том, как делать точно не стоит. 

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

Материал по-прежнему будет полезен всем, кто заботится о «здоровье» базы данных: DBA, архитекторам, DevOps-инженерам, аналитикам и разработчикам.

Готовы продолжать? Тогда поехали!

Читать далее

Эпизод 1: «Скобка, паб и виски с валидацией»

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели537

KafkaRail гудел на фоне.

Паб The Broken Tag, где начиналось утро героев, только просыпался — запах старого эля, крошки лог‑файлов, и бильярдный стол под тусклым светом прожектора. Через узел маршрута /corp/news метропоезд пронёсся, как push‑уведомление на рассвете. День в Киберляндии начинался.

JSON откинул капюшон куртки BitStone Protocol с QR‑патчем на рукаве, кивнул Mr. Parseley и заказал, как обычно, Schema Fresca. Он прошёл к бильярдному столу английского пула, стоявшему под старым плакатом «Keep Calm and Close Tags», где RAMmy спорил с TryCatch о синтаксисе ударов.

Читать далее

Как настроить ежедневный алертинг по маркетинговым метрикам с помощью SQL

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели4.2K

Привет, Хабр! На связи Антон Прыгин, аналитик данных в Garage Eight. Расскажу, как с помощью простых SQL-запросов и базовых математических методов получилось построить систему ежедневного мониторинга и алертинга маркетинговых метрик, которая работает в связке с таск-трекером.

Погнали

Учимся читать SQL SELECT

Уровень сложностиПростой
Время на прочтение21 мин
Охват и читатели34K

Я отчётливо помню, как сидел на втором курсе на лабах по БД и долго и мучительно методом научного тыка подбирал порядок слов в SELECT-запросе с GROUP BY, чтобы он вернул нужный мне преподу результат. Потому что я не понимал, как работает SELECT, хотя был прилежным (на программистских курсах) студентом, ходил на все лекции и делал лабы за себя и пару "тех парней".

Двадцать лет спустя, когда я встал по ту сторону баррикад и начал сам вести лабы по БД, я столкнулся с той же самой проблемой уже у своих студентов. И, так как за двадцать лет я всё-таки понял, как работает SELECT, то придумал для них способ объяснения, который работает хорошо (в моей практике).

Читать далее

Витрина данных: сверка с эталоном

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.4K

Одним из этапов разработки витрин данных является тестирование результата и подтверждение корректности разработанного функционала. При этом организовано тестирование может быть по-разному.

Определим несколько видов тестирования:

1.     Технические тесты

Техническими тестами легко можно проверить корректность сборки витрины. Из основных видов технических тестов можно выделить:

·       Дубли - проверка на наличие дублей по ключу

·       Разрывы - проверка на разрывы в истории

·       Перекосы - проверка наложения исторических записей друг на друга

·       Даты - проверка корректности формирования дат

·       NULL в ключе - проверка NULL в ключевых и обязательных к заполнению полях

Подробно на этих тестах останавливаться не будем, информация по ним есть в открытом доступе.

2.     Бизнес-тесты

Это набор тестовых запросов, направленных на выявление ошибок в бизнес-данных. Как правило набор бизнес-тестов предоставляет владелец объекта.

Бизнес-тестов может быть великое множество, здесь все зависит от вашего бизнес-домена и от конкретных требований к витрине.

Приведу примеры некоторых бизнес-тестов:

Читать далее

Ошибки, которые можно избежать в SQL: грабли начинающего аналитика

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K

Привет Хабр! Меня зовут Алёна, я middle-продуктовый аналитик. В свободное время я рассказываю о реальных задачах с работы и делюсь материалами для тех, кто хочет стать аналитиком.

Если ты только начинаешь писать SQL-запросы — вот твой анти-фейл лист: с примерами, пояснениями и короткими лайфхаками, как не получить ошибку из-за лишнего JOIN или пропущенного WHERE.

Читать далее

Анализ плана выполнения запроса с оконной функцией в SQL Server (+бонус)

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели7.8K

В статье подробно разбирается план выполнения запроса с оконной функцией в MS SQL Server, проводится сравнительный тест производительности с альтернативным запросом.

Статья будет полезна разработчикам, работающим с аналитическими запросами в SQL Server, а также всем, кто хочет глубже понять логику оптимизатора и влияние различных факоров на планы выполнения.

Читать далее

Нашел, проверил, убедил: как мы организовали генерацию SQL-запросов, проверку сложных данных и при чем здесь Allure

Время на прочтение22 мин
Охват и читатели6.2K

Привет, Хабр!

Я, Михаил Герасимов, инженер РСХБ-Интех. Уже два года занимаюсь автоматизацией тестирования, и за это время успел написать (и переписать) немало SQL-запросов. Вместе с моим коллегой Михаилом Палыгой мы развиваем инструменты для автоматизированного тестирования, и сегодня расскажем вам о том как мы справляемся с построением сложных SQL-запросов и проверкой объектов в базе данных, на примере нашей библиотеки CheckMateDB для автоматизации тестирования банковской системы ЦФТ-Банк.

В статье опишем проблемы, с которыми сталкивались при ручном написании SQL-запросов и проверке данных: дублирование кода, сложность поддержки, отсутствие единого стиля и низкая информативность тестов. Для решения этих проблем мы разработали инструмент QueryBuilder, который позволяет динамически генерировать SQL-запросы с помощью Java-кода.

Мы создали иерархию классов CriteriaBasic и Table для удобного описания критериев поиска данных в базе, используя паттерн fluent interface. Также мы разработали кастомные классы проверок на базе AssertJ с поддержкой Allure-шагов, которые позволяют проверять сложные многоуровневые объекты с возможностью погружения во вложенные структуры. Для облегчения рутинной работы создали плагин, автоматически генерирующий классы DTO и Table на основе структуры базы данных. Библиотека интегрирована с Hibernate через DaoCommon, что обеспечивает удобное выполнение SQL-запросов и управление сессиями. Результатом стало существенное улучшение читаемости тестов, повышение переиспользуемости кода, стандартизация подхода к тестированию и создание информативных Allure-отчетов.

Читать далее

Пишем движок SQL на Spark. Часть 8: CREATE FUNCTION

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели2.2K
В предыдущих сериях ( 1 2 3 4 5 6 7 Ы ) рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL, заточенный на задачи подготовки и трансформации наборов данных, и работающий как тонкая прослойка поверх Spark RDD API.

Штука получилась довольно продвинутая, с поддержкой императивщины типа циклов/ветвлений/переменных, и даже с поддержкой пользовательских процедур. И в плане этой самой императивщины расширяемая: может импортировать функции из Java classpath, равно как и операторы выражений. То есть, если необходимо, можно написать функцию на Java, или определить новый оператор, и использовать потом в любом выражении на SQL.


Круто? Ещё как круто. Но как-то однобоко. Если в языке у нас поддерживаются функции, то почему бы не дать нашим пользователям определять их самостоятельно? Вот прямо через CREATE FUNCTION? Тем более, что вся необходимая для этого инфраструктура уже вовсю присутствует. Да и процедуры на уровне интерпретатора у нас уже поддерживаются ведь…



Функция для затравки.

Читать дальше →

Трассировка запросов в Postgres с расширением pg_trace

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.5K

В рамках статьи расскажем о расширении pg_trace, предназначенном для сбора трассировок запросов в PostgreSQL, соберем трассировку на реальном примере работы приложения, оценим влияние сбора трассировки на производительность и агрегируем данные трассировки.

Читать далее

Ближайшие события

Агрегированная витрина для дэшборда

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели954

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

Читать далее

T-SQL в .NET Core EF Core: Гибридный подход к производительности и гибкости (Переосмысление с учетом обсуждения)

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.6K

Секретное оружие в .NET Core: Почему вы игнорируете мощь T-SQL?

Ваши LINQ-запросы становятся громоздкими? Производительность упирается в потолок? Возможно, вы упускаете нечто важное.

Эта статья — приглашение взглянуть на привычные инструменты под новым углом. Мы исследуем гибридный подход, который позволяет использовать весь потенциал Microsoft SQL Server, выходя за рамки стандартного взаимодействия через EF Core. Узнайте, как T-SQL может упростить сложные задачи, повысить производительность и сделать вашу архитектуру более гибкой.

Это не просто технический трюк, а переосмысление роли СУБД в современном приложении. Готовы узнать, как использовать "скрытые" возможности MSSQL и почему это может быть именно то, что нужно вашему проекту?

Читать об этом

Массивы вместо self-join: как писать быстрые запросы в ClickHouse

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели9.1K

Привет, Хабр! Я — Максим Шитилов, продуктовый аналитик в каршеринг-сервисе Ситидрайв. Каждый день мы обрабатываем большие объёмы данных, и ClickHouse — один из наших ключевых инструментов. Если вы когда-либо пытались связать события с временными интервалами или рассчитать метрику за определённое окно после события, то наверняка сталкивались с типичной конструкцией на self-join. Вроде бы работает, но запрос становится громоздким, ресурсоёмким и плохо масштабируется.

В этой статье я расскажу, как решать такие задачи проще и эффективнее — с помощью массивов, arrayFilter и arrayMap. Покажу, как отказаться от self-join’ов без потери точности, ускорить обработку и упростить код. Примеры — из реальных бизнес-кейсов: телеметрия, аренды, GMV и события, которые нужно связать между собой по времени. Так как схожих решений на просторах интернета я не нашёл, предлагаю назвать этот подход «Array Join Pattern». Если метод окажется полезным для сообщества, то такой паттерн легко будет найти другим аналитикам и девам.

Читать далее

PondPilot: как мы сделали локальный SQL-редактор в браузере на DuckDB и WASM

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели4.6K

Любой, кто хоть раз пытался «по-быстрому» проанализировать CSV-файл или прототип БД, сталкивался с выбором из неудобств: открывать в Excel, запускать Jupyter, возиться с pandas, или поднимать Postgres/ClickHouse ради пары запросов. Мне показалось странным, что в 2025 году до сих пор нет удобной zero-setup SQL-песочницы для локальных данных.

Так родился PondPilot - open-source инструмент для анализа данных, работающий прямо в браузере, без серверов и настройки.

Читать далее

Быстрый старт в маскировании данных PostgreSQL с инструментом pg_anon

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели6K

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

В этой статье разберём, зачем нужно маскирование, какие данные требуют защиты, и представим opensource-инструмент, который поможет решить эти задачи гибко и эффективно.

Читать далее

Начало пути в тысячу миль: от Excel до SSRS

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.8K

Мне 25, последние несколько лет я работаю в аналитическом отделе одного из департаментов Правительства города Москвы. Занимаюсь сведением бесконечных таблиц с регулярной отчетностью и подготовкой презентаций на самые разнообразные сюжеты.

Назвать ту работу — работой мечты, сложно, как ни крути. Трудозатраты на сбор, обработку и визуализацию информации были так велики, что уход с работы в десять вечера был для меня настоящим праздником. Именно этот «спартанский» опыт вкупе с желанием доказать себе, что разобраться можно в чем угодно, побудил меня к изучению доселе неведомого для мира баз данных, языка запросов SQL, BI и ETL инструментов.

Как вы, возможно, уже поняли, в аналитику я попал не по зову сердца, а по воле случая. Хантер Томпсон внутри меня, конечно, предпочел бы писать колонки в модные журналы, вести собственный блог о литературе или теннисе, в который я играю с детства, ну или посвятить себя еще какой-то творческой ерундистике, окрыляющей не хуже Red Bull Cola. Не смейтесь, исчезновение этого напитка с полок магазинов стало для меня в свое время настоящей трагедией.

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

Итак, осознание того, что автоматизация процессов востребована на рынке и облегчает собственное существование, становится стартовой точкой долгого пути от полного непонимания азов работы с базами данных до уверенного владения всеми необходимыми инструментами для управления подразделением, обеспечивающим data-driven подход к решению задач внутри компании.

Читать далее

85 вопросов на собеседовании разработчика QlikView/Qlik Sense (с ответами)

Уровень сложностиСредний
Время на прочтение56 мин
Охват и читатели9.4K

Всем привет! Меня зовут Александр Андреев, я старший SRE дата-инженер и бывший BI/DWH-разработчик с многолетним опытом работы с BI‑платформой QlikView/Qlik Sense. В своей статье‑шпаргалке я хочу поделиться с вами практически всеми возможными вопросами и ответами с собеседований на должность Qlik‑разработчика. Данная шпаргалка гарантированно закроет 99% возможных вопросов на собеседованиях на позиции, где упоминается Qlik в качестве BI‑системы. Таких позиций с каждым годом все больше, причем знание Qlik в качестве BI‑системы требуют как с чистых «биайщиков», так и с дата‑инженеров на некоторых сеньорских и lead позициях.

Подготовка к собеседованию на позицию с QlikView/Qlik Sense в качестве BI‑системы требует глубокого понимания как базовых концепций, так и продвинутых техник работы с платформой. В этой статье я собрал 85 наиболее важных вопросов, которые помогут вам систематизировать знания и успешно пройти техническое интервью.

Читать далее