В мире больших данных
244 subscribers
34 photos
5 files
54 links
Полезные заметки о системном анализе в мире больших данных. Если вам интересны Big Data, DWH, SQL и как навести порядок в данных — заглядывайте. Будет интересно и по делу.

Автор: @JuliaMur
加入频道
DROP, DELETE, TRUNCATE — погружение в мир удаления данных

В SQL есть несколько способов избавиться от данных и хорошо бы в них не путаться. Так что давайте вспоминать азы.

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

DROP TABLE table_name;


DELETE — выборочное удаление
DML-операция DELETE удаляет записи из таблиц, при этом есть возможность удаления данных по условию. Если условие не указано, то удаляются все данные (но не структура объекта). При этом при удалении DELETE возвращает количество удалённых строк. Также стоит помнить, что DELETE сохраняет значения авто-инкрементального ID, т.е. если вы удалили последнюю запись в таблице и у неё был ID 37, новая строка добавится с ID 38.
Транзакцию с DELETE можно откатить. Удаление "построчное", поэтому медленное.

DELETE FROM table_name WHERE column_name=value;


TRUNCATE — быстрая очистка
DDL-операция TRUNCATE позволяет быстро очистить таблицу ото всех записей, так как в лог-транзакций не записывается построчное удаление (быстрота особенно ощущается на больших таблицах, но не экспериментируйте на проде). При удалении TRUNCATE сбрасывает все авто-инкрементальные счётчики и статистику.

TRUNCATE TABLE table_name;


Удаляйте осознано и, главное, с пониманием что и где вы делаете 😄

#sql
1
Сказка о потерянном времени или проблемы с датами при репликации

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

При построении хранилища очень важно понимать какие даты лежат в источниках, какой часовой пояс на сервере и что именно приходит в нужные нам поля таблиц. Иначе мы можем получить несогласованность в данных: если в источник данные приходят без указания часового пояса, но "по умолчанию" считается, что это Москва, а само хранилище работает в UTC, при репликации даты могут сдвинуться на несколько часов (и, например, перейти в следующий день), что приведёт к недопониманию временных интервалов и ошибкам при анализе временных периодов. Это может повлиять на оценку эффективности стратегий или бизнес-процессов.

В финансовой отчетности критически важна точность дат. Несогласованные даты при расчетах прибыли и убытков могут привести к ошибкам в финансовых планах и стратегиях.

Что же делать?

— Необходим анализ всех полей с датами в источниках. Важно понимать, что неразбериха с часовыми поясами может быть даже в рамках одной таблицы, например, даты в тех.полях могут поступать в UTC, а в самих фактах в Московском времени.

— Нужна явная обработка часовых поясов при репликации, чтобы избежать несогласованных данных.

— Использование UTC в общем случае упростит согласование дат и предотвратит временную путаницу.

— Чаще всего лучше использовать тип timestamptz (with time zone), если данный тип поддерживается.

— Проверке времён нужно уделить особо внимание при тестировании и приёмке данных.

Управление часовыми поясами при репликации — ключевой аспект поддержания целостности данных в хранилище. Системный подход к этому вопросу поможет избежать временной путаницы и обеспечить точность аналитических отчётов.

#sql
1
Коротко о Snowflake

— Облачное хранилище данных и аналитическая платформа
— Трёхслойная архитектура: хранение, вычисление и сервисы
— Масштабируемость и производительность
— Лёгкая управляемость
— Высокая доступность и отказоустойчивость
— Автоматическая организация и сжатие данных
— Экономическая эффективность
— Колоночное хранение
— Snowflake SQL соответствует ANSI SQL и в целом очень похож на PostgreSQL

#snowflake
1
Вставка данных в таблицу Greenplum через INSERT INTO

Базовый синтаксис
insert into sandbox.table_name ({column}, {column}, ...) values
(123456, Ivan, '2023-11-17 19:45:00'),
(123457, Olga, '2023-11-17 19:46:00');


Важно! тип вставляемых данных должен соответствовать типу столбцов.

insert into sandbox.table_name select * from another_table where column_with_date > '2023-09-07';


Особенности
Для вставки данных в партиционироанную таблицу указывается корневая таблица (созданная командой CREATE TABLE), либо отдельная партиция для вставки. Если данные для указанной дочерней таблицы не соответствуют условию партиционирования, возвращается ошибка.

Для вставки больших объемов данных следует использовать внешние таблицы (external table) или команду COPY. Эти механизмы загрузки более эффективны для вставки большого количества строк.

Не рекомендуется использовать оператор INSERT INTO для вставки одной строки в append-optimized таблицу (AOT). Greenplum Database поддерживает не более 127 одновременных транзакций INSERT в одну AOT.

#greenplum
1
EXCEPT в SQL: ищем уникальные значения

Оператор разности EXCEPT служит для сравнения двух наборов данных. Он извлекает уникальные значения из первого, отсутствующие во втором наборе.

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

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

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

Синтаксис:
select column_1 
from table_name_1
[where condition]

except

select column_1
from table_name_2
[where condition]
order by column_1


Если результирующий набор данных нужно отсортировать, то после второго набора данных указывается order by.

Также EXCEPT можно заменить на JOIN (и чаще всего это может дать прирост производительности):

select t1.column_1 
from table_name_1 t1
left join table_name_2 t2
on t1.column_1 = t2.column_1
where t2.column_1 is NULL
order by t1.column_1


Однако использование EXCEPT делает запрос более читабельным. Что касается эффективности — её лучше тестировать (и по возможности смотреть планы запросов) на реальных данных с учётом индексов и прочих особенностей в конкретных СУБД.

Но не только EXCEPT и LEFT JOIN помогают выявлять уникальные значения в данных. В одном из следующих постов вспомним с вами о таких методах вычитания как NOT IN и NOT EXISTS.

#sql
1
Качества документации: непротиворечивость

Продолжим говорить о качествах документации. До этого мы рассмотрели краткость и полноту, сегодня поговорим о непротиворечивости.

ТЗ и Соглашения не должны противоречить ни другим требованиям внутри проекта, ни самим себе. Если в начале документа мы говорим "сделай так", а в конце "сделай эдак", или в одном документе указываем что поле содержит данные Х (например, дату возврата товара), а в другом это же поле содержит данные У (н-р, дату возврата денег клиенту) — ничего хорошего от данных мы в итоге не получим.

Ещё один простой пример: в ТЗ указано время обновления витрины раз в сутки, в jira требование — "обновление раз в 15 минут", какой результат ожидать от инженера? Будет круто, если он придёт за уточнением, но это бывает не всегда. Плюс время потраченное на разбирательства явно можно использовать более эффективно.

Второй пример, в компании "Рога и копыта" было решено все даты в хранилище хранить в UTC, это было зафиксировано в соглашении "Обработка часовых поясов". По прошествии лет, после некоторой ротации сотрудников об этом регламенте было забыто. И новый аналитик реализует загрузку данных в хранилище в местном времени, затем на основе старых и новых данных строятся аналитические отчёты. О каком качестве полученной информации мы можем говорить?

Конечно, проект — живой организм и в реальности часто получается так, что соглашения изменились, но исправились только в одном месте (или вообще нет), затем пришёл новый сотрудник, который не смог разобраться где правда, и решил мести новой метлой. Но в будущем такой подход приведёт к потере доверия к данным, что в свою очередь сделает хранилище малопригодным для принятия важных бизнес-решений.

Что делать? Ревью, ревью и ещё раз ревью. Как самостоятельные, так и проводимые другими аналитиками.

Второй момент — поддержание документации (как минимум основных соглашений) в актуальном и консистентном состоянии. Да, это требует усилий, времени и внимания, но они окупятся в будущем.

Важно подчеркнуть, что даже наличие качественной документации не гарантирует отсутствия тех или иных ошибок. Если документация слишком объемная, сложная для понимания или спрятана в недрах проекта так, что о ней никто не знает, то толку от неё будет мало 🥂

#документация
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Что такое метаданные и зачем они нужны?

Это — тень данных (Б.Инмон). Они описывают и добавляют контекст остальным данным в хранилище, превращая хаос в порядок.

Ничего не понятно? Образно говоря, метаданные можно представить в виде библиотечного каталога, в котором содержится вся информация о книгах (то есть о данных), их характеристиках, структуре и расположении.

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

Метаданные привносят ясность, которая крайне важна для всех, кто работает с данными — от инженеров и аналитиков до бизнес-пользователей. Они также позволяют отследить источник данных, понять все произведённые над ними предобразования и их путь по хранилищу. Тем самым помогая устранять любые аномалии в процессе.

Как управлять метаданными?
Для начала нужно обеспечить их хранение и автоматизировать сбор. Идеальный вариант — централизованный репозиторий для хранения всех метаданных, который станет единым "источником истины".

Внедрение контроля версий позволит отследить развитие и эволюцию метаданных. А также при необходимости легко выполнить откат до нужной версии.

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

Метаданные добавляют глубину и объем пониманию имеющейся информации. Внедрение процессов по работе с ними является важным этапом проектирования и построения эффективного хранилища.

#dwh
2
Краткий обзор архитектуры Snowflake для начинающих

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

Архитектура Snowflake представляет собой гибрид традиционных баз данных с shared-nothing архитектурой.

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

2. Слой вычислений (виртуальные warehouse) — место, где запросы обрабатываются и преобразуются в результаты. Обеспечивает эффективное извлечение данных и вычисления. В Snowflake есть возможность использовать только то количество вычислительных ресурсов, которое необходимо для текущей рабочей нагрузки.

3. Слой облачных сервисов — управляет важными службами, такими как оптимизация запросов, безопасность и метаданные, обеспечивая согласованную и безопасную среду данных. Этот уровень предназначен для быстрого, безопасного и надежного взаимодействия с пользователем.

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

Преимущества архитектуры:
— производительность
— улучшенная масштабируемость
— оптимизация затрат

Архитектура Snowflake создана для эффективной и удобной обработки данных. Это делает Snowflake многофункциональным решением для сложных запросов в области аналитики данных.

#snowflake
2
10 важнейших навыков будущего

Информация не новая, но тема, на мой взгляд, остается важной. На Всемирном экономическом форме, в докладе "Будущее рабочих мест", значительное внимание уделяется перспективным навыкам, необходимым успешным сотрудникам будущего.

Итак, какие же навыки нам с вами предстоит развивать:
1. Творческое мышление
2. Аналитическое мышление
3. Технологическая грамотность
4. Любознательность и непрерывное обучение
5. Устойчивость, гибкость и адаптивность
6. Системное мышление
7. ИИ и BigData
8. Мотивация и самосознание
9. Управление талантами
10. Сервисная ориентация и обслуживание клиентов

Какие из них актуальны для системного аналитика? На мой взгляд, все.

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

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

— Эмпатия и активное слушание полезны не только в работе с бизнес-заказчиками, но и с "товарищами по цеху". Построение хранилища — это, прежде всего, командная работа.

— Важность аналитического и системного мышления, а также внимания к деталям для системного аналитика, думаю, не требует дополнительных объяснений :)

— И, наконец, развитие в профессии невозможно без внутренней мотивации и самосознания.

Есть ли у вас свой "топ-3" софт-скиллов, которые вы считаете ключевыми для успешной карьеры?

#soft_skills
1
Вакуум в Greenplum: путь к производительности

Эффективное хранилище данных — это не только оптимально подобранное оборудование (или облачные сервисы) и ПО. Для поддержания целостности данных, оптимизации производительности и обеспечения эффективного использования ресурсов также важно регулярно проводить различные мероприятия по поддержанию "здоровья" DWH.

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

vacuum sandbox.table_name;


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

Рекомендации по использованию VACUUM от VMvare:
— запускать VACUUM после крупных операций UPDATE и DELETE.
— избегать использования VACUUM FULL: вместо этого предпочтительнее использовать операцию CREATE TABLE...AS, а затем переименовать и удалить оригинальную таблицу.
— чаще выполнять VACUUM для системных каталогов, чтобы избежать их разрастания и необходимости запуска VACUUM FULL.
— никогда не прерывать выполнение VACUUM FULL для системного каталога и не используйте команду kill для этого процесса.

Для поддержания производительности чтения метаданных необходимо периодически запускать VACUUM FULL для таблиц системного каталога. Однако, стоит учитывать несколько важных моментов:
— Чистка системного каталога эквивалентна остановке сегмента кластера.
— Нельзя прерывать уже запущенный VACUUM FULL системного каталога, чтобы избежать поломки сервиса Greenplum на сегменте.
— Существует жёсткий лимит на объём "мёртвых" строк для VACUUM – не более 1 ГБ указателей строк на процесс.

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

Хотите почитать про вакуум ещё? На хабре есть неплохая статья на этот счёт: Особенности VACUUM в MPP-форках PostgreSQL.

#greenplum
1
Магия SQL Joins: как собрать нужные данные при соединений таблиц

JOIN — фундаментальная функция в SQL, которая позволяет объединять информацию из разных таблиц. С её помощью можно объединять строки из двух или более таблиц на основе связанного между ними столбца. Основными ключевыми словами для JOIN являются INNER JOIN, LEFT JOIN (или LEFT OUTER JOIN), RIGHT JOIN (или RIGHT OUTER JOIN) и FULL JOIN (или FULL OUTER JOIN).

Понимание принципов работы с JOIN поможет эффективно объединять данные и избежать множества ошибок.

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

INNER JOIN
Представим, что у нас есть база данных университета. С помощью INNER JOIN можно легко объединить студентов и занятия, на которые они записаны.
SELECT
students.student_id,
students.student_name,
students.grade,
courses.course_name
FROM students
INNER JOIN
courses ON students.student_id = courses.student_id;


LEFT JOIN
Теперь перейдём к электронной коммерции. Воспользуемся LEFT JOIN (INCLUSIVE), чтобы получить список всех клиентов, включая тех, кто еще не совершил покупку.
SELECT
customers.customer_id,
orders.order_id
FROM customers
LEFT JOIN
orders ON customers.customer_id = orders.customer_id;


Если же нам нужно найти только тех покупателей, которые не совершали заказ, то вносим небольшие правки в EXCLUSIVE-запрос:
SELECT 
customers.customer_id,
orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.customer_id IS NULL;


RIGHT JOIN
Теперь представим, что перед нами база библиотеки. Воспользуемся RIGHT JOIN (INCLUSIVE), чтобы получить список всех книг, даже тех, которые не выданы ни одному читателю.
SELECT
books.book_id,
borrowers.borrower_name,
books.title,
books.author,
books.genre
FROM
books
RIGHT JOIN
borrowers ON books.borrower_id = borrowers.borrower_id;


Если же нужно найти только книги, которые выданы читателям, добавляем EXCLUSIVE условие:
SELECT
books.book_id,
borrowers.borrower_name,
books.title,
books.author,
books.genre
FROM
books
RIGHT JOIN
borrowers ON books.borrower_id = borrowers.borrower_id
WHERE books.borrower_id IS NULL;


FULL JOIN
Перейдём к управлению проектами. С помощью FULL JOIN (INCLUSIVE) выведем всех сотрудников и все проекты, независимо есть ли между ними связь.
SELECT
e.employee_id,
e.employee_name,
pr.project_id,
pr.project_name
FROM
employees e
FULL JOIN
projects pr ON e.employee_id = pr.employee_id;


Если же нам нужно вывести всех сотрудников без проектов и все проекты, без связанных сотрудников, модифицируем запрос до EXCLUSIVE:
SELECT
e.employee_id,
e.employee_name,
pr.project_id,
pr.project_name
FROM
employees e
FULL JOIN
projects pr ON e.employee_id = pr.employee_id
WHERE
pr.employee_id IS NULL OR pr.project_id IS NULL;


Хочу отметить, что прежде чем приступать к использованию JOIN, необходимо хорошо понимать модель базы данных и саму цель запроса. Примеры выше подчеркивают универсальность SQL JOIN.От правильного выбора зависит вся работа нашего запроса и запутаться очень легко. В первое время в качестве помощи можно использовать шпаргалку, до тех пор пока знания не дойдут до автоматизма.

#sql #join
1
Разгадка тайн соединения NULL-значений в SQL

Продолжим серию статей про особенности работы с #null 🙂 да, они ещё не закончились.

Одна из часто встречающихся проблем — непонимание как происходит JOIN таблиц с NULL-значениями. Давайте посмотрим на примерах.

Допустим у нас есть две таблицы:

user_names
us_id  name
1 Илья
2 Ольга
3 Null
Null Null

user_roles
us_id  role
1 admin
2 user
3 user
Null guest
Null Null


INNER JOIN

Строки, для которых нет совпадения в обеих таблицах, исключаются из результирующего набора. В том числе, если в столбце, по которому происходит соединение, встречаются значения с NULL, эти строки будут исключены из результата, так как два NULL нельзя сравнить между собой.
SELECT u.us_id, r.us_id, name, role
FROM user_names u
INNER JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user


LEFT JOIN
Возвращает все записи из левой таблицы (users_name) и соответствующие записи из правой таблицы (users_role).
SELECT u.us_id, r.us_id, name, role
FROM user_names u
LEFT JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user
Null Null Null Null

Здесь стоит отметить, что появившиеся Null в полях r.ud_id — не являются Null-значениями из таблицы users_role.

FULL JOIN
Возвращает все записи, включая совпадения в левой или правой таблице. Строки в любой из таблиц будут содержать NULL значения в столбцах из другой таблицы, в случае отсутствия совпадения по ключу.
SELECT u.us_id, r.us_id, name, role
FROM user_names u
FULL JOIN user_roles r ON u.us_id = r.us_id;


Результат:
u.us_id   r.ud_id  name   role
1 1 Илья admin
2 2 Ольга user
3 3 Null user
Null Null Null Null
Null Null Null guest
Null Null Null Null

Обратим внимание, что строки с NULL NULL повторяются дважды, так как они не равны друг другу и их нельзя объединить.

#sql #null
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Не потеряйте себя, попав в вихрь IT-технологий

Практически всем нам в детстве внушали деструктивные и тревожные идеи "Без труда не вытащишь и рыбку из пруда", "Терпение и труд все перетрут", "Кто не работает, тот не ест" и другие. А современные реалии приправили это всё повальным трендом на "успешный успех". И вот мы попадаем в бесконечную гонку к новым вершинам, где страшно остановиться, ибо "сразу выпадешь на обочину". Особенно это актуально для молодых и амбициозных специалистов (под молодыми я имею ввиду отнюдь не возраст, а давность входа в специальность). Кажется что, если ты остановишься на минуту — мир рухнет.

Однако, реальность немного другая. Да, в мире IT важно держать руку на пульсе и быть в курсе последних технологий, и это отлично. Но не стоит забывать и о ментальном здоровье, о режиме работы и отдыха, то есть о набившем оскомину work-life balance. Баланс — ключ к сохранению физического и эмоционального здоровья без которых просто не имеет смысла всё остальное.

Опасность в том, что в стремлении удержаться на волне новых технологий мы упускаем из виду заботу о себе. И рано или поздно это может привести к хронической усталости, стрессу, а может и к серьезным заболеваниям.

Как себе помочь?
— Всегда выделяйте время "на себя" и то, что вас наполняет. Хобби, спорт, время с друзьями — не забывайте об этом, даже когда кажется, что вы ничего не успеваете на работе и дома. На вас не держится мир. Отдыхая, вы инвестируете в свою будущую продуктивность.
— Используйте различные техники тайм-менеджмента (pomodoro, таймблокинг и другие), и обязательно отдыхайте в перерывах, а не просто переключайтесь с задачи на задачу.
— Не превращайте свое свободное время в непрерывное обучение на проф.темы. Мир прекрасен и огромен, и ваш широкий кругозор тоже принесёт пользу.
— Изучайте новое из интереса, а не из обязанности. Даже в тех случаях, когда нужно изучить что-то скучное, выбирайте наиболее удобный способ обучения и не забывайте о перерывах.
— Не ругайте себя за периоды низкой проф. активности и время, проведенное "без явной пользы".
— Движение — жизнь. Как бы это ни звучало банально, много движения — прогулки, спорт, танцы или просто разминка — помогут вашему телу и мозгу.
— Уделяйте внимание здоровью и не игнорируйте "звоночки". Всегда проще и дешевле вылечить болезнь на ранней стадии. И нет, тело не подождёт.
— Сон — верный союзник. Ещё одна банальность, но как часто в погоне за продуктивностью, мы в первую очередь урезаем именно его. При этом сон — фундамент здоровья и хорошего самочувствия.
— Учитесь говорит "нет". Не бойтесь отказываться от лишних обязательств, чтобы избежать перегрузки.

Конечно же, не стоит впадать в крайности и полностью забивать на свои обязанности. Но если становится совсем невмоготу — будьте честны с собой и работодателем. Берите отпуск. Меняйте работу. Слушайте себя. Для "крайних" случаев можно послушать лекцию Ильи Якямсева "Эффективность не работает".

Берегите себя. С наступающим 2024 годом! 🎄

А блог тем временем уходит на зимние каникулы ☃️

#soft_skills
Please open Telegram to view this post
VIEW IN TELEGRAM
👍211🔥1
MPP — ключ к эффективной обработке больших данных

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

MPP (Massive Parallel Processing) — это архитектурный подход к обработке данных, широко применяемый в хранилищах данных. Его суть заключается в распределении и параллельной обработке данных на нескольких серверах (узлах) одновременно, что обеспечивает высокую производительность и масштабируемость. В результате общее время выполнения операций сокращается в 10-100 раз по сравнению с традиционными СУБД.

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

Ключевые преимущества MPP:
— Высокая производительность: распределенная обработка данных на узлах кластера обеспечивает быстрое выполнение запросов.
— Масштабируемость: простота добавления новых узлов для обработки дополнительных объемов данных.
— Эффективное использование ресурсов: параллельная обработка данных на нескольких серверах повышает общую эффективность.

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

#dwh
1👍1
Путешествия во времени вместе со Snowflake

Одна из крутых функций Snowflake — это Time Travel, позволяющая "путешествовать во времени" для восстановления данных, которые были изменены или удалены в прошлом. Теперь уничтожить данные безвозвратно будет не так просто 😅

Основные возможности Time Travel
Запрос данных из прошлого.
Можно выполнять запросы к данным, которые были обновлены или удалены. Это уникальная возможность анализа и восстановления информации на разных исторических этапах БД.

Пример запроса, вытягивающего исторические данные по состоянию на 10 минут назад:
SELECT * 
FROM table_name AT(OFFSET => -60*10);


Создание клонов таблиц, схем и БД. Time Travel позволяет создавать клонированные копии на определенный момент в прошлом. Это полезно для анализа и восстановления состояния данных за конкретный временной отрезок.

Пример создания клона таблицы с указанной меткой времени:
CREATE TABLE restored_table CLONE table_name
AT(TIMESTAMP => 'Fri, 29 Dec 2023 00:00:00 +0500'::timestamp_tz);


Восстановление удаленных объектов. Теперь можно восстанавливать случайно удаленные таблицы, схемы и базы данных.

Пример просмотра удалённых таблиц:
SHOW TABLES HISTORY LIKE 'old%' IN db_name.schema_name;


Восстановление удалённой таблицы:
UNDROP TABLE table_name;

! Если объект с таким же именем уже есть в базе, то восстановление невозможно, необходимо переименовать новый объект до восстановления.

Как это работает?
Snowflake сохраняет состояние данных перед выполнением операций над ними.

Сколько хранятся данные?
Всё зависит от версии подписки на Snowflake. Для Standard срок хранения составляет всего 1 день. А для Enterprise-версии — от 1 до 90 дней для стандартных таблиц. Snowflake позволяет настроить срок хранения на уровне объекта.

Time Travel — это инструмент для обеспечения целостности и восстановления данных, который предоставляет уникальные возможности работы с исторической информацией.

Дополнительную информацию о функции Time Travel можно прочитать в доке.

#snowflake
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Ключи в базах данных: коротко о важном

При работе с БД важно понимать разницу между ключами.

Primary Key (PK) – уникальный идентификатор для каждой записи в таблице, гарантирует целостность данных. Эффективное использование этого ключа требует тщательного выбора типа данных. Использование слишком длинных строк (VARCHAR(MAX) и подобных) или сложных типов может существенно повлиять на производительность запросов при соединении по ключу.
Если нужен уникальный идентификатор, который может быть сгенерирован в любом месте без возможности конфликта, можно рассмотреть использование UUID или hash от строки (выбор конкретного метода зависит от целей и типа БД). Также PK поддерживает auto increment.

Foreign Key (FK) создает связь между двумя таблицами, ссылаясь на PK в другой таблице. FK обеспечивает целостность связей между таблицами и логически структурирует данные. Именование полей — это важный аспект проектирования БД, который способствует легкости в понимании структуры данных. Хороший тон в наименовании FK — использование стандартных сокращений и отражение связи с PK.

Unique Key (UK) – ограничение базы данных, которое гарантирует уникальность значений в столбце или группе столбцов. Это позволяет исключить дубликаты и обеспечить целостность данных. UK может содержать одно NULL значение.
При создании индексов, PK — это кластерный индекс, а UK — некластеризованный.

Резюме:
— PK: уникальный идентификатор для записей, обеспечивает единственность.
— UK: обеспечивает уникальность значений без строгой идентификации.
— FK: создает отношения между таблицами.
— В таблице может быть только 1 PK и несколько UK.
— Именование любых ключей должно быть осмысленным.

#databasedesign
1