Руководство по началу работы для инженеров по разработке/хранилищу данных (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.,Пользователь А снова вернул Бтовар,Журнал транзакций обновит запись 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.