Представьте ситуацию: вы получаете на ревью SQL-запрос от коллеги, и от его корректности зависит принятие важного бизнес-решения. Ошибки в запросах могут привести к неверным данным, дополнительным затратам времени на исправление, излишней нагрузки на БД, а в последствии и принятия неверных решений заказчиками.  В такие моменты лучше иметь под рукой четкий и структурированный план проверки, который позволит убедиться, что запрос выполнен правильно и оптимально. Чек-лист отличный инструментом для ревью SQL-запросов.

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

Для джунов, которые только начинают свой путь в аналитике, чек-лист служит важным ориентиром, который помогает структурировать процесс проверки и не упустить важные детали. Это своего рода дорожная карта, которая обеспечивает последовательность действий и снижает стресс, связанный с возможными ошибками. Джунам часто сложно сразу учесть все нюансы при составлении и ревью SQL-запросов, и чек-лист становится их «спасательным кругом».

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

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

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

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

Корректность запроса

✅ Убедитесь, что запрос выполняется без синтаксических ошибок.

✅ Проверьте на отсутствие дублирующихся данных.

✅ Убедитесь, что запрос возвращает корректные данные, соответствующие ожиданиям заказчика.

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

✅ Убедитесь, что персональные данные не выводятся, кроме случаев, когда это оговорено.

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

Оптимизация

✅ Если запрос выполняется долго, рассмотрите создание специальной таблицы в базе данных и дага для ее обновления, если запрос предполагает обновление данных.

✅ Разбейте большой CTE на отдельные запросы с созданием физических таблиц для ускорения выполнения.

✅ Применяйте фильтрацию данных, когда это уместно.

✅ Используйте индексы и правильно выбирайте движки для таблиц (актуально для Clickhouse), если это возможно.

Читаемость

✅ Добавьте комментарии для сложных частей запроса.

✅ Сведите большую вложенность подзапросов в CTE для улучшения читаемости.

✅ Отформатируйте запрос для легкости чтения (используйте отступы, выравнивание).

Эффективность

✅ Проверьте, что запрос выполняется за адекватное время (определите, что это значит для вашей компании).

✅ Используйте агрегатные функции и группировки только когда это необходимо.

Этот чек-лист поможет вам уверенно ревьюить SQL-запросы и обеспечить их качество. А какие пункты вы бы добавили в этот чек-лист? Делитесь своими идеями и дополнениями в комментариях!

Комментарии (10)


  1. Adgh
    20.08.2024 07:26
    +3

    Тот случай, когда сил хватило только на запрос в GigaChat ?


    1. Alice-Goncharova Автор
      20.08.2024 07:26

      GigaChat не пробовала. Для написания этой статьи я написала черновой вариант и потом попросила ChatGpt поправить речевые обороты, упростив некоторые предложения. Не вижу в этом ничего плохого, если это сделает статью лучше. В остальном текст оригинальный, если не считать, что некоторые пункты мы писали вместе с коллегами, основан на моем опыте работе аналитиком данных.


  1. Akina
    20.08.2024 07:26
    +4

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

    Да, второй пункт в разделе "Читаемость" какой-то совершенно невменяемый, я так и не смог понять, что имеется в виду.


  1. Batalmv
    20.08.2024 07:26
    +5

    Честно говоря, выглядит подозрительно :)

    Убедитесь, что запрос выполняется без синтаксических ошибок.

    На самом деле он НЕ выполняется :)

    Убедитесь, что запрос возвращает корректные данные, соответствующие ожиданиям заказчика.

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

    В этом предложении по сути спрятан целый процесс тестрования :) Интересно, как автор вообще это видит?

    Убедитесь, что персональные данные не выводятся, кроме случаев, когда это оговорено.

    Это вообще какой-то локальный "прибамбас". Куда выводятся, кому выводятся? А почему нельзя?

    Вот к примеру HIPPA. И ... почему запрос не может выдавать персональные данные. Запрос может делать все что угодно, доступ к данных ограничивается для физ. и юр. лиц.

    Это вообще что-то эпическое, уже запросам персональные данные не дают смотреть :)

    -----------

    Дальше комментить смысла нет, просто накидано что-то абы написать. Оптимизация по хорошему начинается с:

    • проверили корректность

    • констатации факта, что долго

    • ... тут возможно озарение ... или очевидный косяк

    • изучения плана запроса, если озарения не случилось

    -----------

    Читаемость ... о боги, куча тулов имеют "скрытую" кнопку "Format". Тыцни раз и наслаждайся :)

    Вот уж правду говорят, что "водители" после года-двух за рулем думают что они уже все знают и умеют


  1. ptr128
    20.08.2024 07:26
    +4

    Первым пунктом должно было быть: "Посмотреть план запроса". А уже после этого будет понятно, стоит ли вообще этот запрос запускать, или он будет часами выполняться


    1. JoshMil
      20.08.2024 07:26

      А может и отменяться).


    1. JoshMil
      20.08.2024 07:26

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


      1. ptr128
        20.08.2024 07:26

        После того, как неоднократно аналитики запускали такие запросы и отправляли SSMS в фон, занимаясь другими делами, у нас такое категорически запретили. Ладно, что они сервер и сеть без толку грузили, так потом у них еще всё падает, когда место на диске заканчивается. Естественно, с истошными криками, что пропал день работы над каким-то документом.

        Я сам не раз вычищал после таких аналитиков на терминальном сервере временные файлы SSMS размером в сотни гигабайт. Терминалка, минимум, на сорокагигабитке, сервер - так вообще, на стогигабитке, если не на нескольких. Так что 3-3.5 ГБ в секунду прилетают вообще без проблем.


  1. Z55
    20.08.2024 07:26
    +4

    Извините за прямоту, но в статье кроме бреда ничего нет


  1. rinace
    20.08.2024 07:26

    Чек лист типа - "как собрать звездолёт в гараже".

    P.S. Звездолёт Lego - вполне реально .