Как стать автором
Обновить
52.96

SQL *

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

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

Собеседования в сфере Data Science и распространённые приёмы работы с датами в SQL

Время на прочтение5 мин
Количество просмотров8.6K
Поговорим о распространённых приёмах работы с датами, которые находят применение на Data Science-собеседованиях и в обычной работе. При анализе данных весьма часто возникает необходимость извлечения из полей, хранящих даты, их частей, вроде года, дня или месяца. Нередко тому, кто проходит собеседование, предлагают, на основе поля, содержащего дату, вычислить или подсчитать какие-то показатели, сгруппированные по годам или по месяцам. Но подобное поле содержит информацию, сгруппированную по дням, поэтому для решения вышеописанной задачи нужно просто агрегировать данные на уровне месяцев или лет.



Аналитикам, занимающимся самыми разными делами, часто приходится решать подобные задачи. Но при их решении можно столкнуться с некоторыми сложностями. Например:

  1. Существует множество различных функций, которые либо делают одно и то же, либо работают схожим образом, но отличаются в некоторых деталях. Сложно выбрать именно ту функцию, которая нужна при решении конкретной задачи.
  2. В разных диалектах SQL имеются различные функции. Поэтому функция, которая подошла бы при работе с Postgres, может оказаться совсем неподходящей при работе с MySQL.
  3. Столбец в базе данных может иметь неподходящий формат или тип данных. Поэтому придётся потратить некоторое время на преобразование данных и на приведение их в подходящий вид. Это тоже может усложнить задачу.

Давайте начнём с самого простого. А именно — рассмотрим один SQL-пример и разберём несколько функций, которые можно использовать для разбора дат на составные части. Подобными делами часто приходится заниматься тому, кто работает в сфере Data Science. А вот — видеодемонстрация приёмов работы с датами в SQL.
Читать дальше →

Напильник и щепотка фантазии… или как слепить Enterprise из SQL Server Express Edition

Время на прочтение27 мин
Количество просмотров10K
Проснись… ты всегда ощущал, что мир не в порядке. Странная мысль, но ее не отогнать – она как заноза в мозгу. Ты всю жизнь живешь в темнице ограничений и правил, навязанных всесильным Майкрософтом, и даже не осознаешь этого.

Нажмешь дизлайк и сказке конец – ты закроешь вкладку и продолжишь бесцельно бродить по рекомендациям Хабра и YouTube.

Захочешь продолжить и войдешь в страну чудес – я покажу тебе насколько глубока… невозможная… кроличья нора успешной разработки на SQL Server Express Edition.

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

DBA: «Кто-то слишком много ест!»

Время на прочтение6 мин
Количество просмотров16K

Тема "распухания" таблиц и индексов из-за реализации MVCC - больная для пользователей и администраторов PostgreSQL.

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

Но, помимо влияния на скорость, есть еще и факт влияния на занятое место. Наверное, вы сильно удивитесь, если таблица с единственной "живой" записью после успешного прохода autovacuum продолжит занимать гигабайты пространства на дорогих SSD.

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

Читать далее

Анализ качества сна с машинным обучением, Python и SQL

Время на прочтение7 мин
Количество просмотров4.7K

Последние примерно 2 месяца я ношу кольцо Oura, чтобы получать информацию о моём сне и о том, сколько я прошла шагов за день. Приложение считывает сон, разбитый на фазы (лёгкий, глубокий, быстрый), и даёт вам другие показатели, такие как частота сердечных сокращений, температура тела и частота дыхания. И для такого ботаника, как я, радостно было обнаружить, что у Oura есть API экспорта данных, чтобы я смогла лучше проанализировать их. Я загрузила данные в BigQuery и воспользовалась функцией CORR() (она потрясающая!), чтобы увидеть, какие показатели коррелируют с улучшением качества сна, а также визуализировала некоторые данные в Data Studio. Если у вас мало времени, переходите к разделу «Заключение», чтобы прочитать о том, что я узнала.

Дисклеймер: я не врач. Как раз наоборот: я ипохондрик, которому нравится писать на Python и SQL.
Приятного чтения!

Работа с dbt на базе Google BigQuery

Время на прочтение9 мин
Количество просмотров6.8K

На днях смотрел вебинар OWOX, где Андрей Осипов (веб-аналитик, автор блога web-analytics.me и лектор Школы веб-аналитики Андрея Осипова) рассказал о своем опыте использования dbt. Говорил о том, кому будет полезен инструмент и какие проблемы решает, а самое главное — как не свихнуться со сложной иерархией таблиц и быть уверенным, что все данные считаются корректно. Я решил расшифровать вебинар в статью, потому что так удобнее возвращаться к информации, а она тут, поверьте, того стоит.

Читать далее

Как совершить транзакцию в Nest.js

Время на прочтение15 мин
Количество просмотров10K

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

Как же совершать их, если вы пишите backend на Node.js + Nest.js?

Ну и как?

SQL для аналитики — рейтинг прикладных задач с решениями

Время на прочтение11 мин
Количество просмотров51K

Привет, Хабр! У кого из вас black belt на sql-ex.ru, признавайтесь? На заре своей карьеры я немало времени провел на этом сайте, практикуясь и оттачивая навыки. Должен отметить, что это было увлекательное и вознаграждающее путешествие. Пришло время воздать должное.

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

Читать далее

Агрегаты в БД — прокси-таблицы

Время на прочтение4 мин
Количество просмотров8K

Мы заканчиваем мини-серию статей о работе с агрегатами в PostgreSQL:

- зачем, как, а стоит ли?

- эффективная обработка потока «фактов»

- многомерные суперагрегаты

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

Читать далее

PostgreSQL 14: Часть 4 или «январское наступление» (Коммитфест 2021-01)

Время на прочтение20 мин
Количество просмотров9.8K
PostgreSQL 14 наступает! После первых трех относительно скромных коммитфестов (июльский, сентябрьский, ноябрьский) пошли крупные изменения.

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

  • Могут ли диапазоны содержать пропуски значений?
  • Зачем нужна индексная нотация типу json?
  • Может ли индекс при частых обновлениях разрастаться меньше, чем таблица? А вообще не разрастаться?
  • Сколько времени простаивали сеансы в idle_in_transaction?
  • Как построить ER-диаграмму для таблиц системного каталога?

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

Oracle: разница между deterministic и result_cache

Время на прочтение7 мин
Количество просмотров14K

От переводчика: свой путь на habr я решил начать не с попытки написать какой-то уникальный текст с нуля, а с перевода относительно свежей (от 17.08.2020) статьи классика PL/SQL-разработки Стивена Фойерштайна, в которой он достаточно подробно рассматривает разницу между двумя основными вариантами кэша результатов выполнения PL/SQL функций. Надеюсь, что этот перевод будет полезен для многих разработчиков, начинающих работу с технологиями Oracle.

В этой статье будут рассмотрены две возможности Oracle Database - создание детерминированных функций (deterministic) и функций, использующий общий кэш результатов исполнения (result_cache). Будут показаны основные сценарии использование каждого из этих видов функций, требования к ним и основные сценарии использования.

Читать далее

Агрегаты в БД — многомерные суперагрегаты

Время на прочтение4 мин
Количество просмотров4.6K

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

Сегодня мы рассмотрим более сложный вариант, который зачастую начинается со слов "А заказчик захотел…" и приводит нас к иерархичным агрегатам в нескольких одновременных разрезах, которые позволяют нам в СБИС практически мгновенно строить оперативные отчеты в подсистемах организации торговли, бухгалтерского учета и даже управления активными продажами.

Читать далее

SQL миграции в Postgres. Часть 1

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров40K

Как обновить значение атрибута для всех записей таблицы? Как добавить первичный или уникальный ключ в таблицу? Как разбить таблицу на две? Как ... 

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

На эти и другие вопросы, возникающие при проведении миграций схемы и данных в PostgreSQL, постараемся дать ответы в виде практических советов.
Читать дальше →

Упрощенный синтаксис для jsonb в PostgreSQL 14

Время на прочтение1 мин
Количество просмотров10K

Как сообщает telegram-канал Cross Join, в репозиторий Postgres упал комит, упрощающий работу с jsonb. Теперь можно обращаться к частям jsonb с помощью квадратных скобок, причем это работает как на чтение, так и на запись.


Прощай jsonb_set  и прочие костыли типа data = data - 'a' || '{"a":5}'


Несколько примеров:


Обновляем значение объекта по ключу. 25 здесь является числом, но взято в кавычки, потому что присваиваемое значение должно быть jsonb


-- (person_data имеет тип jsonb)
UPDATE users 
SET person_data['age'] = '25'; 
Читать дальше →

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

Агрегаты в БД — эффективная обработка потока «фактов»

Время на прочтение5 мин
Количество просмотров5.1K

Предположим, вам надо обработать на PostgreSQL большое (не, не так... БОЛЬШОЕ) количество записей, чтобы посчитать какие-нибудь агрегаты. В предыдущей статье были разобраны различные варианты, как это можно организовать, а в этой посмотрим, как при этом особо никого не заблокировать, включая "набегающий поток" данных.

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

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

Читать далее

Расширение кластера PostgreSQL размером 5,7 ТБ и переход с версии 9.6 на 12.4

Время на прочтение5 мин
Количество просмотров8.9K

Фото Ричарда Джекобса на Unsplash

В ноябре 2020 года мы начали крупную миграцию для обновления кластера PostgreSQL с версии 9.6 на 12.4. В этом посте я вкратце расскажу про нашу архитектуру в компании Coffee Meets Bagel, объясню, как даунтайм апгрейда удалось снизить ниже 30 минут, и расскажу про то, что мы узнали в процессе.
Читать дальше →

Эволюция моих SQL запросов

Время на прочтение4 мин
Количество просмотров20K

Всем привет! Я тимлид и Senior Oracle Developer, 12 лет работаю с OeBS и в основном пишу SQL запросы. Хотел бы рассказать, как за это время менялся мой подход в написании SQL запросов.

Читать далее

Агрегаты в БД — зачем, как, а стоит ли?

Время на прочтение5 мин
Количество просмотров15K

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

Если это какая-то локальная утилита - не страшно, само ее существование у пользователя достаточно ограничено. Но если это что-то вроде нашего СБИС, который накапливает и помогает анализировать операции за все время существования бизнеса, то, по мере его роста, не только операций становится больше, но и понимания, какие именно сводные отчеты помогают в оперативном управлении.

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

Читать далее

Сквозная Аналитика на Azure SQL + dbt + Github Actions + Metabase

Время на прочтение12 мин
Количество просмотров8.3K

Title


Привет, Хабр! Меня зовут Артемий Козырь.


За последние годы у меня накопился довольно обширный опыт работы с данными и тем, что сейчас называют Big Data.


Не так давно также разгорелся интерес к сфере интернет-маркетинга и Сквозной Аналитики, и не на пустом месте. Мой друг из действующего агентства снабдил меня данными и кейсами реальных клиентов, и тут засквозило понеслось.
Получается довольно интересно: Azure SQL + dbt + Github Actions + Metabase.

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

DBA: Ночной Дозор

Время на прочтение3 мин
Количество просмотров7.7K

Для многих систем характерен паттерн постоянного накопления данных с течением времени. Причем основная их масса больше никогда не изменяется - то есть они пишутся в режиме append-only.

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

Около года назад я уже писал про модель организации секционирования таких данных и вызываемые этим каскадные изменения в структуре БД. А сегодня на примере нашего сервиса анализа логов PostgreSQL-серверов разберем особенности обслуживания организованных так баз, и как грамотный подход (и немного ночной работы) может сократить затраты на инфраструктуру в разы.

Читать далее

Что такое транзакция

Время на прочтение6 мин
Количество просмотров214K

Транзация — это набор операций по работе с базой данных, объединенных в одну атомарную пачку.

Транзакционные базы данных (базы, работающие через транзакции) выполняют требования ACID, которые обеспечивают безопасность данных. В том числе финансовых данных ? Поэтому разработчики их и выбирают.

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

 

Читать далее

Вклад авторов