🔥 Дайджест полезных материалов из мира 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
Почитать:
— Проектирование БД и почему важен 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🔥4❤1
Отвечу на вопросы, которые возникают у новичков в 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🔥4❤3
запросов на естественном языке в SQL
-запросы с помощью искусственного интеллекта. Этот проект является 100% бесплатным и с открытым исходным кодом.git clone https://github.com/whoiskatrin/sql-translator.git
▪Github
▪Проект
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤3🔥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
Почитать:
— Искусство 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🔥3❤2
Сверхбыстрая и легкая база данных внутрипроцессной памятм, написанная на языке 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
👍13❤2🔥1
Использование рекурсивных запросов для управления иерархиями данных
Некоторые таблицы в SQL могут иметь неявный вид иерархии данных. Например, в нашей таблице сотрудников для каждого сотрудника имеется идентификатор
При такой организации мы можем иметь иерархию различных уровней. В каждой строке столбец
В этом запросе мы создали рекурсивный CTE под названием
Есть два подзапроса, соединенных между собой
@sqlhub
Некоторые таблицы в 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🔥3❤2
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
👍11❤6🔥4
Сегодня вышла новая версию ElectricSQL.
ElectricSQL - это опенсорс платформа для локальной разработки, позволяющая легко создавать высококачественные современные приложения с мгновенной реактивностью, многопользовательской совместной работой в реальном времени и бесконфликтной поддержкой автономной работы.
Local-first - это новая парадигма разработки, при которой код приложения напрямую обращается к встроенной локальной базе данных, а данные синхронизируются в фоновом режиме посредством активной репликации базы данных. Поскольку код приложения обращается непосредственно к локальной базе данных, приложения работают мгновенно. Данные синхронизируются в фоновом режиме с помощью активной репликации.
• Github
• Документация
@Sqlhub
ElectricSQL - это опенсорс платформа для локальной разработки, позволяющая легко создавать высококачественные современные приложения с мгновенной реактивностью, многопользовательской совместной работой в реальном времени и бесконфликтной поддержкой автономной работы.
Local-first - это новая парадигма разработки, при которой код приложения напрямую обращается к встроенной локальной базе данных, а данные синхронизируются в фоновом режиме посредством активной репликации базы данных. Поскольку код приложения обращается непосредственно к локальной базе данных, приложения работают мгновенно. Данные синхронизируются в фоновом режиме с помощью активной репликации.
• Github
• Документация
@Sqlhub
👍11❤3🔥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
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🔥4❤1
sqlparse.pdf
187.2 KB
Sqlparse: парсинг SQL-операторов
Sqlparse - это невалидирующий парсер SQL для Python. Он обеспечивает поддержку разбора, разбиения и форматирования SQL-операторов.
📌 Файл с примерам кода и документацией по работе в закрепе.
@sqlhub
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🔥2❤1
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🔥5❤2