sqlprofi | Unsorted

Telegram-канал sqlprofi - SQL Pro

5451

SQL Pro - всё об SQL Реклама: @anothertechrock Контент канала: 1. Разбор вопросов с собеседований 2. Трюки SQL 3. Видео 4. Тесты 5. Задачи на логику 6. Юмор

Subscribe to a channel

SQL Pro

Вопрос на SQL собеседовании.

Чем NULL отличается от 0

Ответ:

0 - это число.

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


#sql #собеседование

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

SQL Pro

👩‍💻 PostgreSQL давно перестал быть просто хранилищем данных
В высоконагруженных системах он всё чаще становится частью AI-архитектуры — с векторами, семантическим поиском и RAG-паттернами прямо на уровне БД.

На открытом уроке разберём, как PostgreSQL может:
- работать вместе с AI-моделями: хранить эмбеддинги, участвовать в семантическом поиске,
- быть частью RAG-архитектур и выполнять ML-логику внутри базы.
- отдельно обсудим расширения pgvector, pgai и lantern
- обсудим реальные сценарии для production-систем.

Вы увидите где AI в базе данных действительно оправдан, а где создаёт риски по латентности, масштабированию и поддержке.
Разберём архитектурные trade-off’ы, работу с kNN-поиском и подходы к интеграции AI в бизнес-логику через триггеры и функции.

📍Встречаемся 27 января в 20:00 МСК в преддверии старта курса «Highload Architect».

Регистрация открыта: https://vk.cc/cTNmpK

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

Задача на мышление и логику.

Дано 12 монет, из которых 11 – настоящие, и только 1 – фальшивая. Фальшивая монета отличается от настоящих по массе. Какое минимальное количество взвешиваний необходимо, чтобы обнаружить фальшивую монету? Для взвешивания используются чашечные весы.

Решение будет вечером.

#логика

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

SQL Pro

Трюк дня. Сравнение значений столбцов

Перепишите PostgreSQL запрос так, чтобы не использовать оператор AND.

WITH users (id, surname)
AS (VALUES
(1, 'Powers'),
(2, 'Sierra'),
(3, 'Oushen'))

SELECT id, surname
FROM users
WHERE id = 2 AND surname = 'Sierra';

Решение будет вечером.

#tips

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

SQL Pro

Трюк дня. Простые числа. Решение.

Простое число - натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.

Для начала создадим набор чисел от 2 до 1000 с помощью функции generate_series.

Затем с помощью NOT EXISTS (которое можно, модифицировав, заменить на JOIN) мы соединяем таблицу саму на себя и затем выбираем только те значения, для которых ни одно деление на меньшее число не дает остаток 0.

WITH x AS (
SELECT * FROM generate_series( 2, 1000 ) x
)
SELECT x.x
FROM x
WHERE NOT EXISTS (
SELECT 1 FROM x y
WHERE x.x > y.x AND x.x % y.x = 0
);


#tips

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

SQL Pro

Решение сегодняшней задачи на логику и мышление.

Вместо знака вопроса должно стоять число 179. Если двигаться по часовой стрелке начиная с 3, то каждое последующее число равно удвоенному предыдущему, к которому прибавили 1, 3, 5, 7, 9.

3 × 2 + 1 = 7.
7 × 2 + 3 = 17.
17 × 2 + 5 = 39.
39 × 2 + 7 = 85.
85 × 2 + 9 = 179.

#логика

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

SQL Pro

Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем. Решение.

SELECT
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 1), ' ', -1) AS name,
IF (LENGTH (fullname) - LENGTH (REPLACE (fullname, ' ', '')) > 1,
SUBSTRING_INDEX(SUBSTRING_INDEX (fullname, ' ', 2), ' ', -1), NULL)
AS middlename,
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 3), ' ', -1) AS surname
FROM customers;

#tips

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

SQL Pro

🚀 Разобраться в современном data-engineering-стеке — это возможность выйти на новый уровень в аналитике и научиться работать с инфраструктурой, которую сегодня используют крупнейшие компании.

📅 2 декабря в 19:00 МСК — открытый урок «Data Engineering & Analytics: от данных к бизнес-инсайтам» в рамках курса «Data Warehouse Analyst. Advanced». За один вечер разберём всё самое важное: 
🔹 Архитектуру хранилищ и потоковую обработку данных 
🔹 Сравним аналитические СУБД: Greenplum и ClickHouse 
🔹 Покажем подходы Data Vault 2.0 
🔹 Роль Spark и Kafka в аналитике 
🔹 Как Python, Pandas и Scikit-learn помогают строить модели

После урока у вас будет чёткое понимание: 
✔️ Какие навыки нужны Data Engineer и Data Analyst 
✔️ Как организовать полный цикл работы с данными 
✔️ Как формируются инсайты, влияющие на решения бизнеса 

🔗 Регистрация по ссылке: https://vk.cc/cRGZcp

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

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

SQL Pro

Трюк дня. Сравнение с предыдущим

Напишите SQL-запрос, который находит в таблице weather все даты (идентификаторы дат), когда температура была бы выше температуры на предшествующие им даты. То есть, нас интересуют даты, в которые «сегодняшняя» температура выше «вчерашней».

Решение будет вечером.

#tips

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

SQL Pro

Вакансия VBA/SQL‑разработчика в Контур ☁️

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

Сейчас мы ищем опытного VBA/SQL-программиста в отдел внутренней разработки продукта Контур.Персонал. Его поддерживают и развивают для внутренних нужд Контура.

🔘Задачи
— Настраивать и дорабатывать информационную систему по учету кадров.
— Оптимизировать производительность сервисов: выявлять узкие места, проводить рефакторинг кода, настраивать базы данных и API для повышения скорости и стабильности работы.
— Участвовать в архитектурных обсуждениях и код-ревью, быть наставником.

🔘Мы ожидаем
— Опыт работы в VBA, базовые знания SQL.
— Знание принципов ООП на практике.
— Опыт проектирования и внедрения технических решений.
— Знание инструментов оптимизации производительности сервиса.

Будет плюсом
— Опыт в C-подобном языке программирования: C, C++, C#.
— Опыт работы с Access и Excel.
— Знание предметных областей: кадры, зарплата, документооборот.

🔘Мы предлагаем
— Удаленка в РФ или гибрид на выбор
— Сильное инженерное сообщество: раз в год проводим внутреннюю конференцию Конфур для 2000 разработчиков с разным бэкграундом;
— Развитие: поддерживаем участие в конференциях, митапах и обучающих проектах. Наши деврелы помогут написать статью на Хабр или подготовиться к выступлению;
— Ежегодное ревью по матрице компетенций и пересмотр дохода;
— Приятные бонусы крупной аккредитованной IT-компании: ДМС, частичная оплата спорта и питания.

➡️ Смотрите условия и откликайтесь на сайте

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

SQL Pro

Оператор «NOT IN» и коварный NULL

#почитать

Учитель философии. Конечно. Вы хотите написать ей стихи?
Г-н Журден. Нет-нет, только не стихи.
Учитель философии. Вы предпочитаете прозу?
Г-н Журден. Нет, я не хочу ни прозы, ни стихов.
Учитель философии. Так нельзя: или то, или другое.
Г-н Журден. Почему?
Учитель философии. По той причине, сударь, что мы можем излагать свои мысли не иначе как прозой или стихами.
Г-н Журден. Не иначе как прозой или стихами?
Учитель философии. Не иначе, сударь. Все, что не проза, то стихи, а что не стихи, то проза.


Мольер. Мещанин во дворянстве

Читать статью

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

SQL Pro

🧾 Чек-лист. Основные этапы создания Корпоративного Хранилища данных

В зависимости от компании, подход к созданию КХД может различаться: одни видят его как монолитную систему, другие — как распределенную архитектуру. Мы под КХД будем понимать как ядровую БД, так и все дополнительные инструменты для переливки информации, базы данных, BI, утилиты для мониторинга и алертинга и многое другое.

1. Определение целей и задач
Рекомендуется не отталкиваться от технических возможностей, а начинать с бизнес-контекста.

- Четко сформулируйте цели хранилища (аналитика, отчетность, оптимизация процессов и т.д.)
- Определите ключевых заинтересованных лиц (stakeholders) и их ожидания
- Изучите нюансы бизнеса

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

- Проведите инвентаризацию всех источников данных (CRM, ERP, веб-приложения, файлы, БД, API и т.д.)
- Определите форматы данных (структурированные, неструктурированные)
- Выясните объем и частоту обновления данных и т.д.

3. Определение архитектуры хранилища
Самый сложный и важный этап.

- Выберите подход (ETL или ELT)
- Решите, будет ли хранилище on-premise, облачным или гибридным
- Определите слои хранилища: staging (сырые данные), ODS (операционные данные), DWH (исторические данные)
- Обозначьте, где будут содержаться витрины данных и “сырая” информация
- Уточните, как будет предоставляться информация конечным пользователям и т.д.

4. Выбор технологий
- Определите, нужны ли вам БД отдельно для OLAP и OLTP?
- Выберите СУБД (Greenplum, Snowflake, PosgtreSQL, ClickHouse и т.д.)
- Подберите инструменты интеграции данных (Apache NiFi, Dagster, Airflow)
- Подумайте о Вl-инструментах (Tableau, Superset, Looker)
- А так же не забывайте об инструментах мониторинга, бекапирования и алертинга

5. Проектирование модели данных
- Определите уровень нормализации данных (3NF, звездная или снежинка — или более продвинутые, Data Vault)
- Создайте ЕR-диаграммы и схемы таблиц
- Проработайте “узкие места” и слепые зоны, подумайте о связи модели данных и пользовательских ролей и доступов

6. Реализация ETL/ELT процессов
- Настройте коннекторы к источникам данных
- Создайте пайплайны для извлечения, трансформации и загрузки данных
- Автоматизируйте обновление данных

7. Управление качеством данных
- Внедрите процессы проверки данных (data validation)
- Реализуйте контроль на дубликаты, пропуски и несоответствия форматов

8. Обеспечение безопасности
- Настройте роли и права доступа. Подумайте о внедрении Active Directory для унифицирования доступа ко всем текущим инструментам
- Реализуйте шифрование данных (в покое и в процессе передачи)
- Подготовьте план аварийного восстановления

9. Тестирование и валидация
- Проведите нагрузочное тестирование (stress test)
- Убедитесь в корректности обработки данных на всех этапах
- Проверьте интеграцию с BI и всеми другими инструментами

10. Документация и обучение
- Подготовьте документацию: схемы данных, описания ETL-процессов, инструкции для пользователей
- Изучите представленные на рынке инструменты для автоматизации сбора документации
- Проведите обучение сотрудников, которые будут работать с хранилищем

11. Запуск и эксплуатация
Убедитесь, что у вас настроены как минимум области DEV, Stage, Prom
Подготовьтесь к автоматизированной раскатке в production
Настройте мониторинг производительности
Определите процессы для обновления, расширения и поддержки хранилища

12. Постоянное улучшение
- Анализируйте обратную связь от пользователей
- Оптимизируйте процессы обработки данных
- Добавляйте новые источники данных по мере необходимости

Для системного обучения рекомендуем профессиональный курс по DWH от Otus, где вы получите хорошую базу и практику.

➡️ Регистрируйтесь прямо сейчас, чтобы воспользоваться 10% скидкой на курс и учиться  по 🏖 летним ценам! Условия актуальны только до 31.07.2025:  https://vk.cc/cNXxCx

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

Вопрос с собеседования

Как работает SQL-триггер?

Ответ: Когда происходит событие, СУБД автоматически вызывает триггер, который затем выполняет набор операторов SQL, определенных в триггере. Триггеры определяются для каждой таблицы и создаются с помощью оператора CREATE TRIGGER. Они могут запускаться до или после наступления события и выполняться один раз для каждой затронутой строки либо один раз для каждого оператора.

➡️ SQL Pro | #собеседование

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

SQL Pro

Большой тест по SQL для тестировщиков из 44 вопроса - https://qarocks.ru/test_post/big-sql-quiz/

Проходите и пишите, у кого 44 из 44:)

P.S если найдете ошибки в ответах, присылайте - попросим исправить)

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

SQL Pro

Оптимизация запросов в PostgreSQL

Автор:
Генриэтта Домбровская
Год издания: 2022

#postgresql #ru

Скачать книгу ⬇️

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

SQL Pro

📊 Data Warehouse Analyst: создавайте сквозные аналитические решения и управляйте данными на новом уровне 🚀

Освойте продвинутый инструментарий для работы с данными и постройте хранилище, которое даст бизнесу точные инсайты — и поможет принимать решения на основе фактов. 💡

🎓 Мы подготовили для вас 3 бесплатных вебинара курса «Data Warehouse Analyst» — для системных аналитиков, BI‑аналитиков, аналитиков данных и инженеров данных, которые хотят разобраться в современных подходах к построению хранилищ данных. 🔍

🗓 25 февраля в 20:00 МСК: Как выглядит DWH в реальных компаниях: финтех, e-commerce, маркетплейсы

На вебинаре:
• Примеры архитектур DWH в финтехе, e-commerce и маркетплейсах: источники данных, слои, инструменты
• Ключевые различия в требованиях к данным, скорости обновления и качеству аналитики
• Типовые архитектурные решения и ошибки, с которыми сталкиваются команды на практике

🗓 11 марта в 20:00 МСК: Почему нельзя ограничиваться только Data Vault в архитектуре хранилища данных

Что будет на вебинаре:
• Разбор концепции Data Vault: сильные стороны и типичные сценарии использования
• Практические ограничения Data Vault: сложность аналитических запросов, низкая производительность для отчетности, отсутствие семантики
• Интеграция Data Vault в современную архитектуру: зачем нужны дополнительные слои (Data Mart, семантический слой, BI-оптимизированные модели)

🗓 23 марта в 22:00 МСК: Современный DWH в 2026: какие технологии реально нужны, а какие — хайп

Что разберём:
• Актуальный технологический стек для построения DWH в 2026 году
• Разбор трендов: какие решения оправданы на практике, а какие создают избыточную сложность
• Кейсы внедрения DWH: от теоретических подходов к измеримым результатам

🔥 Количество мест ограничено! Регистрируйтесь сейчас — мы напомним о каждом вебинаре накануне: 👉OTUS.RU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

Решение сегодняшней задачи на логику и мышление.

Минимальное количество взвешиваний – 3, ведь даже если мы взвесим 2 раза, то как мы узнаем, какая из монет фальшивая? Большую часть монет составляют настоящие, так что 2 монеты с одинаковым весом и будут настоящими, третья с другим весом – фальшивой.

Ответ: 3 взвешивания.

#логика

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

SQL Pro

Трюк дня. Сравнение значений столбцов. Решение

WITH users (id, surname) 
AS (VALUES
(1, 'Powers'),
(2, 'Sierra'),
(3, 'Oushen'))

SELECT id, surname
FROM users
WHERE (id, surname) = (2,'Sierra');


#tips

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

SQL Pro

Развернуть PostgreSQL в MWS Cloud Platform ⬜️ — быстрее, чем вспомнить пароль от pgAdmin. И точно быстрее, чем объяснить DevOps'у, зачем ещё одна база.

Всего несколько минут и у вас:

⏺️готовая база на сетевых или локальных дисках
⏺️постоянный primary endpoint
⏺️безопасное подключение через Private Link
⏺️автоматические бэкапы и обслуживания по твоему расписанию

🎄🎁 И грант до 10 000 ₽ на запуск — чтобы точно не пришлось вспоминать, как настраивать failover вручную.

➡️Развернуть кластер

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

SQL Pro

Трюк дня. Простые числа

Напишите PostgreSQL-запрос, который возвратит простые числа от 2 до 1000.

Решение будет вечером.

#tips

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

SQL Pro

Задача на мышление и логику.

Определите, какое число должно стоять на месте знака вопроса.

Решение будет вечером.

#логика

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

SQL Pro

Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем

В столбце fullname таблицы customers содержится имя, отчество и фамилия в следующем формате: 'name middlename surname'.

Напишите MySQL-запрос, который извлечет name, middlename и surname в отдельные столбцы. Если middlename не существует, то в результате в middlename должен быть NULL.

Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
• name = 'Alena',
• middlename = 'Igorevna',
• surname = 'Petrova'.

А из строки 'Jack Powers' получится следующее:
• name = 'Jack',
• middlename = NULL,
• surname = 'Powers'.

Решение будет вечером.

#tips

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

SQL Pro

Трюк дня. Сравнение с предыдущим. Решение.

Решение: использование DATEDIFF

DATEDIFF
: эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.

Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.

SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1

#tips

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

SQL Pro

Трюк дня. Найти медиану

Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.

Необходимо найти медиану для данного столбца.


Решение:
В PostgreSQL используйте функцию percentile_count:

SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) FROM table;

В MS SQL также используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) OVER (PARTITION BY 1) FROM table;

В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.

В Oracle используйте функцию MEDIAN:
SELECT MEDIAN (sales) OVER (PARTITION BY 1) FROM table;

Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.

/*задаем переменную row_index = -1, чтобы отсчет индекса начался с 0 */
SET @row_index := -1;

/*находим среднее двух значений в центре отсортированного набора. Охватывает те случаи, когда общее число записей четное*/
SELECT AVG (subq.sales) as median_value
FROM (
SELECT @row_index:=@row_index + 1 AS row_index, sales
FROM table
ORDER BY sales
) AS subq
WHERE subq.row_index
/*выбираем только значения в центре: одно если число записей нечетное и два если четное*/
IN (FLOOR(@row_index / 2) , CEIL(@row_index / 2));

Ответ: медиана = 4.

#tips

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

SQL Pro

Вопрос с собеседования

Как работает SQL-триггер?

Ответ: Когда происходит событие, СУБД автоматически вызывает триггер, который затем выполняет набор операторов SQL, определенных в триггере. Триггеры определяются для каждой таблицы и создаются с помощью оператора CREATE TRIGGER. Они могут запускаться до или после наступления события и выполняться один раз для каждой затронутой строки либо один раз для каждого оператора.

➡️ SQL Pro | #собеседование

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

SQL Pro

Микросервисы захватили мир → а вы готовы управлять их общением?

Пока одни разработчики борются с падающими сообщениями и блокировками в очередях, другие элегантно строят отказоустойчивые распределённые системы. Разница — в глубоком понимании RabbitMQ.

Большинство программистов знают брокеры сообщений поверхностно: отправил → получил → «работает, не трогай». А когда система начинает расти, начинаются проблемы: потерянные сообщения, узкие места в производительности, сложности с масштабированием.

Курс «RabbitMQ для разработчиков и администраторов» — это advanced-погружение для тех, кто хочет стать экспертом. Три месяца практики под руководством профессионалов, и вы научитесь не просто «подключать очереди», а проектировать архитектуру, которая выдержит любые нагрузки.

Что получите:

→ Навыки разработки сложных правил маршрутизации
→ Умение планировать и масштабировать RabbitMQ-кластеры
→ Опыт настройки «Infrastructure as a code»
→ Знания по устранению узких мест и оптимизации производительности

Владение RabbitMQ — это билет в мир высокооплачиваемых позиций архитектора и senior-разработчика микросервисов.

Старт уже 31 июля, но сначала — вступительное тестирование. Скидка 10% действует только до конца месяца.

Проверьте свой уровень и получите доступ к advanced-программе: https://vk.cc/cOahd9

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

📊15 июля в 20:00 МСК OTUS проведёт открытый вебинар по ClickHouse и Apache Superset. Вы научитесь строить дашборды на больших данных и интегрировать их с одним из самых быстрых аналитических СУБД на рынке.

🧑🏻‍💻 На вебинаре мы подробно разберём, как работают ClickHouse и Superset, их возможности для аналитики и визуализации данных, а также как подключать их для решения реальных задач. Всё будет сопровождаться живыми примерами настройки и создания дашбордов. Вы также получите лучшие практики для обработки больших объёмов данных.

Если вы работаете с большими данными, создаёте аналитические отчёты или проектируете архитектуру для BI-решений, этот урок будет полезен именно вам.

➡️ Встречаемся в преддверии старта курса «Data Warehouse Analyst». Все участники вебинара получат скидку на обучение. Пройдите вступительное тестирование и зарегистрируйтесь прямо сейчас: https://vk.cc/cNGCjU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

🚗 Как найти кратчайший маршрут с помощью Apache Spark и GraphFrames

Разбираем кейс на реальных данных из OpenStreetMap — ищем оптимальный маршрут

🔍 Что делаем
1. Загружаем граф дорог города с помощью OSMnx
2. Сохраняем вершины и ребра с координатами, скоростями и геометрией
3. Загружаем всё в Spark
4. Находим кратчайший путь с помощью GraphFrames

📍 1. Скачиваем карту и строим граф улиц

import osmnx as ox

# Загрузка данных о дорогах Москвы
G = ox.graph.graph_from_place("Moscow", network_type="drive")

# Отображение дорог на карте
moscow_gdf = ox.geocoder.geocode_to_gdf("Moscow")
fig, ax = ox.plot.plot_graph(G, show=False, close=False, bgcolor="#111111", edge_color="#ffcb00", edge_linewidth=0.3, node_size=0)
moscow_gdf.plot(ax=ax, fc="#444444", ec=None, lw=1, alpha=1, zorder=-1)

# Настройка границ карты
margin = 0.02
west, south, east, north = moscow_gdf.union_all().bounds
margin_ns = (north - south) * margin
margin_ew = (east - west) * margin
ax.set_ylim((south - margin_ns, north + margin_ns))
ax.set_xlim((west - margin_ew, east + margin_ew))
plt.show()


📁 2. Сохраняем геометрическое описание города в формате GeoJSON и данные о вершинах и рёбрах в формате CSV
with open('Moscow.geojson', 'w') as file:
file.write(moscow_gdf.to_json())

nodes = G.nodes(data=True)
with open('nodes.csv', 'a') as file:
file.write("id,lat,lonn")
for (node, data) in nodes:
file.write("%d,%f,%fn" % (node, data.get("y"), data.get("x")))

edges = G.edges(data=True)
def decode_maxspeed(maxspeed):
match maxspeed:
case str():
match maxspeed.lower():
case "ru:urban": return 60
case "ru:rural": return 90
case "ru:living_street": return 20
case "ru:motorway": return 110
case _: return int(maxspeed)
case list(): return min(list(map(decode_maxspeed, maxspeed)))
case _: return maxspeed

with open('edges.csv', 'a') as file:
file.write("src,dst,maxspeed,length,geometryn")
for (src, dst, data) in edges:
maxspeed = decode_maxspeed(data.get("maxspeed", 999))
length = float(data.get("length"))
geometry = shapely.wkt.dumps(data.get("geometry"))
file.write("%d,%d,%d,%f,%sn" % (src, dst, maxspeed, length, geometry))


3. Используем библиотеку GraphFrames для обработки графов на Apache Spark

from pyspark.sql import SparkSession

spark = SparkSession.builder
.config("spark.jars.packages", "graphframes:graphframes:0.8.4-spark3.5-s_2.12")
.master("local[*]")
.appName("GraphFrames")
.getOrCreate()

nodes = spark.read.options(header=True).csv("nodes.csv")
edges = spark.read.options(header=True).csv("edges.csv")

# Вычисление времени прохождения рёбер
edgesT = edges.withColumn("time", edges["length"] / edges["maxspeed"])

# Построение графа
from graphframes import *

g = GraphFrame(nodes, edgesT)


🧭 4. Ищем кратчайший путь по времени
например, от Измайлово до ЖК Зиларт
src = "257601812"
dst = "5840593081"

paths = g.shortestPaths(landmarks=[dst])
paths.filter(F.col("id") == src).show(truncate=False)


💡 Результат: 40 шагов от точки A до точки B.

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

🚀 Хотите прокачаться в работе с Big Data? Изучайте Spark! Записывайтесь на курс Spark Developer от OTUS — учитесь на реальных данных и продвинутых кейсах: https://vk.cc/cMT2kE

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

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

SQL Pro

MySQL Cookbook

Автор:
Sveta Smirnova
Год издания: 2022

#sql #en

Скачать книгу ⬇️

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

SQL Pro

Ловите подборку квизов по SQL💻

Основы SQL:
Тест на знание основ SQL
Тест по основам SQL

Тест на знание SQL:
Часть 1
Часть 2
Часть 3

Тест по базовым командам SQL:
Основы SQL: базовые команды
Основы SQL: тест на знание базовых команд

Тест по запросам и операторам SQL

Тест на глубину понимания SQL

Тест по SQL: проверьте свои знания и навыки

Надеемся на отличные результаты.💪
Хорошего дня всем!😉

#подборка #тесты

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