BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по DWH » Slowly Changing Dimensions (SCD) в хранилищах данных » Реализация SCD Type 1 подходы и примеры

Реализация SCD Type 1 подходы и примеры

SCD (Slowly Changing Dimensions) — это концепция управления изменяющимися данными в измерениях хранилища данных. В реальном бизнесе информация об объектах (клиентах, поставщиках, продуктах и т. п.) меняется: у клиента может поменяться адрес, телефон, название компании, статус и т. д. Чтобы аналитика оставалась корректной и понятной, необходимо выбирать подход к хранению этих изменений. SCD Type 1 — один из самых простых и широко применяемых вариантов: когда запись обновляется полностью и прошлое не сохраняется. В этом разделе мы подробно разберём, как реализуется SCD Type 1, какие методы, инструменты и практики применяются на практике, какие риски и ограничения существуют, а также приведём реальные примеры (open-source и российские решения) и блок вопросов–ответов для закрепления материала.

 

Определения и базовые понятия

  • Бизнес-ключ (business key, натуральный ключ) — уникальный идентификатор бизнеса, по которому объект распознаётся в источниках (например, customer_id). Он обычно имеет значение в источнике и может повторяться через время, но в хранилище он должен быть уникальным.
  • Суррогатный ключ (surrogate key) — искусственный ключ, созданный в базе данных (например, surrogate_id), который не имеет бизнес-значения и служит уникальным идентификатором записи в витрине. Для SCD Type 1 суррогатный ключ часто не требуется, если бизнес-ключ сам становится уникальным идентификатором строки.
  • Измерение (dimension) — таблица в хранилище данных, описывающая сущности бизнеса (клиенты, продукты, география и т. п.).
  • SCD Type 1 — подход, при котором при изменении атрибутов измерения соответствующая запись перезаписывается новыми значениями. История изменений не сохраняется: в таблице остаётся только текущий “актуальный” набор атрибутов для каждого бизнес-ключа.
  • Upsert (update + insert) — операция обновления существующей записи или вставки новой записи, если такой записи ещё нет. Ключевая операция в реализации Type 1 во многих СУБД.
  • Источник данных vs целевая витрина — источники предоставляют исходные данные; целевая витрина хранит обработанные, согласованные данные для аналитики.

 

Почему Type 1 выбирают часто

  • Простота реализации: нет необходимости держать историю, меньше сложностей с версионированием.
  • Скорость обновления: при больших объёмах обновлений иногда требуется менее ресурсозатратная логика (поскольку не нужно сохранять промежуточные версии).
  • Недостаточная потребность в истории: если бизнес-требование не требует сохранения прошлого состояния объекта, Type 1 может быть достаточным.

 

Методологии реализации

  • Вариант 1: прямая операция upsert в целевой dimension через MERGE (или аналог в конкретной СУБД) с использованием staging-таблицы.
  • Вариант 2: полный перезапись измерения (overwrite) — когда изменение небольшое или размерdimension небольшой, и упрощение контроля версии не требует сложной логики.
  • Вариант 3: хеширование изменений (change detection) — вычисление хеша по набору атрибутов; если хеш другой для конкретной бизнес-ключа, выполняется обновление.
  • Вариант 4: контроль качества и дедупликация на стадии загрузки — чтобы не перенести дубликаты и не испортить целостность бизнес-ключей.

 

Стратегия проектирования

  • Ранняя идентификация бизнес-ключа: определить, какой набор атрибутов формирует уникальность записи в dimension и как будет происходить сопоставление ключей между источником и витриной.
  • Размещение staging-слоя: рекомендуется иметь staging-таблицу, куда приходят сырые данные за период или пакет, затем выполняется сопоставление и обновление в целевой dimension.
  • Целевые ограничения: уникальный индекс на бизнес-ключ, наличие временных полей (например, last_updated) для аудита обновлений, если выбрали частичное обновление через диспетчер изменений.
  • Транзакционная целостность: обновление выполняется в рамках одной транзакции, чтобы либо все обновления применились, либо ничего не поменялось в случае ошибки.
  • Обеспечение идемпотентности: повторный запуск ETL-процесса не должен приводить к дубликатам или неконсистентному состоянию.

 

Практические примеры

1) Простой пример на PostgreSQL (upsert через INSERT ... ON CONFLICT)

Предположим, у нас есть dimension customer с полями: customer_key (бизнес-ключ), name, address, city, state, zip, email, phone, last_updated.

DDL:

CREATE TABLE dim_customer (
  customer_key TEXT PRIMARY KEY,
  name TEXT,
  address TEXT,
  city TEXT,
  state TEXT,
  zip TEXT,
  email TEXT,
  phone TEXT,
  last_updated TIMESTAMP WITHOUT TIME ZONE
);

 

-staging-таблица аналогична по структуре, но без ограничений.

 

Пример upsert из staging в dim:

INSERT INTO dim_customer (customer_key, name, address, city, state, zip, email, phone, last_updated)
SELECT s.customer_key, s.name, s.address, s.city, s.state, s.zip, s.email, s.phone, NOW()
FROM staging_customer s
ON CONFLICT (customer_key) DO UPDATE SET
  name = EXCLUDED.name,
  address = EXCLUDED.address,
  city = EXCLUDED.city,
  state = EXCLUDED.state,
  zip = EXCLUDED.zip,
  email = EXCLUDED.email,
  phone = EXCLUDED.phone,
  last_updated = EXCLUDED.last_updated;

 

Пояснения:

  • PRIMARY KEY на customer_key обеспечивает уникальность бизнес-ключа.
  • В случае совпадения бизнес-ключа выполняется UPDATE текущих полей и устанавливается новый last_updated.
  • Этот подход подходит для Type 1: атрибуты обновляются в одной строке, история не сохраняется.

 

2) Пример на Snowflake (MERGE)

Создание dim и staging аналогично, затем используем оператор MERGE.

MERGE INTO dim_customer AS d
USING staging_customer AS s
ON d.customer_key = s.customer_key
WHEN MATCHED THEN UPDATE SET
  d.name = s.name,
  d.address = s.address,
  d.city = s.city,
  d.state = s.state,
  d.zip = s.zip,
  d.email = s.email,
  d.phone = s.phone,
  d.last_updated = CURRENT_TIMESTAMP()
WHEN NOT MATCHED THEN
INSERT (customer_key, name, address, city, state, zip, email, phone, last_updated)
VALUES (s.customer_key, s.name, s.address, s.city, s.state, s.zip, s.email, s.phone, CURRENT_TIMESTAMP());

 

3) Пример на PostgreSQL с хешированием изменений

Добавим столбец row_hash в dim_customer и в staging. Хешируем все атрибуты кроме ключа:

ALTER TABLE dim_customer ADD COLUMN row_hash TEXT;

 

-Предположим, staging тоже имеет column row_hash, рассчитанный как md5(name || '|' || address || '|' || city || ...)

MERGE или UPSERT по ключу с проверкой хеша:
MERGE INTO dim_customer AS d
USING staging_customer AS s
ON d.customer_key = s.customer_key
WHEN MATCHED AND d.row_hash <> s.row_hash THEN UPDATE SET
  name = s.name,
  address = s.address,
  city = s.city,
  state = s.state,
  zip = s.zip,
  email = s.email,
  phone = s.phone,
  row_hash = s.row_hash,
  last_updated = CURRENT_TIMESTAMP()
WHEN NOT MATCHED THEN
INSERT (customer_key, name, address, city, state, zip, email, phone, row_hash, last_updated)
VALUES (s.customer_key, s.name, s.address, s.city, s.state, s.zip, s.email, s.phone, s.row_hash, CURRENT_TIMESTAMP());

 

4) Пример архитектуры с staging-планом

  • Источник -> staging_customer (сырые данные, валидация, типизация, простая очистка)
  • staging -> dim_customer через MERGE/UPSERT
  • Период обновления: пакетная загрузка, например, каждые 15-60 минут
  • Наблюдаемость: журнал транзакций ETL, контрольная сумма обновлений, проверки на предмет дубликатов по бизнес-ключу

 

Хранение и структура

  • Бизнес-ключ остается уникальным по целевой витрине.
  • Для Type 1 обычно не создаются дополнительные версии строк; но можно хранить last_updated для аудита.
  • В зависимости от СУБД можно выбрать MERGE (Snowflake, SQL Server, Oracle с мигрированием) или INSERT ... ON CONFLICT (PostgreSQL) как основную операцию upsert.
  • Рекомендовано иметь staging-таблицу и отдельную целевую таблицу dimension, чтобы отделить прием данных от их обновления в витрине.

 

Индексация и производительность

  • Установить уникальный индекс/constraints на бизнес-ключ в целевой витрине для стабильности обновлений.
  • В больших витринах рассмотреть партиционирование dimension по ключу или по диапазону дат обновления.
  • В PostgreSQL полезны индексы на business_key и, при использовании хеша, на row_hash (если применимо).
  • Для Snowflake и других облачных DW MERGE является эффективной операцией; рекомендуется избегать слишком частых мелких обновлений и группировать их в батчи.
  • Пакетный размер загрузки и частота обновления зависят от требований к latency. В среднем — обновления каждыми 5-60 минут.

 

Согласованность и транзакции

  • Обновления должны быть атомарны: в случае ошибки транзакция откатывается, целевая витрина остаётся в консистентном состоянии.
  • В сценариях с параллельной загрузкой следует синхронизировать доступ к staging и целевой витрине, использовать эксклюзивные блокировки/механизмы управления конкуренцией в выбранной СУБД.

 

Контроль качества и аудит

  • Логирование обновлений: хранение записи об обновлениях (кто, когда, какие поля обновлены) либо через last_updated, либо через журнал миграций.
  • Введение тестов: сравнение источника и витрины после загрузки; контроль на предмет пропущенных изменений.
  • Обеспечение идемпотентности: повторная загрузка не должна приводить к неконсистентным данным — достигается через использование чистых транзакций и детерминированных условий обновления.

 

Риски и ограничения

  • Потеря истории: основное ограничение Type 1 — история изменений не хранится. Это может быть критично для регуляторных требований или для анализа динамики изменений во времени.
  • Риск некорректной загрузки: если бизнес-ключ неверно сопоставлять между источником и витриной, можно получить дезориентацию в аналитике.
  • Проблемы качества данных: дубликаты, неконсистентные значения, пропуски в источниках — всё это может привести к некорректной замене значений в витрине.
  • Конкурентный доступ и блокировки: при больших объёмах обновлений возможны блокировки таблиц и задержки выполнения ETL.
  • Масштабируемость: при огромной размерности dimension и частых обновлениях upsert может стать ресурсоёмким; требуется продуманная архитектура (параллелизация, дистрибутивность).
  • Обновления не символизируют изменения: иногда в источнике есть одни и те же данные, но по времени — не факт, что это изменение; важно оптимизировать логику обновления, чтобы избежать лишних записей.
  • Совместимость с downstream: если downstream аналитика или витрины ожидали history, переход на Type 1 может потребовать переработки моделей и SQL-запросов.
  • Регуляторные и аудит регионы: для некоторых организаций хранение истории или контроль изменений может быть обязательным; Type 1 должен быть документирован и согласован с бизнес-правилами и политиками безопасности.

 

Realизация SCD Type 1 — это мощный и относительно простой подход к управлению изменяющимися измерениями в хранилищах данных. Основная идея — держать в витрине только актуальные значения для каждого бизнес-ключа, заменяя устаревшие значения новыми. Реализация чаще всего опирается на upsert-операции через MERGE или INSERT ... ON CONFLICT, staging-план и целевую таблицу. Важно понимать trade-off между простотой и отсутствием истории, а также подбирать методику под требования бизнеса, объём данных и используемые технологии. При грамотной реализации это обеспечивает предсказуемость аналитической модели, упрощает поддержку и ускоряет аналитическую работу за счёт оперативной актуализации атрибутов объектов.

 

Вопрос–Ответ (FAQ)

1) Что такое SCD Type 1 и чем он отличается от Type 2?

SCD Type 1 — это подход, при котором в измерении хранится только текущее значение атрибутов для каждого бизнес-ключа; прошлые значения не сохраняются. Type 2 — хранит историю: создаются новые записи с изменившимися атрибутами, сохраняя предыдущую версию и добавляя временные метки (start_date, end_date) или surrogate key версии. Основное различие: в Type 1 история изменений теряется, в Type 2 — сохраняется.

 

2) Когда целесообразно выбирать Type 1?

Когда бизнес-требование не требует сохранения изменений по времени, когда аналитика оперирует текущим состоянием объектов и когда простота поддержки важнее сохранения истории. Также Type 1 может быть полезен на этапах быстрого старта проекта или для незначительных объёмов обновлений.

 

3) Какие основные шаблоны реализации Type 1 в базах данных?

  • Upsert через MERGE (Snowflake, SQL Server, Oracle) или через INSERT ... ON CONFLICT (PostgreSQL).
  • Использование staging-таблицы, а затем целевой dimension через одну транзакцию.
  • Опционально внедрение хеша изменений (change detection) для минимизации обновлений.
  • Опциональное добавление last_updated для аудита.

 

4) Какие примеры кода можно использовать на практике?

  • PostgreSQL: INSERT INTO dim_customer ... VALUES (...) ON CONFLICT (customer_key) DO UPDATE SET ...;
  • Snowflake: MERGE INTO dim_customer USING staging_customer ON ... WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT ...;
  • SQL Server: MERGE dim_customer AS d USING staging_customer AS s ON d.customer_key = s.customer_key WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT ...;

 

5) Какие технические аспекты важны для производительности?

  • Использование staging-площадки для минимизации прямых изменений в витрине.
  • Индексация/уникальные ограничения на бизнес-ключ.
  • Битовые/пакетные обновления — группировка изменений в батчи.
  • Партиционирование dimensión по ключу или по временным признакам для крупных витрин.
  • Мониторинг и логирование изменений (traceability) để аудит.

 

6) Какие риски связаны с SCD Type 1?

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

 

7) Какие практики контроля качества стоит внедрить?

  • Встроенное тестирование после загрузки: сравнение источника и витрины по ключам и атрибутам.
  • Валидация дубликатов по бизнес-ключу до загрузки.
  • Ведение аудита обновлений (last_updated, кто выполнил загрузку).
  • Нагрузочное тестирование обновлений на реальном объёме данных.

 

8) Как выбрать между MERGE и INSERT ... ON CONFLICT?

Оба подхода эффективны, но MERGE обычно более гибок и поддерживает более сложные условия обновления. INSERT ... ON CONFLICT часто проще в реализации в PostgreSQL и может быть очень быстрым при простых сценариях. Выбор зависит от конкретной СУБД, объёмов данных и требований к логике обновления.

 

9) Как обеспечить идемпотентность загрузки?

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

 

10) Какие инструменты и решения применяются на практике?

  • Open-source: PostgreSQL, Apache Airflow (оркестрация), dbt (модели трансформации, включая incremental models), Apache NiFi (интеграционные пайплайны), Apache Spark для больших объёмов.
  • Российские или локализованные решения обычно включают адаптацию популярных инструментов под русский рынок: поддержка на русском языке, локализация бытовых процессов, сертификация по требованиям к безопасности. В реальности многие российские teams используют широкий набор инструментов: SQL-ориентированные платформы (MS SQL Server, PostgreSQL), облачные сервисы отрасли, а также коннекторы и ETL-инструменты от местных системных интеграторов. Важно согласовать выбор с политикой компании и требованиями к хранению данных, безопасности и нормативам.

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
Алгоритмы применения изменений в ETL/ELT
Следующая статья →
Реализация SCD Type 2 схема версионирование обработка конфликтов
Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • Розничный и интернет-магазин 12 Storeez один из лидеров на рынке женской одежды. С географией рынка не только на территории России, своя продукция представлена еще и в таких странах как Казахстан и Дубай.

  • ПАО «Транснефть» – крупнейшая российская нефтепроводная компания. «Транснефть» обеспечивает транспортировку более 85% добываемых в России нефти и нефтепродуктов.

  • Группа компаний "Дёке" производит товары для внешней отделки загородных домов. Ассортимент включает виниловый сайдинг, фасадные панели, водосточные системы, чердачные лестницы и гибкую битумную черепицу. Продукция Дёке вызывает гордость у сотрудников и партнеров компании.

  • Ситилинк

    Электронный дискаунтер «Ситилинк» — один из крупнейших онлайн‑ритейлеров России (3‑е место по объему онлайн‑продаж в рейтинге Data Insight и Ruward 2016 года E‑commerce Index TOP‑100, 8 место в рейтинге Forbes «20 самых дорогих компаний Рунета — 2017»). На рынке работает 9 лет.

    В ассортименте дискаунтера более 50 000 наименований компьютерной цифровой, бытовой и садовой техники, офисной мебели и других товарных категорий. Более 700 мировых брендов в портфеле. Около 4 000 сотрудников по всей России

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.