Руководство по началу работы для инженеров по разработке данных/хранилищам данных (4) Спецификации и процессы построения слоев ODS
Руководство по началу работы для инженеров по разработке данных/хранилищам данных (4) Спецификации и процессы построения слоев ODS

Предисловие

Первые три статьи этой серии очень четко объяснили все логические процессы построения всего хранилища данных, а это означает, что мы построили структуру. Следующим шагом является заполнение содержимого каждого уровня компонента в структуре. Мы разделили хранилище данных на три уровня, а именно уровень введения данных ODS, общедоступный уровень данных CDM и уровень приложений данных ADS. Теперь нам нужно постепенно обогащать эти три уровня в соответствии с бизнесом. Во-первых, нам нужно построить уровень ODS снизу вверх. В этой главе мы узнаем о спецификациях построения уровня введения данных ODS и процессе построения соответствующего бизнеса спроса.

Уровень ввода данных (ODS)

Конкретные концепции и структура уровня ODS были очень четко объяснены в предыдущей статье. Уровень ODS (хранилище операционных данных) хранит наиболее оригинальные данные, полученные из бизнес-системы, и является исходными данными для других данных верхнего уровня. Данные в системах бизнес-данных обычно представляют собой очень подробные данные, которые накапливались в течение длительного периода времени и к которым часто обращаются. Это данные, ориентированные на приложения.

Спецификации проектирования слоев ODS

Соглашение об именовании таблиц

Правила именования таблиц: ODS_аббревиатура предприятия + порядковый номер системного склада_источник таблицы базы данных системы_частота обработки + метод извлечения

Примеры показывают

Описание таблицы экземпляров

ods_ads01_bill_df

ods — уровень модели, реклама — бизнес-формат, 01 — порядковый номер системного хранилища в бизнес-формате, bill — имя таблицы источника данных, d — частота обработки, а f — метод полного извлечения.

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

Описание поля размера частиц агрегата и частоты обработки

Полевой китайский

Поле

Поле полное имя

иллюстрировать

день

d

day

каждый день

неделя

w

week

еженедельно

луна

m

month

помесячно

Год

y

year

каждый год

Час

h

hour

в час

полчаса

hh

halfhour

каждые полчаса

Извлечение Поле зависит от того, является ли оно полной суммой, приращением или существует ограничение на раздел для извлечения:

Метод экстракции

Поле

Поле полное имя

Секционированная дельта-таблица

i

incremental

Полномасштабный раздел

f

full

неразделенный полномасштабный

a

all

стол на молнии

c

chain

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

Инкрементальное хранилище

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

  • 1луна1день,Пользователь А посетил интернет-магазин B компании A.,Журнал электронной коммерции компании А генерирует запись t1.,Пользователь А снова посетил интернет-магазин C компании A.,Журнал электронной коммерции компании А генерирует запись t2. В стиле Инкрементальная хранилище,t1 будет храниться в разделе 1луна1день.,t2 будет храниться в разделе 1луна2день.
  • 1луна1день,Пользователь А купил Bтовар на сайте электронной коммерции компании А.,В журнале транзакций будет создана запись t1.1луна2день.,Пользователь А снова вернул Бтовар,Журнал транзакций обновит запись t1. В стиле Инкрементальная хранилище,Запись t1 о первоначальной покупке будет храниться в разделе 1луна1день.,Обновленный t1 будет храниться в разделе 1луна2день.

Таблицы ODS с сильным транзакционным характером, такие как транзакции и журналы, подходят для Инкрементального хранилище Способ。Этот тип таблицы содержит большой объем данных.,использовать Полное Давление стоимости хранилища. Кроме того, последующие приложения таких таблиц меньше требуют полного доступа к историческим данным (такие потребности можно решить с помощью хранилища данных После последующего агрегирования получаем)。Например,В таблице ODS дневного журнала нет бизнес-процесса обновления данных.,Таким образом, все инкрементальные разделы UNION вместе представляют собой полный объем данных.

Полное хранилище

Полное в днях В хранилище с периодом рабочего дня в качестве раздела каждый раздел хранит полный объем бизнес-данных до периода рабочего дня. Например, 1луна1день, продавецA публикует два товара B и C на веб-сайте электронной коммерции компании A, а внешняя таблица товаров создает две записи t1 и t2, продавецA публикует Bтовар Убрано. с полок освобождается, и товарD освобождается одновременно. Внешняя таблица товаров обновит запись t1 и создаст новую запись t3. Принято Полное В режиме хранилища две записи t1 и t2 хранятся в разделе 1луна1день, а обновленные записи t1, t2 и t3 хранятся в разделе 1луна2день.

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

молния для хранения

молния для хранения, добавив две новые временные метки Поле (start_dt и end_dt),Записывайте все данные об изменениях с ежедневной детализацией.,Обычно раздел Поле также является этими двумя временными метками Поле.

молния для Примеры хранения следующие.

товар

start_dt

end_dt

продавец

состояние

B

20160101

20160102

A

На полках

C

20160101

30001231

A

На полках

B

20160102

30001231

A

Убрано с полок

так,Нижестоящие приложения могут получать исторические данные, ограничивая временную метку. Например,Доступ пользователей к данным 1луна1день,Просто ограничьтеstart_dt<=20160101и end_dt>20160101

Спецификации хранения данных и управления жизненным циклом

Тип таблицы данных

Способ хранения

Политика максимального хранения хранилища

Полномасштабный тип потока ОРВ

Разделение по дням

Если он невозобновляемый, он будет храниться постоянно. Данные журнала (объем данных очень большой, например, объем данных превышает 100 ГБ в день) сохраняются в течение 24 месяцев. Независимо установите, следует ли сохранять исторические данные на начало месяца. Независимо установите, следует ли сохранять данные особых дат.

Зеркальный тип ODS, полномасштабный

Разделение по дням

Важные бизнес-таблицы и таблицы, для которых необходимо сохранять историю, сохраняются соответствующим образом. Срок службы полной шкалы ODS по умолчанию составляет 2 дня.,поддержка черезds=max_pt(tablename)Способданные доступа。

Таблица дельты ODS

Разделение по дням

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

Временная таблица процесса ETL ODS

Разделение по дням

Сохраняйте разделы максимум за последние 7 дней.

Данные DBSync без дедупликации

Разделение по дням

Приложение сохраняет исторические данные через средний уровень. По умолчанию уровень ODS не сохраняет исторические данные.

Разработка таблицы слоев ввода данных

Затем мы используем данные электронной коммерции, с которыми мы более знакомы, для построения,Основными данными, включенными в уровень ODS, являются: сведения о заказе системы транзакций, сведения о пользователе, сведения о товаре и т. д. Эти данные не обрабатываются,это самые оригинальные данные. логически,Эти данные хранятся в виде двумерных таблиц. Хотя, строго говоря, уровень ODS не относится к категории моделирования хранилища данных.,Но разумное планирование уровня ODS и синхронизации данных также очень важно.

На данные уровня ODS не могут напрямую ссылаться задачи прикладного уровня. Если в слоях DWD и DWS нет выделенных данных слоя ODS, получите к ним доступ, создав представление в слое ODS. Соглашение об именах соответствует соглашению об именах DWD или DWS. Представление должно быть инкапсулировано с помощью планировщика, чтобы обеспечить удобство обслуживания и управляемость представления.

  • Записано дляаукционизтоваринформация:s_auction。
  • Записано длянормальныйпродаватьизтоваринформация:s_sale。
  • Зарегистрируйте данные пользователя: s_users_extra.
  • Запишите вновь добавленную информацию о заказе транзакции: s_biz_order_delta.
  • Запишите информацию о новом логистическом заказе: s_logys_order_delta.
  • Запишите вновь добавленную информацию о платежном поручении: s_pay_order_delta.

Таблица или ее название должны максимально соответствовать бизнес-системе.,Однако для различения приращений и полных шкал требуется дополнительная идентификация. Который использует maxcompute для отображения,Жизненный цикл таблицы MaxCompute (Жизненный цикл),Относится к времени последнего обновления данных таблицы (раздела).,Никаких изменений по истечении указанного времени,Затем эта таблица (раздел) будет автоматически переработана MaxCompute.,Это обозначенное время и есть период жизни. Срок службы неделя, период переработки - каждый день по расписанию.,Сканировать все разделы.

Пример создания таблицы

s_auction:

Язык кода:sql
копировать
CREATE TABLE IF NPT EXISTS s_auction
(
	id	STRING COMMENT 'товарID',title	STRING COMMENT 'товаримя',	gmt_modified                   STRING COMMENT 'товар Последний измененный день выпуска',
    price                          DOUBLE COMMENT 'Цена сделки, юань',starts                         STRING COMMENT 'товар На полкахвремя',    minimum_bid                    DOUBLE COMMENT «Начальная цена аукционного товара, юань»,
    duration                       STRING COMMENT «Срок действия, период продажи, единица дней»,
    incrementnum                   DOUBLE COMMENT 'увеличение аукционной цены',
    city                           STRING COMMENT 'город товара',
    prov                           STRING COMMENT 'товарпровинция',
    ends                           STRING COMMENT «Время окончания распродажи»,
    quantity                       BIGINT COMMENT 'количество',
    stuff_status                   BIGINT COMMENT состояние товара 0 совершенно новый 1 праздный 2 подержанный',
    auction_status                 BIGINT COMMENT 'товарсостояние 0 нормальный 1 Удаление пользователя 2 Убрано с полок 3 никогда полках',
    cate_id                        BIGINT COMMENT 'ID категории товара',
    cate_name                      STRING COMMENT 'название категории товара',
    commodity_id                   BIGINT COMMENT «Идентификатор категории»,
    commodity_name                 STRING COMMENT 'Имя категории',
    umid                           STRING COMMENT «Покупатель умид»
)
COMMENT 'товар Аукцион ODS'
PARTITIONED BY (ds         STRING COMMENT 'Формат: ГГГГММДД')
LIFECYCLE 400;

s_sale:

Язык кода:sql
копировать
CREATE TABLE IF NOT EXISTS s_sale
(
    id                             STRING COMMENT 'товарID',title                          STRING COMMENT 'товаримя',    gmt_modified                   STRING COMMENT 'товар Последний измененный день выпуска',starts                         STRING COMMENT 'товар На полкахвремя',    price                          DOUBLE COMMENT 'цена товара, ед. юань',
    city                           STRING COMMENT 'город товара',
    prov                           STRING COMMENT 'товарпровинция',
    quantity                       BIGINT COMMENT 'количество',
    stuff_status                   BIGINT COMMENT состояние товара 0 совершенно новый 1 праздный 2 подержанный',
    auction_status                 BIGINT COMMENT 'товарсостояние 0 нормальный 1 Удаление пользователя 2 Убрано с полок 3 никогда полках',
    cate_id                        BIGINT COMMENT 'ID категории товара',
    cate_name                      STRING COMMENT 'название категории товара',
    commodity_id                   BIGINT COMMENT «Идентификатор категории»,
    commodity_name                 STRING COMMENT 'Имя категории',
    umid                           STRING COMMENT «Покупатель умид»
)
COMMENT 'товарнормальный КупитьODS'
PARTITIONED BY (ds      STRING COMMENT 'Формат: ГГГГММДД')
LIFECYCLE 400;

s_users_extra:

Язык кода:sql
копировать
CREATE TABLE IF NOT EXISTS s_users_extra
(
    id                STRING COMMENT 'ID пользователя',
    logincount        BIGINT COMMENT 'Количество входов',
    buyer_goodnum     BIGINT COMMENT «Количество положительных отзывов как покупателя»,
    seller_goodnum    BIGINT COMMENT «Количество положительных отзывов как продавца»,
    level_type        BIGINT COMMENT '1 Первоклассный магазин 2 Вторичный магазин 3 Магазин третьего уровня',
    promoted_num      BIGINT COMMENT '1 Сервис класса А 2 Сервис класса Б 3 Сервис уровня С',
    gmt_create        STRING COMMENT «Время создания»,
    order_id          BIGINT COMMENT «Идентификатор заказа»,
    buyer_id          BIGINT COMMENT «Идентификатор покупателя»,
    buyer_nick        STRING COMMENT «Псевдоним покупателя»,
    buyer_star_id     BIGINT COMMENT «Звезды покупателя» ID',
    seller_id         BIGINT COMMENT 'продавецID',seller_nick       STRING COMMENT 'продавец Никнейм',seller_star_id    BIGINT COMMENT 'продавецзвездный рейтингID',    shop_id           BIGINT COMMENT «Идентификатор магазина»,
    shop_name         STRING COMMENT «Название магазина»
)
COMMENT «Таблица расширений пользователей»
PARTITIONED BY (ds       STRING COMMENT 'yyyymmdd')
LIFECYCLE 400;

s_biz_order_delta:

Язык кода:sql
копировать
CREATE TABLE IF NOT EXISTS s_biz_order_delta
(
    biz_order_id         STRING COMMENT «Идентификатор заказа»,
    pay_order_id         STRING COMMENT «Идентификатор платежного поручения»,
    logistics_order_id   STRING COMMENT «Идентификатор логистического заказа»,
    buyer_nick           STRING COMMENT «Псевдоним покупателя»,
    buyer_id             STRING COMMENT «Идентификатор покупателя»,seller_nick          STRING COMMENT 'продавец Никнейм',    seller_id            STRING COMMENT 'продавецID',
    auction_id           STRING COMMENT 'товарID',
    auction_title        STRING COMMENT 'название товара ',
    auction_price        DOUBLE COMMENT 'цена товара',
    buy_amount           BIGINT COMMENT «Количество покупки»,
    buy_fee              BIGINT COMMENT «Сумма покупки»,
    pay_status           BIGINT COMMENT 'платитьсостояние 1 Неоплачиваемый  2 оплаченный 3 Возвращено',
    logistics_id         BIGINT COMMENT «Идентификатор логистики»,
    mord_cod_status      BIGINT COMMENT 'логистикасостояние 0 исходныйсостояние 1 Заказ получен успешно 2 Таймаут получения заказа 3 Успешное приобретение 4Не удалось собрать 5 Подписано успешно 6 Подписание не удалось 7 Пользователь отменяет логистический заказ',
    status               BIGINT COMMENT 'состояние 0 Заказнормальный 1 Заказ не виден',
    sub_biz_type         BIGINT COMMENT 'Тип бизнеса 1 аукцион 2 Купить',
    end_time             STRING COMMENT «Время окончания транзакции»,
    shop_id              BIGINT COMMENT «Идентификатор магазина»
)
COMMENT 'Таблица приращения дня успешного выполнения транзакции'
PARTITIONED BY (ds       STRING COMMENT 'yyyymmdd')
LIFECYCLE 7200;

s_logistices_order_delta:

Язык кода:sql
копировать
CREATE TABLE IF NOT EXISTS s_logistics_order_delta
(
    logistics_order_id STRING COMMENT 'Идентификатор логистического заказа ',
    post_fee           DOUBLE COMMENT «Затраты на логистику»,
    address            STRING COMMENT 'Адрес доставки',
    full_name          STRING COMMENT «Полное имя грузополучателя»,
    mobile_phone       STRING COMMENT 'мобильный телефон',
    prov               STRING COMMENT 'провинция',
    prov_code          STRING COMMENT «Идентификатор провинции»,
    city               STRING COMMENT 'город',
    city_code          STRING COMMENT «Идентификатор города»,
    logistics_status   BIGINT COMMENT 'логистикасостояние
1 - Не отправлено
2 - Отправленный
3 - Товар получен
4 - Вернулся
5 - В наличии',
    consign_time       STRING COMMENT 'срок поставки',
    gmt_create         STRING COMMENT «Время создания заказа»,
    shipping           BIGINT COMMENT 'Способ доставки
1. Обычная почта
2. Экспресс-доставка
3,EMS',
    seller_id          STRING COMMENT 'продавецID',
    buyer_id           STRING COMMENT «Идентификатор покупателя»
)
COMMENT 'Таблица приращения дня заказа логистики транзакций'
PARTITIONED BY (ds                 STRING COMMENT 'день Ожидать')
LIFECYCLE 7200;

Каждая полная шкала ODS должна быть настроена с уникальным идентификатором Поле, а полная шкала ODS должна иметь комментарии.,Каждая полная таблица ODS должна отслеживать пустые данные раздела. Только таблицы ODS с требованиями к мониторингу должны создавать правила мониторинга качества данных. Для удовлетворения потребностей анализа исторических данных,Измерение времени можно добавить как раздел Поле в таблице слоев ODS. В практическом применении,Вы можете выбратьиспользовать Приращение、Полное хранилищеилимолния для способ хранения.

Это все по этому вопросу. Я застрял. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять сообщение для обсуждения. Если вы заинтересованы в этом проекте, не пропустите его, если вы заинтересованы в этой области. Спасибо за вашу поддержку!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose