Решение задачи "вывод строчных английских букв"
Задача
Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования union.
Решение
На текущий момент, коллеги в чатике нагенерили с десяток способов решить данную задачку от совсем простых до монструозных чисто развлечься.
Приведу буквально одно:
#решениезадачи
Задача
Вывести одним запросом латинский алфавит в виде строчных букв, каждая буква - отдельная строка, без использования 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
Я думаю, у всех есть истории, от которых волосы встают дыбом.
У меня есть одна.
В году 2006, я работал ДБА в одном новосибирском банке.
Как это водится, было открыто несколько окошек Putty одновременно (ssh-подключений к серверам БД).
К сожалению, он тогда не умел (да и сейчас вроде бы не умеет), подкрашивать окно цветом, в зависимости от подключения.
А-ля красный для такого-то сервера (прод), зеленый для такого-то (дев) и т.п.
У меня была задача - обновить учебную БД. Обновление включало в себя - опустить БД, грохнуть файлы, скопировать с PROD файлы в горячем режиме, и поднять учебную БД.
Делал это не первый раз, но по запаре, перепутал окошки с Putty и случайно грохнул файлы ПРОД БД 🤦🏻♂️
Слава богу, приложение было не прям, что бы критичное + был standby.
Потеряли 5 минут бизнесового времени и 30 минут реального. Начальство пожурило 😁
ДБА как сапер. Шанс ошибиться только один 😂
Поделиться историями в чатике 💬
Всем хороших выходных 🎊
#юмор
Oracle Developer
Всем привет!
Очень рад, что мой призыв, писать авторские статьи, периодически находит отклик.
В ближайшие несколько недель на канале будет публиковаться серия постов от Даниила. Он тестировщик. Посты будут полезны скорее для QA, но могут заинтересовать и Junior DBD. Посмотрим, что из этого выйдет 😉
Это его первый опыт, не все может получиться с первого раза. Давайте проявим дружелюбие, тем более, что у нас в чатике не принято брызгать кислотой 😉 Тем не менее, фидбек будет полезен, даже, если он и не совсем позитивный - это точка роста. Давайте будем корректны по отношению к друг другу.
Я же в свою очередь напомню. Если у вас есть какой-то интересный авторский материал относящийся к Oracle - разработке, администрированию и т.п. велком. Я готов опубликовать его с сохранением авторства. Это не обязательно должна быть серия постов. Это может быть и один пост. Народ у нас в канале разный - уровень, специализация и т.п. думаю кому-то да зайдет. Пишите в личку 👍
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
Привет всем, меня зовут Даниил!
В тестировании уже несколько лет, долгое время 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
Telegram
Oracle Developer👨🏻💻
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...
Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.
Отец-основатель: @denis_dbd Кивилёв Денис
SQL, PL/SQL, оптимизация, архитектура и многое другое...
Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.
Отец-основатель: @denis_dbd Кивилёв Денис
Чем скрипт тестировщика отличается от скрипта разработчика? (2/17)
Самое главное, cкрипт тестировщика МОЖЕТ быть не оптимальным, но он ДОЛЖЕН возвращать верный результат.
Т.е. часто лучше пойти каким-то более длинным путем написания скрипта, нежели разработчик.
Да, скрипт может выполняться очень долго, но, если он дает такой же результат, что и скрипт разработчика, значится с 99% уверенностью можно считать, что все работает корректно.
Поэтому не нужно стремиться писать оптимально и красиво. Нужно стремиться писать понятно и прямолинейно. Т.е. каждая следующая строчка скрипта явно должна быть очевидна вам и вашему коллеге.
⚠️ скрипт только для дев/тест сред.
Звучит непонятно?
Надеюсь, следующие посты внесут ясность 😉
Обсудить в чатике 💬
Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
Самое главное, cкрипт тестировщика МОЖЕТ быть не оптимальным, но он ДОЛЖЕН возвращать верный результат.
Т.е. часто лучше пойти каким-то более длинным путем написания скрипта, нежели разработчик.
Да, скрипт может выполняться очень долго, но, если он дает такой же результат, что и скрипт разработчика, значится с 99% уверенностью можно считать, что все работает корректно.
Поэтому не нужно стремиться писать оптимально и красиво. Нужно стремиться писать понятно и прямолинейно. Т.е. каждая следующая строчка скрипта явно должна быть очевидна вам и вашему коллеге.
⚠️ скрипт только для дев/тест сред.
Звучит непонятно?
Надеюсь, следующие посты внесут ясность 😉
Обсудить в чатике 💬
Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
Telegram
Oracle Developer Chat👨🏻💻🗣👥
Чат для обсуждения постов канала "Oracle Developer".
https://t.me/oracle_dbd - основной канал
Автор канала и создатель чата Кивилев Денис (@denis_dbd)
https://t.me/oracle_dbd - основной канал
Автор канала и создатель чата Кивилев Денис (@denis_dbd)
Ч.1 С чего начать изучать SQL? (3/17)
Если вы не изучали SQL, то первым делом нужно понять как он работает.
В этом как раз и заключается вся сложность.
Нужно понимать последовательность выполнения операций.
Буду объяснять на примере стандартной схемы HR и таблички employees.
Например:
Перепишем его в той последовательности, как он будет выполняться:
Часто начинающие пишут что-то типа такого:
Естественно, СУБД выкидывает ошибку (неактуально для ORACLE версии 23)
Нужно запомнить:
Первым всегда выполнятся часть от From до Where, когда это понимание приходит - уже проще соединять таблицы 😊
Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
Если вы не изучали SQL, то первым делом нужно понять как он работает.
В этом как раз и заключается вся сложность.
Нужно понимать последовательность выполнения операций.
Буду объяснять на примере стандартной схемы HR и таблички employees.
Например:
select department_id, last_name, sum(salary)Хоть скрипт начинается с select, но выполняться он будет по-другому.
from employees
where first_name = 'John'
group by department_id, last_name
having sum(salary)>1000
order by department_id, last_name
Перепишем его в той последовательности, как он будет выполняться:
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т.е. в select присваивают псевдоним полю (slr), а потом ниже пытаются к нему обратиться (having).
from employees
where first_name = 'John'
group by department_id, last_name
having slr > 1000
order by department_id, last_name
Естественно, СУБД выкидывает ошибку (неактуально для ORACLE версии 23)
Нужно запомнить:
Первым всегда выполнятся часть от From до Where, когда это понимание приходит - уже проще соединять таблицы 😊
Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
Ч.2. С чего начать изучать SQL? (4/17)
У нас есть таблицы (employees, departments), в которых хранится: название отдела, фио, должность, зп в месяц
Давайте их соединим:
Для тестировщика можно оперировать таким допущением.
После FROM идет сборка "огромной таблицы" из всех перечисленных таблиц.
Вот собралась одна такая таблица - и дальше уже начинают ее фильтровать и из нее делать select.
Почему я заострил на этом внимание?
Гуглеж или чтение учебников с ходу не дают эту информацию. Нужно прочитать 100500 страниц текста, чтобы это понять.
А учебники, вообще, мало кто читает...
После понимания этого нужно переходить:
- К соединению таблиц.
- Затем уже изучение агрегирующих функций.
- Всякие полезности разработки, типа оконных функций - можно вначале не изучать, они постигаются по мере усложнения задач. Часто не нужны тестировщику.
- План запроса - это магия. Подозреваю, что для многих разработчиков тоже (шутка, хотя...)
Обсудить в чатике 💬
Автор: @KlimenkovDM
#sqlдлятестировщиков #тестирование
Специально для Oracle Developer
У нас есть таблицы (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
По техническим причинам, решили опубликовать все посты сразу в одном месте.
Из-за отсутствия свободного времени у Даниила на редактирование, посты опубликованы "как есть" без редакций и купюр😉
Начинающим QA и заинтересовавшимся - рекомендую дочитать до конца, возможно, найдете, что-то полезное для себя.
От автора
"Да, серия постов получилась сумбурной :)
И по ней явно не научишься писать SQL запросы.
Однако, если вы сейчас изучаете SQL, то надеюсь эти лайфхаки вам помогут в работе."
Напомню, это была "проба пера". Не всегда все выходит, так как мы хотим. Ничего страшного. В нашей жизни должно быть пространство для экспериментов 😉
Если есть желание поддержать автора - ставьте 🔥
Обсудить в чатике 💬
Всем хороших выходных 🎊
Oracle Developer
Коллеги погромисты, с профессиональным праздником 👯♀️
А вот и эксклюзивный стих для канала про программистов от ChatGpt:
В мире кода и баз данных,
Oracle разработчик - властелин,
Он читает строки, словно маг,
А глюки в его коде - неосязаемы, по-арабски.
От себя пожелаю - гореть своей профессией, получать удовольствие, чтоб каждый день был как праздник 😉🔥
Поздравить друг друга в чатике 💬
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
Друзья, всем привет!
Решил продолжить практику написания постов на тему технических собеседований. Собеседование проходил на позицию 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. Что это и как работает?
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
Список вопросов: см. в посте вторника.
Ответы:
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
Необходимо перестроить справочник ресторанов, убрав столбец director. История должна быть перестроена.
Основная цель задания - написать sql запрос, который пересоберет историю изменений в формате SCD2, исключая столбец director.
При решении этой задачи в голове сразу всплывает мысль воспользоваться оконными функциями для объединения/схлопывания интервалов по строкам, в которых изменения происходили только по полю director.
Важно учесть периоды, в которых происходили изменения только в поле seat_cnt: 300, 500, 300 при прочих равных условиях, т.е. временные изменения кол-ва мест в ресторанах.
В противном случае получим пересечение соседних интервалов в рамках одного ресторана.
Можно также решить через конструкцию model в oracle.
Обсудить в чатике 💬
Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
Итоги собеседования во "Вкусно и Точка"
Так и не сумели договориться по деньгам 😊
HR 💬 "Вы произвели хорошее впечатление, но, к сожалению, у нас есть ограничения по ФОТ. Максимально возможный оклад , который мы можем предложить вам, 350k gross."
Договорились на том, что если появятся вакансии поинтереснее, то продолжим диалог.
Дам оценку со своей стороны:
Начало интервью стартовало грустно. Немного смутила не бодрая подача описания задач и самой вакансии со стороны собеседующих. Но где-то в середине нашли общую волну и продолжили в позитивном ключе.
По итогу интервью у меня остались приятные впечатления и могу сказать, что в самом конце появилась профессиональная симпатия к собеседующим.
Выводы:
Для себя я понял, что на собеседовании очень важно говорить уверенно и с легкой наглостью.
⚠️Важно не перегибать и вовремя понять, что вы, возможно, не целиком видите картину.
Обсудить в чатике 🫂
Палец вверх, если зашло 👍
Ставь 🔥, если хочешь узнать, что спрашивали на интервью по секции System Design в компанию, занимающуюся разработкой продуктов интегрированного планирования и управления цепями поставок.
Обсудить в чатике 💬
Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
Так и не сумели договориться по деньгам 😊
HR 💬 "Вы произвели хорошее впечатление, но, к сожалению, у нас есть ограничения по ФОТ. Максимально возможный оклад , который мы можем предложить вам, 350k gross."
Договорились на том, что если появятся вакансии поинтереснее, то продолжим диалог.
Дам оценку со своей стороны:
Начало интервью стартовало грустно. Немного смутила не бодрая подача описания задач и самой вакансии со стороны собеседующих. Но где-то в середине нашли общую волну и продолжили в позитивном ключе.
По итогу интервью у меня остались приятные впечатления и могу сказать, что в самом конце появилась профессиональная симпатия к собеседующим.
Выводы:
Для себя я понял, что на собеседовании очень важно говорить уверенно и с легкой наглостью.
⚠️Важно не перегибать и вовремя понять, что вы, возможно, не целиком видите картину.
Обсудить в чатике 🫂
Палец вверх, если зашло 👍
Ставь 🔥, если хочешь узнать, что спрашивали на интервью по секции System Design в компанию, занимающуюся разработкой продуктов интегрированного планирования и управления цепями поставок.
Обсудить в чатике 💬
Автор: Ruslan
#вкусноиточка #собеседование
Oracle Developer
Всем привет!
Конкурс пока откладываем, сейчас нет времени им заниматься, но он обязательно состоится.
А пока наслаждайтесь, собеседованием в "Леруа Мерлен" от Руслана.
Конкурс пока откладываем, сейчас нет времени им заниматься, но он обязательно состоится.
А пока наслаждайтесь, собеседованием в "Леруа Мерлен" от Руслана.
Собеседование в Леруа Мерлен
Друзья, всем привет!
Пока нахожусь в процессе написания поста по секции 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
Друзья, всем привет!
Пока нахожусь в процессе написания поста по секции 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
Техническое собеседование в Леруа Мерлен
Формат общения - онлайн, звонок по Zoom.
Список вопросов:
1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
При загрузке новых цен в таблицу просто добавляются новые строчки без delete/update предыдущих.
Необходимо написать запрос, который выгрузит данные по активным ценам на конкретную дату. Обернуть в функцию. Какие плюсы и минусы такого хранения данных?
2️⃣ Есть 2 таблицы:
▫️Таблица поставок: Поставщик, Цена товара, Кол-во заказанного товара, дата заказа.
▫️Таблица поставщиков: Поставщик, Наименование поставщика
Необходимо найти поставщика с максимальной суммой заказов за месяц.
3️⃣ Условия задачи выше(см. п.2). Необходимо найти поставщика, который ничего не поставил за месяц. Рассказать, какой будет план запроса, что необходимо сделать, чтобы в плане был hash join и что это такое?
4️⃣ Есть таблица поставок: id, delivery_date, supplier_id, product_id, shipped, unit_price.
Какой поставщик отгрузил товаров нам на наибольшую сумму денег?
5️⃣ Колоночное хранение данных. Какие плюсы и минусы?
6️⃣ Данные в таблице равномерно распределены за 10 лет, не секционированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?
7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.
8️⃣ Как распределяются данные по сегментам и что такое перекосы?
9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?
Разбор как всегда в четверг 🎓
Обсудить в чатике 💬
Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Формат общения - онлайн, звонок по Zoom.
Список вопросов:
1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
При загрузке новых цен в таблицу просто добавляются новые строчки без delete/update предыдущих.
Необходимо написать запрос, который выгрузит данные по активным ценам на конкретную дату. Обернуть в функцию. Какие плюсы и минусы такого хранения данных?
2️⃣ Есть 2 таблицы:
▫️Таблица поставок: Поставщик, Цена товара, Кол-во заказанного товара, дата заказа.
▫️Таблица поставщиков: Поставщик, Наименование поставщика
Необходимо найти поставщика с максимальной суммой заказов за месяц.
3️⃣ Условия задачи выше(см. п.2). Необходимо найти поставщика, который ничего не поставил за месяц. Рассказать, какой будет план запроса, что необходимо сделать, чтобы в плане был hash join и что это такое?
4️⃣ Есть таблица поставок: id, delivery_date, supplier_id, product_id, shipped, unit_price.
Какой поставщик отгрузил товаров нам на наибольшую сумму денег?
5️⃣ Колоночное хранение данных. Какие плюсы и минусы?
6️⃣ Данные в таблице равномерно распределены за 10 лет, не секционированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?
7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.
8️⃣ Как распределяются данные по сегментам и что такое перекосы?
9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?
Разбор как всегда в четверг 🎓
Обсудить в чатике 💬
Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Telegram
Oracle Developer Chat👨🏻💻🗣👥
Чат для обсуждения постов канала "Oracle Developer".
https://t.me/oracle_dbd - основной канал
Автор канала и создатель чата Кивилев Денис (@denis_dbd)
https://t.me/oracle_dbd - основной канал
Автор канала и создатель чата Кивилев Денис (@denis_dbd)
Техническое собеседование в Леруа Мерлен. Ответы
Список вопросов: см. в посте вторника.
Ответы:
1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
Полная постановка в посте вторника
Итоговая функция - см. следующий пост в файле ⬇️
Плюсы:
▫️Быстрее запись в таблицу;
▫️Меньше места занимают данные.
Минусы:
▫️При любом запросе необходимо считывать всю таблицу для преобразования в SCD2 формат;
▫️При росте объема данных текущие вычислительные ресурсы перестанут справляться с вычислениями;
▫️Отсутствие поля для секционирования, т.е. только горизонтальное масштабирование ресурсов кластера поможет решить проблемы с производительностью запросов.
По 2️⃣, 3️⃣ и 4️⃣ запросы довольно простые, поэтому решение оставим на добрую волю читателей.
Добавлю, что в плане запроса должен быть full table scan по обеим таблицам и hash join.
Что это такое и с чем это едят - рассказывается на курсе по оптимизации Oracle SQL.
5️⃣ Колоночное хранение данных. Какие плюсы и минусы?
Вкратце колоночное хранение данных - это хранение каждого поля таблицы в отдельном файле.
Плюсы:
▫️Производительность запросов ощутимо выше, т.к. читаются только те данные, которые указаны в select, а не вся строка;
▫️Хорошо подходят для вставки большого объема данных, операции batch-insert;
▫️Удаление колонки существенно дешевле в отличии от традиционных СУБД, удаляется только файл с указанным полем, не затрагивая остальные данные;
▫️Алгоритмы сжатия данных работают лучше на колоночных таблицах, т.к. каждый файл, который необходимо сжать, хранит данные только одного типа.
Минусы:
Не подходит для OLTP, т.к. стоимость одиночных вставок очень высока.
6️⃣ Данные в таблице равномерно распределены за 10 лет, не партицированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?
Алгоритм:
⚠️ Можно поступить по-другому в случае, если доступ к таблице для пользователя предоставлен через view.
К сожалению, нет под рукой GP для эксперимента.
Концепт идеи:
Реализовать онлайн перестройку таблицы, выделить в отдельную секцию данные за 8 лет, а во view добавить условие фильтрации, чтобы пользователь не смог получить эти исторические данные.
7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.
▫️Воспользоваться оконной функцией row_number() с указанием 30 полей в partition by.
▫️Создать сцепку из 30 полей и применить hash-функцию. В разрезе нового поля применить row_number.
▫️Создать уникальный индекс(в виду ограничений действий на промышленной среде этот вариант не подходит).
8️⃣ Как распределяются данные по сегментам и что такое перекосы?
Тема отдельного поста.
9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?
Тема довольно дискуссионная. Расскажу про свой опыт и наблюдения решения подобных задач.
Здесь можно выделить два решения:
Промышленное коробочное решение - в эту сторону чаще смотрят большие начальники;
Самописные решения на базе ML - очень любят амбициозные аналитики и разработчики.
Критерий выбора зависит от целей, которая преследует компания:
▫️Повышении уровня товарооборота и др. операционных показателей - однозначно промышленное коробочное решение.
▫️Только автоматизация - можно попробовать справиться собственными силами или силами аутстаффинга.
Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer
Список вопросов: см. в посте вторника.
Ответы:
1️⃣ Есть таблица из следующих полей: Магазин, Товар, Дата старта действия цены, Цена.
Полная постановка в посте вторника
Итоговая функция - см. следующий пост в файле ⬇️
Плюсы:
▫️Быстрее запись в таблицу;
▫️Меньше места занимают данные.
Минусы:
▫️При любом запросе необходимо считывать всю таблицу для преобразования в SCD2 формат;
▫️При росте объема данных текущие вычислительные ресурсы перестанут справляться с вычислениями;
▫️Отсутствие поля для секционирования, т.е. только горизонтальное масштабирование ресурсов кластера поможет решить проблемы с производительностью запросов.
По 2️⃣, 3️⃣ и 4️⃣ запросы довольно простые, поэтому решение оставим на добрую волю читателей.
Добавлю, что в плане запроса должен быть full table scan по обеим таблицам и hash join.
Что это такое и с чем это едят - рассказывается на курсе по оптимизации Oracle SQL.
5️⃣ Колоночное хранение данных. Какие плюсы и минусы?
Вкратце колоночное хранение данных - это хранение каждого поля таблицы в отдельном файле.
Плюсы:
▫️Производительность запросов ощутимо выше, т.к. читаются только те данные, которые указаны в select, а не вся строка;
▫️Хорошо подходят для вставки большого объема данных, операции batch-insert;
▫️Удаление колонки существенно дешевле в отличии от традиционных СУБД, удаляется только файл с указанным полем, не затрагивая остальные данные;
▫️Алгоритмы сжатия данных работают лучше на колоночных таблицах, т.к. каждый файл, который необходимо сжать, хранит данные только одного типа.
Минусы:
Не подходит для OLTP, т.к. стоимость одиночных вставок очень высока.
6️⃣ Данные в таблице равномерно распределены за 10 лет, не партицированы.
Как "бесшовно" для юзера удалить данные за 8 лет и предусмотреть подобные регламентные очистки в будущем?
Алгоритм:
▫️create table t2 as select * from t where ... distributed ...;
▫️alter table t rename t3; alter table t2 rename t;
Далее решаем, удалять данные из хранилища или сохранить в качестве истории. ⚠️ Можно поступить по-другому в случае, если доступ к таблице для пользователя предоставлен через view.
К сожалению, нет под рукой GP для эксперимента.
Концепт идеи:
Реализовать онлайн перестройку таблицы, выделить в отдельную секцию данные за 8 лет, а во view добавить условие фильтрации, чтобы пользователь не смог получить эти исторические данные.
7️⃣ Есть очень большая таблица, в которой 100 полей. Первичного ключа в таблице нет, но есть набор из 30 полей, при помощи которого можно идентифицировать каждую строку. Как можно проверить наличие дубликатов в таблице?
⚠️Подсказка: GROUP BY по 30 полям выполняется очень долго или вообще не отрабатывает.
▫️Воспользоваться оконной функцией row_number() с указанием 30 полей в partition by.
▫️Создать сцепку из 30 полей и применить hash-функцию. В разрезе нового поля применить row_number.
▫️Создать уникальный индекс(в виду ограничений действий на промышленной среде этот вариант не подходит).
8️⃣ Как распределяются данные по сегментам и что такое перекосы?
Тема отдельного поста.
9️⃣ Представим, что вы главный аналитик на проекте ценообразования. Раньше ценообразованием занимались эксперты, теперь хотим, чтобы цена определялась автоматически. Что вы будете делать?
Тема довольно дискуссионная. Расскажу про свой опыт и наблюдения решения подобных задач.
Здесь можно выделить два решения:
Промышленное коробочное решение - в эту сторону чаще смотрят большие начальники;
Самописные решения на базе ML - очень любят амбициозные аналитики и разработчики.
Критерий выбора зависит от целей, которая преследует компания:
▫️Повышении уровня товарооборота и др. операционных показателей - однозначно промышленное коробочное решение.
▫️Только автоматизация - можно попробовать справиться собственными силами или силами аутстаффинга.
Автор: Ruslan
#leroymerlin #собеседование
Oracle Developer