Аналитические функции обеспечивают невероятно мощный и в то же время простой в реализации способ обработки и анализа данных. Этот пост покажет вам, как включать аналитические функции в ваши операторы SQL.

Как профессионал в области аналитики, вы, вероятно, окажетесь в ситуации, когда вам потребуется запрашивать данные для анализа. Довольно часто данные берутся из базы данных SQL, а затем импортируются через язык программирования, такой как Python, с использованием мощных фреймворков, таких как Pandas или NumPy. Это отличный конвейер для работы с данными, однако тяжелая работа в основном выполняется на вашей локальной машине. С небольшими наборами данных это не проблема, но когда дело доходит до больших наборов данных, могут возникнуть проблемы с выполнением тяжелой обработки исключительно в локальной памяти ПК.

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

Представьте, что вы работаете в производственной компании и вам интересно собирать данные с датчиков машин. Эти данные часто собираются часто и могут быть довольно зашумленными. Чтобы лучше понять, что происходит с вашей машиной, сглаживание и предварительная обработка плотно собранных данных (например, измерения могут собираться несколько раз в секунду) быстро приводят к огромным размерам набора данных! Предположим, у нас есть 150 датчиков, расположенных рядом с машиной, и каждый из них считывает 4 измерения в секунду. Тогда один-единственный день произведет

4×60×60×24x150 ≈ 52 млн записей (показания x секунды x минуты x часы x датчики)

точки данных. Обычно, как правило, мы смотрим данные как минимум за одну неделю (но мы также можем увеличить показания или даже количество датчиков)… вы видите, к чему это идет.

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

Ключевой вывод:

Всякий раз, когда вы видите необходимость в скользящем / движущемся окне или вычислениях в пределах логического раздела (например, непрерывное ранжирование, наименьшее или наибольшее значение, в определенной группе датчиков), это, безусловно, стоит…