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

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

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Задачи на особенности работы с null (Сбер)

Всем привет 😊
Заключительный пост про задачки с собеса Сбербанка.
что уже было: задача1, задача2

На скриншоте задание. Специально не стал переводить в текст, чтоб передать атмосферу 😉

Естественно, на собеседовании нет возможности набрать текст запроса и выполнить. Выполняем "в уме". Рекомендую, поступить так же 😉
Разбор ответов в четверг 🎓

Приветствуется обсуждение в чатике 💬

⚠️ Меж тем, продолжается набор на курс по PL/SQL. Осталось 1️⃣ место. Бронируйте свое участие. Мест нет 🤷‍♂️

#задача #собеседование #сбер
Oracle Developer
Решение задачи на особенности работы с null (Сбер)

Демо-данные для примера
create table test1(a number);
insert into test1 values(1);
insert into test1 values(2);
insert into test1 values(null);
insert into test1 values('');
commit;

Что нужно помнить
1️⃣ null - это неопределенность.
2️⃣ Кавычки без значения ('') - это null, если это не тип CHAR.
2️⃣ Для сравнения с null нельзя просто написать равенство или неравенство, нужно использовать is null или is not null
3️⃣ Использование null в IN бесполезно.

* - правила справедливы для Oracle

Что получим в итоге
Для краткости рассмотрим кейсы, когда А = 1 и A = null (для '' будет такой же)
A = 1
1) все строки, т.к. условие выполняется всегда
2) аналогично
3) аналогично
4) ничего 1!=1, условие всегда не выполняется
5) все строки, т.к. 1 in (1) всегда будет выполняться.
6) ни одной строки, т.к. условие никогда не будет выполнено.

А = null
1) все строки, т.к. условие выполняется всегда
2) ничего, null - особенное значение.
3) все строки, т.к. условие выполняется всегда
4) ничего, null сравниваем через is.
5) аналогично
6) аналогично.

Я не очень люблю подобные задачи... на собесе, помнится, в каких-то неочевидных пунктах запутался, бывает )

Итог: собеседование в Сбер прошел, предложили неплохую ставку, но все равно отказался 🤷🏻‍♂️ А вам достался материал 😉

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

#решениезадачи #собеседование #сбер
Oracle Developer
Всем хороших выходных 🎊

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

#юмор
Oracle Developer
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
Задача. Вывод строчных английских букв

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#юмор
Oracle Developer
Всем привет!

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

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

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

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

Oracle Developer
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
Чем скрипт тестировщика отличается от скрипта разработчика? (2/17)

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

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

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

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

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

Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
Ч.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
Ч.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
Друзья, всем привет!

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

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

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

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

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

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

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

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

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

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

Oracle Developer
Собеседование во "Вкусно и Точка"

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

Решил продолжить практику написания постов на тему технических собеседований. Собеседование проходил на позицию 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
Техническое собеседование во "Вкусно и Точка"

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

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

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

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

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

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

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

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

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

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

Ответы:
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
3️⃣ Задача на SQL:
Необходимо перестроить справочник ресторанов, убрав столбец director. История должна быть перестроена.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer