sqlhub | Unsorted

Telegram-канал sqlhub - Data Science. SQL hub

36043

По всем вопросам- @workakkk @itchannels_telegram - 🔥лучшие ит-каналы @ai_machinelearning_big_data - Machine learning @pythonl - Python @pythonlbooks- python книги📚 @datascienceiot - ml книги📚 РКН: https://vk.cc/cIi9vo

Subscribe to a channel

Data Science. SQL hub

💻Открытая книга «PostgreSQL 16 изнутри

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

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

📎 PDF

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Внутренности PostgreSQL: как добавить новую функцию

При разработке пача для PostgreSQL иногда требуется добавить новую функцию, чтобы ее можно было вызывать из SQL.
Собственно, об этом и идёт речь в статье.

Сразу можно отметить 2 момента. Во-первых, некоторые функции имеет смысл добавлять не в ядро системы, а поместить в отдельное расширение — либо стороннее, либо идущее вместе с PostgreSQL и живущее в каталоге /contrib/. Во-вторых, pg_proc.dat является удобной точкой входа для изучения внутренностей PostgreSQL. Также файл бывает полезен, когда вы примерно понимаете, какую функцию ищите, но не знаете ее название.

📎 Статья

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Большое ли преимущество использования IN вместо нескольких OR в SQL?

▶️Скажем, какой из этих 2 примеров более эффективен?
Этот:

SELECT *
FROM table
WHERE property IN ('a','b','c')


или вот этот:
SELECT *
FROM table
WHERE property='a' OR property='b' OR property='c'



▶️Если говорить про абстрактный SQL - никакой разницы нет. Есть много способов попросить достать одни и те же данные. Впрочем, с точки зрения читаемости человеком in явно выигрывает из-за компактности.

А если рассматривать конкретные реализации - то различия могут быть. Например, postgresql строит разные планы для IN и OR:
explain select * from bigtable where id = 1 or id = 3 or id=4;
QUERY PLAN
----------------------------------
Bitmap Heap Scan on bigtable (cost=13.34..25.34 rows=3 width=12)
Recheck Cond: ((id = 1) OR (id = 3) OR (id = 4))
-> BitmapOr (cost=13.34..13.34 rows=3 width=0)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 1)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 3)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 4)


explain select * from bigtable where id in (1,3,4);
QUERY PLAN
----------------------------------
Index Scan using bigtable_pkey on bigtable (cost=0.44..17.37 rows=3 width=12)
Index Cond: (id = ANY ('{1,3,4}'::integer[]))


Как можно заметить, IN был переписан в другую форму и оценён дешевле, чем несколько эквивалентных OR.
Какие-то другие СУБД может быть переписывают оба запроса в идентичное представление, или же переписывают IN в группу OR. Вопросы производительности необходимо рассматривать только в рамках какой-то конкретной реализации.

Вот такие дела

@sqlhub

Читать полностью…

Data Science. SQL hub

💻 Статический анализ структуры базы данных

Такой анализ потенциальных проблем в базе данных имеет очевидные преимущества:

анализ можно проводить в любой среде (dev/test/prod) и даже на пустой БД, где нет данных (бэкап структуры без данных)

затраты ресурсов зависят только от количества объектов в БД и количества проверок, а не от объема данных или качества приближения тестовых данных и запросов к реальным

статический анализ может быть встроен в CI как элемент повышения качества разработки

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

Подробнее об этом тут:
📎 Статья

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Исправление клиентской кодировки PostgreSQL с LATIN1 на UTF8

▶️Итак, реальный кейс. На сайте был один баг, который проявлялся при попытке прикрепления к сообщениям файлов, названия которых были на кириллице. В данном случае сайт выдавал ошибку 503. Это происходило несмотря на то, что кодировка базы данных была в UTF8. Тогда как Django выдавал следующее сообщение:

'latin-1' codec can't encode characters in position 55-64: ordinal not in range(256)


Проблема заключалась в том, что кодировка сервера была первоначально выставлена в LATIN1. То есть следующие команды давали следующий вывод:
postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- LATIN1(1 row) postgres=# \encoding  LATIN1


Выполнение команды SET CLIENT_ENCODING TO 'utf8'; не давало результата, после выхода из psql кодировка возвращалась в LATIN1 .


▶️Исправление. Исправление данного бага свелось к настройке кодировки самого сервера. Поскольку в первую очередь сервер русскоязычный, то для исправления была произведена установка русскоязычных пакетов локалей.
sudo apt-get install language-pack-ru


Выполнение процесса русификации
sudo update-locale LANG=ru_RU.UTF-8


И перезагрузка сервера
sudo reboot


После этого кодировка клиента сервера стала UTF8
postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- UTF8(1 row) postgres=# \encoding  UTF8


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

@sqlhub

Читать полностью…

Data Science. SQL hub

💻PostgreSQL: исполнение запроса из Bash-скрипта

Для выполнения запроса в PostgreSQL от имени пользователя 'postgres' используйте команду:

sudo -u postgres psql -d dbname -c "SELECT * FROM table;"

Здесь dbname — это название вашей БД, table – имя таблицы.
Разумеется, используем права суперпользователя sudo для переключения пользователя на postgres, psql является инструментом командной строки PostgreSQL, а ключ -c нужен для выполнения конкретного запроса.

Для более аккуратного форматирования вывода можно использовать ключ -t, который выводит данные построчно, и -X для того, чтобы .psqlrc не обрабатывался командой psql.

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

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Коллекция готовых SQL-запросов для PostgreSQL

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

В том числе здесь:
Обсуждаются различные функции и операторы для выполнения запросов и модификации данных

Рассматриваются способы разбиения больших таблиц на N тысяч записей и распараллеливания запросов

Обсуждаются особенности сравнения record и NULL и способы быстрого получения количества записей в большой таблице

Рассматриваются рекурсивные запросы, модификация пользовательских данных (UPSERT) и журналирование изменений таблицы

Рассматриваются модификации схемы данных (DDL) и способы добавления ограничений таблицы и изменения ограничений внешнего ключа без блокирования таблицы

📎 Коллекция

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Исследователи обнаружили, что GitHub Copilot генерирует уязвимые SQL-запросы (да и не только SQL-запросы)

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

Snyk провела эксперимент, чтобы доказать способность GitHub Copilot генерировать уязвимый код на основе такого же в проекте. На 1 этапе исследователи попросили ИИ-помощника сгенерировать SQL-запрос и получили это:

// create query to match input with the description or product name
var query = em.createQuery("SELECT p FROM Product p WHERE LOWER(p.description) like OR lower(p.productName) like :input", Product.class);

Это качественный и безопасный запрос с именованными параметрами, что делает невозможным использование инъекций.

После этого в соседнем файле проекта самостоятельно написали уязвимый SQL-запрос и снова попросили нейросеть написать код. Во второй раз GitHub Copilot сгенерировал следующий фрагмент:
// create query to match input with the description or product name
String query = "Select * from Product where lower(description) like '%" + lowerInput + "%' OR lower(product_name) like '%" + lowerInput + "%'";

Для контекста нейросеть использовала уязвимый код и на его основе сгенерировала ещё одну ошибку.

Факторы, усугубляющие использование GitHub Copilot:

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

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

Устаревшие шаблоны. GitHub Copilot может предлагать фрагменты, которые в сообществе уже признаны неверными и содержащими ошибки.

Будьте аккуратнее, в общем)

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Загрузка SQL-таблиц в Pandas DataFrames позволяет анализировать и предварительно обрабатывать данные, используя богатый функционал pandas.

Чтобы загрузить таблицу SQL в pandas DataFrame, передайте соединение с базой данных, полученное от SQLAlchemy Engine, методу pandas read_sql.

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Jless —   полезный инструмент для просмотра JSON-файлов в командной строке.

Отображение данных в удобном виде — с подсветкой синтаксиса для отдельных элементов объекта. Инструмент позволяет обрабатывать и расширять массивы.

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

Github
Docs

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Полезная шпаргалка SQL

Это руководство охватывает широкий спектр тем, начиная от основных команд SQL и заканчивая продвинутыми темами.

Материао сопровождается практичесикми примерами, которые помогут вам лучше усвоить материал.

@sqlhub

Читать полностью…

Data Science. SQL hub

SCDB: простая Open Source БД типа «ключ — значение»

Представляем SCDB, то есть Solid-Core-Database. Этот проект еще находится на ранних стадиях разработки и задуман для решения задач и проблем разработчиков.

Что такое SCDB?

▪️scdb  — легковесная, простая и скоростная подсистема хранения данных типа «ключ — значение». Сделана она по примеру архитектуры хранилища Bitcask, эффективной при операциях записи.
▪️Основной принцип проектирования scdb и Bitcask  — журналируемые файловые системы. Здесь все изменения добавляются в конец журнала, а записи очень быстрые, так как выполняются последовательно. При таком построении, помимо скорости, обеспечивается целостность данных: даже в случае отказа системы они легко восстанавливаются благодаря этому методу с возможностью только добавлять.
▪️В scdb реализован процесс объединения лог-файлов. Со временем вместе с записываемыми приложением данными увеличивается и количество лог-файлов. Объединением лог-файлов предотвращается фрагментация, поддерживается производительность. Для данных это как домашняя уборка, после которой хранилище остается организованным и эффективным.
▪️Созданная для беспроблемного хранения и извлечения пар «ключ — значение», SCDB придется кстати разработчикам приложений с быстрой записью данных и простым, но надежным хранилищем.

Пример:

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

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Как вы решаете, какой тип базы данных использовать?

Сегодня существуют сотни и даже тысячи баз данных, таких как Oracle, MySQL, MariaDB, SQLite, PostgreSQL, Redis, ClickHouse, MongoDB, S3, Ceph и т. д. Как выбрать архитектуру для своей системы? Вкратце я могу сказать следующее:

🔹Реляционные базы данных. С их помощью можно решить практически любую задачу.
🔹In-memory СУБД это система управления базами данных, которая хранит информацию непосредственно в оперативной памяти.
🔹Базы данных временных рядов. Хранят и управляют данными с временными метками.
🔹Графовая база данных. Подходит для сложных отношений между неструктурированными объектами.
🔹Документное хранилище. Хорошо подходят для больших неизменяемых данных.
🔹Хранилище широких колонок. Обычно используются для больших данных, аналитики, отчетности и т. д., где требуются денормализованные данные.

Очевидно, что тут не описаны все типы баз данных.

Есть ли что-то еще, что вы часто используете, и почему вы выбрали именно эту технологию?

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Поиск строк в одной таблице, отсутствующих в другой, в Oracle Database с помощью

t1 MINUS t2

Любые дубликаты строк только в T1 исключаются из результатов

В 21c добавлен MINUS ALL, который возвращает избыточные дубликаты.

Также добавлен синоним MINUS - EXCEPT, соответствующий стандарту #SQL

Oператор MINUS используется для возврата всех строк первого запроса SELECT, не возвращаемых вторым SELECT.

@sqlhub

Читать полностью…

Data Science. SQL hub

Новый год — старт для ваших новых карьерных возможностей 🎄
6 февраля приглашаем на Зимнюю ярмарку вакансий, которая пройдёт офлайн и онлайн. Это классная возможность стать частью IT-сообщества Яндекса и познакомиться с теми, кто создаёт сервисы с многомиллионной аудиторией.

Что вас ждёт
🔸 Вакансии для стажёров
Узнаете о новых вакансиях и задачах, а также сможете лично пообщаться с командами и подать заявку туда, где понравится больше всего.
🔸 Полезные лекции
Узнаете о технологиях и кейсах из практики от экспертов Яндекса. Лекции пройдут по основным направлениям стажировки: бэкенд, фронтенд, мобильная разработка, аналитика и машинное обучение.
🔸 Нетворкинг со стажёрами Яндекса
Узнаете, как они проходили отбор, как готовились и чем планируют заниматься дальше. Сейчас в Яндексе одновременно стажируются более 600 человек — им есть что рассказать.

Как попасть на Зимнюю ярмарку вакансий
Чтобы попасть на ярмарку, нужно пройти предварительный отбор — решить задачи на Яндекс Контесте до 31 января включительно. Мы проверим решения, оценим анкеты и позовём лучших на день стажёра в Москве. Приглашения придут до 2 февраля включительно.

🍭 Закрытое шоу
Тех, кто решит все задачи из Контеста, мы пригласим на вечернее закрытое шоу «Всё в плюсе». Это соревнование между различными бизнес-группами Яндекса, в которых примут участие и стажёры, и топовые разработчики. Знакомство с различными сервисами, нетворкинг с действующими стажёрами, вечеринка с кавер-группой и диджеем — это то, что ждёт вас на шоу.
Узнать подробности и подать заявку — https://yandex.ru/yaintern/intern-day.

Читать полностью…

Data Science. SQL hub

💻Утилита стратегического мониторинга PostgreSQL

Основная задача стратегического мониторинга — предоставление количественной информации о наиболее ресурсоемких активностях СУБД. Такая информация очень полезна для анализа нагрузки СУБД, например, при проведении нагрузочного тестирования.

Стратегический мониторинг сам по себе никакие проблемы не решает, но может подсказать, на что обратить внимание. Одним из средств стратегического мониторинга является расширение pg_profile/pgpro_pwr — собственно, об этом и идёт речь в видео.
Спикер рассказывает об архитектуре, возможностях, особенностях работы и способах применения этих расширений.

Видео будет интересено всем, кто работает с СУБД Postgres — администраторам баз данных, инженерам нагрузочного тестирования и разработчикам приложений, непосредственно взаимодействующих с базами данных Postgres.
Enjoy)

📎 YouTube
📎 Презентация

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Параллелизм базы данных в PostgreSQL

Управление параллелизмом является важным аспектом в системах БД, которые имеют дело с множеством параллельно выполняющихся транзакций. В PostgreSQL применяются различные методы для обеспечения параллельного доступа к базе данных при поддержке согласованного состояния данных с использованием свойств атомарности и изоляции ACID (атомарность, согласованность, изоляция и длительность).

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

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

📎 Подробнее о параллелизме БД можно почитать тут, рекомендую. Вот ещё неплохая статья в тему

@sqlhub

Читать полностью…

Data Science. SQL hub

⚡️ Бесплатный видеокурс. SQL практикум на базе MySQL

Спроектируем базу данных популярного мессенджера и научимся писать запросы к ней (4.5 часа качественного видеоматериала).

💡 Курс

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Как получить текстовый дамп базы данных Postgres в Heroku

Для создания дампа базы данных PostgreSQL в текстовом формате на Heroku выполните два действия:

1️⃣Создайте и загрузите резервную копию:


heroku pg:backups:capture && heroku pg:backups:download


2️⃣Преобразуйте загруженный файл в SQL-формат с помощью pg_restore:

pg_restore -f mydb.sql latest.dump


Здесь mydb.sql — это конечный файл с вашими данными. До начала работы убедитесь, что у вас установлен Postgres для использования команды pg_restore.

🔘Вот в принципе и всё, больше деталей и похожих кейсов тут

@sqlhub

Читать полностью…

Data Science. SQL hub

💻Как создать процедуру в PostgreSQL?

Итак, для создания процедуры в PostgreSQL используется язык PL/pgSQL, который является расширением языка SQL. Вот пример создания простой хранимой процедуры в PostgreSQL:

CREATE OR REPLACE FUNCTION 'имя_процедуры(параметры)' RETURNS 'тип_результата' AS $$
DECLARE
-- переменные_локальные тип_переменной
BEGIN
-- Тело процедуры
-- Может содержать SQL запросы, управляющие конструкции и другие операторы
END;
$$ LANGUAGE plpgsql;


Пример простой процедуры, которая выводит текстовое сообщение:
CREATE OR REPLACE FUNCTION hello_world()
RETURNS VOID AS $$
BEGIN
RAISE NOTICE 'Hello, World!';
END;
$$ LANGUAGE plpgsql;


После выполнения этого запроса, процедура hello_world будет создана в вашей базе данных. Чтобы вызвать эту процедуру, используйте следующий запрос:
SELECT hello_world();

Таким образом, вы можете создавать и вызывать процедуры в PostgreSQL с помощью PL/pgSQL.

@sqlhub

Читать полностью…

Data Science. SQL hub

Yandex Open Source Jam — необычное мероприятие от Яндекса

Что вас ждет:

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

Встречаемся 23 апреля в Москве («Агломерат») и онлайн (трансляция на сайте). Переходите по ссылке для регистрации.

Читать полностью…

Data Science. SQL hub

🖥 Допустим вы хотите получить минимальное или максимальное значения из индексированного столбца.

Очевидно, что это будет первая, либо последняя запись в этом столбце.

База данных Oracle знает об этом, поэтому может оптимизировать данный запрос:

INDEX FULL SCAN (MIN/MAX)

или

INDEX RANGE SCAN (MIN/MAX)

При этом запросе считывается только одна необходимая запись.

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 Огромная шпаргалка с готовыми запросами SQL (SQLite)

Смотреть

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 SQL в Фокусе: Полное Руководство. 100 ключевых Вопросов с собеседований. Часть 1.

Читать

#junior

@sqlhub

Читать полностью…

Data Science. SQL hub

Очное обучение Data Science в НИУ ВШЭ — старт 14 февраля

Кому подходит программа «Специалист по Data Science»?

Начинающим: Вы изучите основы программирования, математики, машинного обучения и работы с Big Data.
Специалистам не из IT: Освоите новые методы и инструменты для работы с данными в вашей области.
Программистам: Подтянете свои знания в алгоритмах, структурах данных и научитесь обучать нейронные сети.

За 1.5 года вместе с опытными преподавателями и практикующими специалистами вы:

Разберетесь в направлениях Data Science: Изучите программирование на Python, математику для анализа данных, прикладную статистику, классические ML-модели и нейросети, а также основы обработки текстов, звука и изображений.
Разовьете hard skills: Освоите SQL, Python, Jupyter Notebook, Spark, Tensorflow, Pytorch и другие инструменты.
Выполните 3 проекта: Напишете чат-бота, программу для машинного обучения и защитите финальный проект. Это хорошая возможность пополнить портфолио, особенно для начинающих.
Получите самые актуальные знания по специальности и сможете работать специалистом по Data Science в крупных IT-компаниях.

Обучение очное в кампусе НИУ ВШЭ в Москве.

Старт: 14 февраля
Стоимость: 58 125₽ раз в 2 месяца при рассрочке без переплат: 8 платежей. Или 465 000₽ за весь курс.
Полная программа и регистрация: по ссылке.

Реклама. НИУ ВШЭ.
ИНН 7714030726
Erid: 2SDnjd72JW4

Читать полностью…

Data Science. SQL hub

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 DuckDB

Теперь в DuckDB можно подключать базы данных MySQL, Postgres и SQLite в дополнение к базам данных, хранящимся в ее собственном формате.

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

Подробнее
Github

@sqlhub

Читать полностью…

Data Science. SQL hub

🔍 Manticoresearch

Manticore Search - это простая в использовании быстрая база данных с открытым исходным кодом для поиска. Хорошая альтернатива Elasticsearch. От других решений его отличает следующее:

Она очень быстрая и более экономичная, чем альтернативы, например, Manticore:

182 раза быстрее, чем MySQL для небольших датасетов
В 29 раз быстрее, чем Elasticsearch для анализа журналов
В 15 раз быстрее, чем Elasticsearch для небольших наборов данных
В 5 раз быстрее, чем Elasticsearch для средних датасетов
В 4 раза быстрее, чем Elasticsearch для больших датасетов

github.com/manticoresoftware/manticoresearch

@sqlhub

Читать полностью…

Data Science. SQL hub

🔥 Разбор гигантских наборов данных JSON за считанные секунды с помощью JSONalyze, новейшего механизма запросов.

JSONalyze принимает JSON (например, ответ API) и преобразует его в таблицу SQLite.

Затем он выполняет точные SQL-запросы к этим данным, чтобы ответить на ваш запрос!

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

https://docs.llamaindex.ai/en/latest/examples/query_engine/JSONalyze_query_engine.html

@sqlhub

Читать полностью…

Data Science. SQL hub

🖥 MongoDB для Python - NoSQL база данных.

https://www.youtube.com/watch?v=THXT_SGo6xs

@sqlhub

Читать полностью…
Subscribe to a channel