Data Science. SQL hub
35.8K subscribers
921 photos
49 videos
37 files
979 links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
🔥 Дайджест полезных материалов из мира SQL за неделю

Почитать:
Проектирование БД и почему важен SQL для системного аналитика: гайд по улучшению качества требований
Тестирование производительности на Python: Пошаговое руководство с Flask
Искусство ETL. Пишем собственный движок SQL на Spark [часть 3 из 5]
Вы вообще нормальн… нормализованный??
SQL HowTo: ближайший общий предок в дереве (LCA)
7 аргументов почему UUID лучше, чем автоинкрементные идентификаторы
MSSQL: Rebuild vs Reorganize в высоконагруженных системах
Как я писал сервер на NodeJS для базы Firebird 3.0
Harness the Power of SQL CASE - Your Ultimate SQL CASE Statement Guide
Transaction Internals: Fast Path vs Multi-Shard
The cost of additional secondary indexes in PostgreSQL & YugabyteDB
Dominando a função WITH: Criando Consultas Temporárias no SQL
Database Review: Top Five Missing Features from Database APIs
SQL Roadmap for Data Analysts[Step-by-Step]
Offline auth with Electron + SQLite + React
SQL concept for Beginners
Implementing hassle-free audits in the SQL database
Simple and Efficient Full Text Search using Django and Postgres

Посмотреть:
🌐 Невероятная нейросеть переводит любое видео на другие языки с сохранением оригинального голоса. ( 00:55)
🌐 Python анализ данных с Pandas. PandaSQL ( 12:13)
🌐 Управление жестами всегда было в ваших часах, просто его нужно было активировать. ( 00:11)
🌐 Python анализ данных с Pandas. Join, merge, concat в Pandas ( 19:25)
🌐 Python+SQL часть2 создание таблиц. ( 05:15)
🌐 Уроки Golang с нуля /#28 - Встраивание типов ( 06:16)
🌐 Python анализ данных с Pandas. ( 17:04)
🌐 Уроки Golang с нуля /#27 - Bufio. Чтение и запись ( 10:35)

Хорошего дня!

@sqlhub
👍10🔥41
🖥 SQL-запросы, которые вы рано или поздно погуглите

Отвечу на вопросы, которые возникают у новичков в SQL, в частности в PostgreSQL и BigQuery. Мы не будем обсуждать совсем базовые SELECT, CREATE или DROP.

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

|playerId|name |installationDate|game |os |
|--------|----------------|----------------|----------|----------|
|9e8a0174|Трофимова Алёна |2023-07-30 |basketball|iOS 16 |
|3e2e04ad|Семенова Алиса |2022-07-21 |consumer |iOS 13 |
|642eafb2|Абрамова Диана |2022-06-06 |curtain |iOS 15 |
|8c231f49|Ефимова Ульяна |2022-06-21 |conductor |Android 12|
|a085caf1|Захаров Михаил |2023-04-11 |appear |Android 11|
|c4deb869|Николаева Марта |2022-03-31 |possible |iOS 11 |


вторая, levels, — даты прохождения игроком с определенным ID того или иного уровня:

|playerId|level|completionDate|
|--------|-----|--------------|
|7b50274d|6 |2023-05-17 |
|b0c9a9da|20 |2022-02-19 |
|09b3d5b5|15 |2022-07-22 |
|52b3bfa9|11 |2022-02-18 |
|3e2e04ad|17 |2022-08-17 |
|642eafb2|17 |2022-04-14 |
|8c231f49|20 |2022-05-30 |
|a085caf1|20 |2023-02-24 |
|36545ec1|16 |2022-08-10 |
|44e9653f|3 |2023-06-02 |



Я буду верстать в BigQuery на таком же датасете, так что использую соответствующий диалект.


INNER JOIN
Это тип объединения по умолчанию, и он оставит наименьшее число строк. Слово INNER можно опустить:

SELECT
p.playerId,
installationDate,
game,
level,
completionDate
FROM `project.tutorials.players` AS p
JOIN `project.tutorials.levels` AS l ON p.playerId = l.playerId;



Посмотрим, что здесь происходит:

В строках 1-6 мы выбираем только необходимые столбцы;
7-8: командой AS задаем псевдонимы таблицам;
8: определяем логику объединения по совпадающим playerId. Это означает также, что мы сохраним данные только об первом попавшемся уровне.

Получим всего четыре строки:
|playerId|name |installationDate|game |level|completionDate|
|--------|--------------|----------------|---------|-----|--------------|
|3e2e04ad|Семенова Алиса|2022-07-21 |consumer |17 |2022-08-17 |
|642eafb2|Абрамова Диана|2022-06-06 |curtain |17 |2022-04-14 |
|8c231f49|Ефимова Ульяна|2022-06-21 |conductor|20 |2022-05-30 |
|a085caf1|Захаров Михаил|2023-04-11 |appear |20 |2023-02-24 |


OUTER JOIN
Этот тип объединения, напротив, куда «добрее» и в случае FULL-объединения сохранит записи обо всех игроках и всех пройденных уровнях:

SELECT
p.playerId,
installationDate,
game,
level,
completionDate
FROM `project.tutorials.players` AS p
FULL OUTER JOIN `project.tutorials.levels` AS l ON p.playerId = l.playerId;



У нас появятся записи, где playerId пуст, поскольку попросили мы идентификаторы только из первой таблицы:

🔍 Читать

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥43
🚀 Бесплатный курс. Специализация Data Science Fundamentals with Python and SQL

Создайте основу для своей карьеры в области Data Science. Получите практический опыт работы с Jupyter, Python, SQL. Выполнять статистический анализ на реальных массивах данных.

Курс

@sqlhub
👍114🔥1
🖥 SQL Translator - это инструмент для преобразования запросов на естественном языке в SQL-запросы с помощью искусственного интеллекта. Этот проект является 100% бесплатным и с открытым исходным кодом.

git clone https://github.com/whoiskatrin/sql-translator.git

Github
Проект

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍233🔥2
Media is too big
VIEW IN TELEGRAM
📊Python Matplotlib. Визуализация данных на PRO уровне.


📌 Видео
📌 Код и полезные ресурсы

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
🖥 SQL-запросы, которые вы рано или поздно погуглите, часть 2

На сей раз я использую таблицу subject_selection, которая описывает изучаемые студентами предметы:

|student_id|subject|semester|student_name|
|----------|-------|--------|------------|
|eb1490a6 |Физика |2 |Иван |
|1c5bf433 |Физика |4 |Андрей |
|b16a764b |Тервер |1 |Ирина |
|48b3a7f6 |Матстат|2 |Мария |
|c179c5cc |Тервер |2 |Сергей |
|6306ceed |Матстат|1 |Инна |
|5853f444 |Иняз |3 |Эрик |
|… |… |… |… |
|550ca6a5 |Тервер |2 |Елена |



Запросы исполнены на диалекте BigQuery.

WHERE + LIKE: найти все таблицы с определенным столбцом
Допустим, администратор университетской базы данных управляет большим хранилищем и уже не тратит усилия на запоминания всех структур таблиц. Он хочет вспомнить, в каких наборах упоминались студенты.

Во многих СУБД на базе SQL существует information_schema с метаданными, к которой можно обращаться с запросами. Вот так, к примеру, она выглядит в BigQuery (документация): *в изображении.

Вы также можете обратиться к:

▪️резервной копии таблицы (TABLE_SNAPSHOT);
▪️перечню запросов, выполненных определенным сотрудником (JOBS_BY_USER);
▪️частоте использования расшаренных датасетов (SHARED_DATASET_USAGE).

Чтобы получить искомый список таблиц, содержащими столбец с подстрокой ‘student’, нужно запустить такую команду:

SELECT * FROM `project.tutorials.INFORMATION_SCHEMA.COLUMNS`
WHERE column_name LIKE '%student%'


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

📌 Читать весь разбор

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥1
Forwarded from Just Xor
🔥 Дайджест полезных материалов из мира SQL за неделю

Почитать:
Искусство ETL. FAQ по Data Cooker ETL
Microsoft предлагает БЕСПЛАТНЫЕ онлайн курсы с сертификацией
Clickhouse — непростая жизнь в продакшене
MySQL в Google Colab: Бесшовная интеграция
Искусство ETL. Пишем собственный движок SQL на Spark [часть 5 из 5]
Bamboolib : Инструментарий для интеллектуального исследования и анализа данных
7 шагов по контейнеризации Python-приложений
Understanding Joins in SQL
My Experience learning Python and SQL
SQL 50–1683. Invalid Tweets
Tudo que você precisa saber sobre SQL
Select transactions
Temp table in SQL Server
Memory behind Postgres
Discover the Hidden Powers of PostgreSQL: Lateral Joins and JSON Columns Decoded!
Bitmap Scan in YugabyteDB
SQL 50–1148. Article Views I

Посмотреть:
🌐 Вся база SQL для начинающих за 1 час
🌐 SQL For Web Developers - Complete Database Course
🌐 Python Matplotlib. Визуализация данных на PRO уровне. ( 24:43)
🌐 Устраиваемся на работу. Решаем тестовое задание на позицию Python Junior. ( 20:28)
🌐 Уроки Golang с нуля /#29 - Дженерики/обобщения ( 10:52)
🌐 Уроки Golang с нуля /#30 - Горутины ( 08:09)
🌐 Как защитить телеграм бота от атак и перегрузок. ( 08:29)

Хорошего дня!

@sqlhub
👍13🔥32
🖥StereoDB

Сверхбыстрая и легкая база данных внутрипроцессной памятм, написанная на языке F#, поддерживающая: транзакции, вторичные индексы, персистентные структуры данных и инструменты управления памятью.

StereoDB поддерживает создание Stateful Services (API или ETL Worker), которые хранят все данные в памяти и могут обеспечить миллионы запросов в секунду для RPS с одного узла.

Github

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥1
Использование рекурсивных запросов для управления иерархиями данных

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

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

WITH RECURSIVE subordinate AS (
SELECT
employee_id,
first_name,
last_name,
manager_id
FROM employee
WHERE employee_id = 110 -- id of the top hierarchy employee (CEO)

UNION ALL

SELECT
e.employee_id,
e.first_name,
e.last_name,
e.manager_id
FROM employee e
JOIN subordinate s
ON e.manager_id = s.employee_id
)
SELECT
employee_id,
first_name,
last_name,
manager_id
FROM subordinate ;


В этом запросе мы создали рекурсивный CTE под названием subordinate. Он является ключевой частью запроса, поскольку проходит по иерархии данных, переходя от одной строки к строкам иерархии, расположенным непосредственно под ней.

Есть два подзапроса, соединенных между собой UNION ALL; первый подзапрос возвращает верхнюю строку иерархии, а второй запрос возвращает следующий уровень, добавляя эти строки к промежуточному результату запроса. Затем снова выполняется второй подзапрос, возвращающий следующий уровень, который снова добавляется к промежуточному результату. Этот процесс повторяется до тех пор, пока в промежуточный результат не будет добавлено ни одной новой строки. Наконец, главный запрос возвращает данные в том виде, в котором мы ожидаем.

@sqlhub
👍19🔥32
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:

WITH employee_ranking AS (
SELECT
employee_id,
last_name,
first_name,
salary,
RANK() OVER (ORDER BY salary DESC) as ranking
FROM employee
)
SELECT
employee_id,
last_name,
first_name,
salary
FROM employee_ranking
WHERE ranking = 2

Условие WHERE ranking = 2 используется для фильтрации строк второй по величине зарплаты. Обратите внимание, что на позиции 2 может находиться более одного сотрудника, если у них одинаковая зарплата.

На данном этапе важно понять поведение функции RANK(), а также других доступных функций, таких как ROW_NUMBER() и DENSE_RANK(). Эта тема подробно рассматривается в статье - "Обзор функций ранжирования в SQL". Я рекомендую прочитать эту статью, если вам придется работать с различными видами ранжирования.

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍116🔥4
Сегодня вышла новая версию ElectricSQL.

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

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

Github
Документация

@Sqlhub
👍113🔥1
Уроки по T-SQL

1. Быстро и подробно об основах реляционных баз данных
2. Знакомимся с основными понятиями Transact SQL
3. Работа с временными таблицами: CREATE TABLE, DROPE TABLE, ALTER TABLE
4. Быстрый разбор выборки данных в T-SQL
5. Внесение изменений в базу данных T-SQL
6. Оператор Union за 5 мин T-SQL
7. Оператор CASE за 2 мин T-SQL

#video #sql

📌Видео

@Sqlhub
👍4🔥41
🖥 🖥SQLiDetector

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


Github

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
sqlparse.pdf
187.2 KB
Sqlparse: парсинг SQL-операторов

Sqlparse - это невалидирующий парсер SQL для Python. Он обеспечивает поддержку разбора, разбиения и форматирования SQL-операторов.

$ pip install sqlparse
import sqlparse


📌 Файл с примерам кода и документацией по работе в закрепе.


raw = 'select * from foo; select * from bar;'
statements = sqlparse.split(raw)
statements
['select * from foo;', 'select * from bar;']


first = statements[0]
print(sqlparse.format(first, reindent=True, keyword_case='upper'))
SELECT *
FROM foo;

>>> # Parsing a SQL statement:
parsed = sqlparse.parse('select * from foo')[0]
parsed.tokens
[<DML 'select' at 0x7f22c5e15368>, <Whitespace ' ' at 0x7f22c5e153b0>, <Wildcard '*' … ]


@sqlhub
👍7🔥21
🖥 Pipelined Relational Query Language (PRQL)

PRQL - это современный язык для преобразования данных, который меняет обращение к базе данных на логически выстроенный пайплайн (конвейер).
Как и SQL, он легко читается, является явным и декларативным. Но в отличие от SQL, он формирует логический пайплайн преобразований и поддерживает такие абстракции, как переменные и функции. Он может использоваться с любой базой данных, использующей SQL.

from tracks
filter artist == "Bob Marley" # Each line transforms the previous result
aggregate { # `aggregate` reduces each column to a value
plays = sum plays,
longest = max length,
shortest = min length, # Trailing commas are allowed
}


Github

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥52