Первые три статьи этой серии очень четко объяснили все логические процессы построения всего хранилища данных, а это означает, что мы построили структуру. Следующим шагом является заполнение содержимого каждого уровня компонента в структуре. Мы разделили хранилище данных на три уровня, а именно уровень введения данных ODS, общедоступный уровень данных CDM и уровень приложений данных ADS. Теперь нам нужно постепенно обогащать эти три уровня в соответствии с бизнесом. Во-первых, нам нужно построить уровень 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. В практических приложениях вы можете использовать инкрементное, Полное хранилищеилимолния для способ хранения.
Инкрементальное в днях хранилище,Используйте бизнес-период в качестве раздела,В каждом разделе хранятся дополнительные бизнес-данные. Примеры следующие:
Таблицы 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 дня.,поддержка через |
Таблица дельты ODS | Разделение по дням | Существует соответствующая полная таблица, и данные разделов могут быть сохранены максимум за последние 14 дней. Соответствующего полного масштаба не существует, и данные необходимо хранить постоянно. |
Временная таблица процесса ETL ODS | Разделение по дням | Сохраняйте разделы максимум за последние 7 дней. |
Данные DBSync без дедупликации | Разделение по дням | Приложение сохраняет исторические данные через средний уровень. По умолчанию уровень ODS не сохраняет исторические данные. |
Затем мы используем данные электронной коммерции, с которыми мы более знакомы, для построения,Основными данными, включенными в уровень ODS, являются: сведения о заказе системы транзакций, сведения о пользователе, сведения о товаре и т. д. Эти данные не обрабатываются,это самые оригинальные данные. логически,Эти данные хранятся в виде двумерных таблиц. Хотя, строго говоря, уровень ODS не относится к категории моделирования хранилища данных.,Но разумное планирование уровня ODS и синхронизации данных также очень важно.
На данные уровня ODS не могут напрямую ссылаться задачи прикладного уровня. Если в слоях DWD и DWS нет выделенных данных слоя ODS, получите к ним доступ, создав представление в слое ODS. Соглашение об именах соответствует соглашению об именах DWD или DWS. Представление должно быть инкапсулировано с помощью планировщика, чтобы обеспечить удобство обслуживания и управляемость представления.
Таблица или ее название должны максимально соответствовать бизнес-системе.,Однако для различения приращений и полных шкал требуется дополнительная идентификация. Который использует maxcompute для отображения,Жизненный цикл таблицы MaxCompute (Жизненный цикл),Относится к времени последнего обновления данных таблицы (раздела).,Никаких изменений по истечении указанного времени,Затем эта таблица (раздел) будет автоматически переработана MaxCompute.,Это обозначенное время и есть период жизни. Срок службы неделя, период переработки - каждый день по расписанию.,Сканировать все разделы.
s_auction:
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:
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:
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:
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:
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. В практическом применении,Вы можете выбратьиспользовать Приращение、Полное хранилищеилимолния для способ хранения.
Это все по этому вопросу. Я застрял. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять сообщение для обсуждения. Если вы заинтересованы в этом проекте, не пропустите его, если вы заинтересованы в этой области. Спасибо за вашу поддержку!