Oracle Developer👨🏻‍💻
3.22K subscribers
611 photos
68 videos
2 files
489 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Всем хороших выходных 🎊

Перетереть в чатике 💬

#юмор
Oracle Developer
🔥38🤩7👍62🤯1
Replication vs. Table Partitioning vs. Table Sharding vs. Database Federation

На днях попался забавный слайд. Вдруг кому-то зайдет.

🔸 Replication (репликация) - хранении копии одних и тех же данных на разных серверах.

🔸 Table partitioning (секционирование таблиц) - разбиение таблицы на части, с использованием ключа секционирования. Физически - разные части, логически - работаем как с одной таблицей.

🔸 Table sharding (шардирование) - разбиение на независимые части одной сущности. Было бы наглядней, если бы показали на примере разных БД. Т.е. одна часть таблицы хранится в одной БД, вторая часть таблицы в другой БД и т.д.
Например, vk.com хранит пользователей с A-E на одном сервере, F-J на другом и т.д. (пример, сильно притянутый за уши).

🔸 Database Federation - объединение нескольких физических БД в логическую БД. Позволяет работать приложениям с логической БД, как будто она одна. Мне на практике такие конфигурации не встречались. Для любознательных - статья1, статья2, вики.

Чатик 💬

#секционирование
Oracle Developer
🔥13👍102
Задача. Вывод строчных английских букв

Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования union.

Уровень сложности: легкий

Было бы круто посмотреть на различные способы решения.
Как всегда, разбор в четверг 🎓

Обсудить в чатике 💬

#задача
Oracle Developer
👍9
Решение задачи "вывод строчных английских букв"

Задача
Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования union.

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

Приведу буквально одно:
select chr(ascii('a') + level - 1) 
from dual
connect by level <= ascii('z') - ascii('a') + 1;

Всем неравнодушным респект, было интересно посмотреть на такое разнообразие 🔥

#решениезадачи
🎉13👍7🔥7
Способы взбодриться с утра

Я думаю, у всех есть истории, от которых волосы встают дыбом.
У меня есть одна.

В году 2006, я работал ДБА в одном новосибирском банке.
Как это водится, было открыто несколько окошек Putty одновременно (ssh-подключений к серверам БД).
К сожалению, он тогда не умел (да и сейчас вроде бы не умеет), подкрашивать окно цветом, в зависимости от подключения.
А-ля красный для такого-то сервера (прод), зеленый для такого-то (дев) и т.п.

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

Делал это не первый раз, но по запаре, перепутал окошки с Putty и случайно грохнул файлы ПРОД БД 🤦🏻‍♂️
Слава богу, приложение было не прям, что бы критичное + был standby.
Потеряли 5 минут бизнесового времени и 30 минут реального. Начальство пожурило 😁

ДБА как сапер. Шанс ошибиться только один 😂

Поделиться историями в чатике 💬

Всем хороших выходных 🎊

#юмор
Oracle Developer
🤯23👍84🔥4
Всем привет!

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

В ближайшие несколько недель на канале будет публиковаться серия постов от Даниила. Он тестировщик. Посты будут полезны скорее для QA, но могут заинтересовать и Junior DBD. Посмотрим, что из этого выйдет 😉

Это его первый опыт, не все может получиться с первого раза. Давайте проявим дружелюбие, тем более, что у нас в чатике не принято брызгать кислотой 😉 Тем не менее, фидбек будет полезен, даже, если он и не совсем позитивный - это точка роста. Давайте будем корректны по отношению к друг другу.

Я же в свою очередь напомню. Если у вас есть какой-то интересный авторский материал относящийся к Oracle - разработке, администрированию и т.п. велком. Я готов опубликовать его с сохранением авторства. Это не обязательно должна быть серия постов. Это может быть и один пост. Народ у нас в канале разный - уровень, специализация и т.п. думаю кому-то да зайдет. Пишите в личку 👍

Oracle Developer
👍111
SQL для начинающих тестировщиков (1/17)

Привет всем, меня зовут Даниил!
В тестировании уже несколько лет, долгое время SQL мне был не нужен. Однако, потом я попал на проект, где SQL был основным инструментом для тестирования - пришлось изучать 🤷🏻‍♂️
Текущий уровень знаний оцениваю как выше среднего (среди тестировщиков). Понятное дело, что есть ребята, которые меня многому научат.

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

Планирую описать
1. А для чего SQL тестировщику?
2. Чем скрипт тестировщика отличается от скрипта разработчика?
3. С чего начать изучать SQL?
4. Select * from - плохая привычка, правильная select distinct * from
5. NVL - вторая правильная привычка тестировщика
6. Так left или inner?
7. Избегаем конструкции вида select * from (select * from (select * from t2) t1) t
8. With as - великое изобретение для работы тестировщика
9. MINUS - второе великое изобретение для работы тестировщика
10. Работа с датами
11. Алиасы таблиц - правильный тон
12. Параметризация скриптов

Примечание
▫️ Я не планирую писать учебник или ссылки. Многое гуглится, еще больше можно просто узнать читая скрипты опытных разработчиков, ну и личное общение с ними - никто не отменял.
▫️Все ошибки, приведенные в постах, реальны (либо мои, либо чужие).
▫️Писать я буду про select. Модификация данных - отдельная тема.
▫️В постах будет рассматриваться только Oracle.

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
👍256
Чем скрипт тестировщика отличается от скрипта разработчика? (2/17)

Самое главное, cкрипт тестировщика МОЖЕТ быть не оптимальным, но он ДОЛЖЕН возвращать верный результат.

Т.е. часто лучше пойти каким-то более длинным путем написания скрипта, нежели разработчик.
Да, скрипт может выполняться очень долго, но, если он дает такой же результат, что и скрипт разработчика, значится с 99% уверенностью можно считать, что все работает корректно.

Поэтому не нужно стремиться писать оптимально и красиво. Нужно стремиться писать понятно и прямолинейно. Т.е. каждая следующая строчка скрипта явно должна быть очевидна вам и вашему коллеге.
⚠️ скрипт только для дев/тест сред.

Звучит непонятно?
Надеюсь, следующие посты внесут ясность 😉

Обсудить в чатике 💬

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
👍111👎1
Ч.1 С чего начать изучать SQL? (3/17)

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

Буду объяснять на примере стандартной схемы HR и таблички employees.

Например:

select department_id, last_name, sum(salary)
from employees
where first_name = 'John'
group by department_id, last_name
having sum(salary)>1000
order by department_id, last_name

Хоть скрипт начинается с select, но выполняться он будет по-другому.
Перепишем его в той последовательности, как он будет выполняться:

  from employees e 
where e.first_name = 'John'
group by department_id, last_name
having sum(salary)>1000
select department_id, last_name, sum(salary)
order by department_id, last_name;

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

Часто начинающие пишут что-то типа такого:

select department_id, last_name, sum(salary) as slr
from employees
where first_name = 'John'
group by department_id, last_name
having slr > 1000
order by department_id, last_name

т.е. в select присваивают псевдоним полю (slr), а потом ниже пытаются к нему обратиться (having).
Естественно, СУБД выкидывает ошибку (неактуально для ORACLE версии 23)

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

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
👍141🎉1
Ч.2. С чего начать изучать SQL? (4/17)

У нас есть таблицы (employees, departments), в которых хранится: название отдела, фио, должность, зп в месяц

Давайте их соединим:

select d.department_name, e.first_name, e.last_name, sum(e.salary) 
from employees e
join departments d on e.department_id = d.department_id
where e.first_name = 'John'
group by d.department_name, e.first_name, e.last_name
having sum(e.salary) > 1000
order by d.department_name, e.first_name;

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

Вот собралась одна такая таблица - и дальше уже начинают ее фильтровать и из нее делать select.

Почему я заострил на этом внимание?
Гуглеж или чтение учебников с ходу не дают эту информацию. Нужно прочитать 100500 страниц текста, чтобы это понять.
А учебники, вообще, мало кто читает...

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

Обсудить в чатике 💬

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
👍51
Друзья, всем привет!

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

Из-за отсутствия свободного времени у Даниила на редактирование, посты опубликованы "как есть" без редакций и купюр😉
Начинающим QA и заинтересовавшимся - рекомендую дочитать до конца, возможно, найдете, что-то полезное для себя.

От автора
"Да, серия постов получилась сумбурной :)
И по ней явно не научишься писать SQL запросы.
Однако, если вы сейчас изучаете SQL, то надеюсь эти лайфхаки вам помогут в работе."

Напомню, это была "проба пера". Не всегда все выходит, так как мы хотим. Ничего страшного. В нашей жизни должно быть пространство для экспериментов 😉
Если есть желание поддержать автора - ставьте 🔥

Обсудить в чатике 💬

Всем хороших выходных 🎊

Oracle Developer
🔥17👍62
Коллеги погромисты, с профессиональным праздником 👯‍♀️

А вот и эксклюзивный стих для канала про программистов от ChatGpt:
В мире кода и баз данных,
Oracle разработчик - властелин,
Он читает строки, словно маг,
А глюки в его коде - неосязаемы, по-арабски.

От себя пожелаю - гореть своей профессией, получать удовольствие, чтоб каждый день был как праздник 😉🔥

Поздравить друг друга в чатике 💬

Oracle Developer
🎉32👍11🔥43
Собеседование во "Вкусно и Точка"

Друзья, всем привет!

Решил продолжить практику написания постов на тему технических собеседований. Собеседование проходил на позицию Senior Data Engineer во "Вкусно и Точка".

О вакансии
Дата платформа(DP) включает в себя:
▫️DWH(15Tb) на базе дистрибутива Greenplum от Arenadata(ADB);
▫️ClickHouse и Superset для Data Marts и BI;
▫️S3 — для хранения сырых данных (RAW слой);
▫️Airflow в качестве оркестратора ETL pipeline(ов);
▫️Шина данных ESB(Kafka, NiFi, RabbitMQ)

Основные задачи:
Основные задачи связаны с развитием Дата платформы. В текущем варианте хранилище находится в самом начале своего развития, как и в целом IT департамент, т.к. при уходе из России Макдональдс забрал практически весь IT ландшафт.

Плюшки
Годовой бонус, ДМС, скидки на спорт.

Из минусов:
Гибридный формат работы(3 дня Office, 2 дня Home Office).

Про з/п
Диалог начинали от 350k net. После тех. собеседования и приглашения в офис для личного знакомства сумма изменилась до 400к net.

Этапы собеседований
1️⃣
Предварительное общение с HR
Вкратце о своем опыте и почему ищу работу.

Продолжительность интервью - 15 минут.

2️⃣ Интервью
Состав из 2х человек:
▫️ Руководитель направления развития DP;
▫️ Архитектор;
Формат интервью:
▫️ Знакомство;
▫️ Технические вопросы;
▫️ Вопросы от соискателя.

Продолжительность интервью - 1.5 часа.

3️⃣ Оффер

Продолжение следует...

Обсудить в чатике 💬

Автор: Ruslan
Предыдущий опыт собеседований от него.

#вкусноиточка #собеседование
Oracle Developer
👍221🔥1
Техническое собеседование во "Вкусно и Точка"

Формат общения - онлайн, звонок по Телемосту Яндекс.

Список вопросов:

1️⃣ Smart Scans. Что это и как работает?

2️⃣ Способы оптимизации запросов. Описать процесс, привести примеры.

3️⃣ Задача на SQL:
Необходимо перестроить справочник ресторанов, убрав столбец director. История должна быть перестроена.

4️⃣ Какие особенности работы с таблицами в Greenplum?

5️⃣ Какие цели у централизованного DDS слоя в DWH?

Разбор, как всегда, в четверг 🎓
Обсудить в чатике 💬

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
🤯10👍41
Техническое собеседование во "Вкусно и Точка". Ответы

Список вопросов: см. в посте вторника.

Ответы:
1️⃣ Smart Scans. Что это и как работает?
Классические схемы включают в себя сервер СУБД и системы хранения. Под каждый из компонентов оборудование может подбираться как отдельно, так и вместе с целью достижения максимальной производительности БД. В таких схемах системы хранения становятся узким местом в вопросах оптимизации производительности БД.

Опция Smart Scan - это фича Oracle Exadata.

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

В случае Exadata выполнение SQL-запросов может выполняться на серверах хранения. Ключевое слово может. Эта опция называется Smart Scan. Поскольку это опция, она может быть как включена, так и выключена(см. параметр
cell_offload_processing).

Выборки и фильтрация данных происходят на серверах хранения, а сервер БД занимается приемом результатов от серверов хранения и их объединением в единый пакет результата.

Для тех, кто хочет углубиться в архитектуру
Oracle Exadata прикладываю ссылку.

2️⃣ Способы оптимизации запросов. Описать процесс, привести примеры.
Тема довольно сложная и обширная. Курс по секционированию и оптимизации запросов с лихвой покрывают большинство вопросов на собеседованиях.

3️⃣ Задача на SQL:
см. следующий пост.

4️⃣ Какие особенности работы с таблицами в Greenplum?
Эта тема отдельного поста. Если этот пост наберет 50 лайков, сделаю отдельную статью, в которой подробно разберу данную тему.

5️⃣ Какие цели у централизованного DDS слоя в DWH?
Detail Data Storage, DDS - один из слоев DWH, предназначенный для целей внедрения сквозной аналитики по компании. Он позволяет объединить множество таблиц из различных систем в основные сущности, в разрезе которых анализируется динамика операционных показателей бизнеса.

Отсутствие данного слоя в DWH в большинстве случаев приводит:
▫️к несогласованности показателей в отчетности;
▫️к росту нагрузки на ODS;
▫️к избыточности данных в DWH.

Обсудить в чатике 💬

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
👍85
3️⃣ Задача на SQL:
Необходимо перестроить справочник ресторанов, убрав столбец director. История должна быть перестроена.

Основная цель задания - написать sql запрос, который пересоберет историю изменений в формате SCD2, исключая столбец director.

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

Важно учесть периоды, в которых происходили изменения только в поле seat_cnt: 300, 500, 300 при прочих равных условиях, т.е. временные изменения кол-ва мест в ресторанах.
В противном случае получим пересечение соседних интервалов в рамках одного ресторана.

Можно также решить через конструкцию model в oracle.

Обсудить в чатике 💬

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
👍112
Итоги собеседования во "Вкусно и Точка"

Так и не сумели договориться по деньгам 😊

HR 💬 "Вы произвели хорошее впечатление, но, к сожалению, у нас есть ограничения по ФОТ. Максимально возможный оклад , который мы можем предложить вам, 350k gross."

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

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

Выводы:
Для себя я понял, что на собеседовании очень важно говорить уверенно и с легкой наглостью.
⚠️Важно не перегибать и вовремя понять, что вы, возможно, не целиком видите картину.

Обсудить в чатике 🫂

Палец вверх, если зашло 👍

Ставь 🔥, если хочешь узнать, что спрашивали на интервью по секции System Design в компанию, занимающуюся разработкой продуктов интегрированного планирования и управления цепями поставок.

Обсудить в чатике 💬

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
🔥74👍371
Всем привет!
Конкурс пока откладываем, сейчас нет времени им заниматься, но он обязательно состоится.
А пока наслаждайтесь, собеседованием в "Леруа Мерлен" от Руслана.
Собеседование в Леруа Мерлен

Друзья, всем привет!

Пока нахожусь в процессе написания поста по секции System Design, как и обещал в предыдущем посте, решил осветить мой опыт работы на проекте в одном из крупнейших ритейлеров DIY + продолжить практику написания постов на тему технических собеседований.

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

Стек:
Дата платформа(DP) включает в себя:
▫️Greenplum 320TB(ODS 205 TB, MARTS 115 TB);
▫️Greenplum&Power BI, ClickHouse/PostgreSQL&Superset для Data Marts и BI;
▫️Spark SQL — для обработки данных из RAW и загрузки в ODS;
▫️S3 — для хранения сырых данных (RAW слой - 140 TB);
▫️Airflow в качестве оркестратора ETL pipeline(ов);
▫️Шина данных ESB(Kafka, NiFi).

Детали по DP можно прочитать здесь.

Про команду и ее задачи:
Команда из 10 человек:
▫️Product Owner - InHouse;
▫️Team Lead - InHouse;
▫️2 Data Scientist(DS) - 2 FT аутстаффинга;
▫️1 Data Engineer(DE) - 1 FT аутстаффинг;
▫️1 Business and Data Analyst(DA/BA) - 1 FT аутстаффинг;
▫️1 DE/DA/BA - 1 FT аутстаффинг;
▫️2 BI developer(BI) - 1 FT аутстаффинг;
▫️Data partner - InHouse.

Задачи:
1️⃣
Разработать модель динамического ценообразования;
2️⃣Интеграция источников данных по мониторингу цен конкурентов и др. источники;
3️⃣Развитие и оптимизация отчетности ценообразования.

О моем функционале и ролях:
Совмещал роли DE, DA и BA.

Функционал:
1️⃣
Развитие DDS ценообразования;
2️⃣ Интеграция внешних источников;
3️⃣ Развитие и оптимизация BI отчетности в части Data Marts.

Детали по функционалу:
1️⃣
Роли DA и BA подразумевают опыт в части развития DDS, нужно понимать какие факты и справочники должны быть в ритейле, какие разрезы будет смотреть бизнес, ориентироваться по цифрам.
2️⃣ Есть задачи, связанные с интеграциями внешних источников. Их мало. Сам процесс подразумевает много общения и заявок в Slack и др. внутренние системы Леруа, на мой взгляд, ничего общего с функционалом DE/DA/BA.
3️⃣ Прежде всего это оптимизация скриптов и рефакторинг отчетности на предмет того, какими данными хорошо бы обогатить DDS.

Из плюсов:
▫️Доступы дали в 1ый же день;
▫️Можно работать удалено из любой точки мира;
▫️Классный офис со спортзалом и столовой(шведский стол - сравнительно дешево).

Из минусов:
▫️Французская корпоративная культура. Почему это минус - расскажу в финальной части своего поста.
▫️Релизная политика в DWH;
▫️30 % времени кластер Greenplum либо недоступен, либо тормозит.

⚠️ Т.к. мой формат работы в качестве аутстаффера на проекте не подразумевает трудоустройство напрямую в компанию и некоторые опции мне недоступны, остальные параметры я указал, исходя из того, что узнал в процессе работы.

Плюшки:
▫️ДМС и спортзал внутри офиса.
▫️Судя по вакансиям на hh.ru есть внутреннее обучение;
▫️По наблюдениям есть программы развития для сотрудников как вертикально, так и горизонтально.

Про з/п
Для внутренних сотрудников примерно от 200к до 350k net. В основном это ставки для дата-команд.
В финальном посте сделаю краткий обзор на организационную структуру процессов разработки.

Этапы собеседований
1️⃣
Техническое собеседование с одним из внутренних дата инженеров;

Продолжительность тестирования - 60 минут.

2️⃣ Знакомство с руководством(состав из 2х человек):
▫️ Директор по цифровым продуктам;
▫️ Product owner.

Продолжительность ~ 40 минут.

3️⃣ Ответ: взяли/не взяли.

Продолжение следует...

Обсудить в чатике 💬

Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
👍13