Вопрос

Я использую Talend для заполнения хранилища данных.Моя работа — записывать данные о клиентах в таблицу измерений, а данные о транзакциях — в таблицу фактов.Суррогатный ключ (p_key) в таблице фактов автоматически увеличивается.Когда я добавляю нового клиента, мне нужна таблица фактов, чтобы отразить идентификатор соответствующего клиента.

Как я уже упоминал, мой p_key имеет автоматическое автоматическое приращение, поэтому я не могу просто вставить произвольное значение для p_key.

Есть какие-нибудь мысли о том, как я могу вставить строку в свою таблицу измерений и при этом получить первичный ключ для ссылки в моей записи фактов?

Больше информации:

Что делать, если входящие данные не нормализованы?Например, у меня есть CSV со следующими данными:

order #   date        total customer# first_name last_name
111       1/2/2010    500    101      John        Smith     
222       1/3/2010    600    101      John        Smith

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

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010

Как вы упомянули, ключ таблицы измерений будет автоматически увеличиваться.Таблица фактов должна ссылаться на этот ключ.Как спроектировать задание etl так, чтобы суррогатный ключ возвращался после вставки в ?

Кроме того, если данные клиента дедуплицируются (как указано выше), как вы обрабатываете ключи?

Это было полезно?

Решение

Однако я, возможно, неправильно понял вашу проблему:

  1. Таблица фактов может иметь или не иметь автоматически увеличивающийся PK, обычно PK в таблице фактов представляет собой совокупность нескольких FK, ссылающихся на таблицы измерений.

  2. Таблица измерений должна иметь автоматически увеличивающийся ПК.

  3. Новый клиент должен «попасть» в таблицу измерений клиентов до того, как факт транзакции достигнет хранилища данных (или, по крайней мере, таблицы фактов).

  4. Таблица измерений должна иметь BusinessKey, который однозначно идентифицирует клиента, например адрес электронной почты, полное имя + PIN-код или что-то подобное.

  5. Строка входящей транзакции также должна содержать поле BusinessKey клиента — именно так мы идентифицируем клиента.

  6. Используйте BusinessKey для поиска PrimaryKey клиента в таблице измерений клиентов перед вставкой транзакции в таблицу фактов.

РЕДАКТИРОВАТЬ

Если ваши новые данные о клиенте включены в транзакцию, найдите способ извлечь данные о клиентах и ​​направить их в хранилище данных перед транзакцией.

ОБНОВЛЯТЬ:

Сначала загрузите dimCustomer, выберите BusinessKey, чтобы измерение выглядело так:

CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith

В процессе загрузки измерений вам необходимо разделить входящие строки на два потока: существующих и новых клиентов.Строки из потока «существующий клиент» обновляют таблицу dim (SCD типа 1), а строки из потока «новый клиент» вставляются.В потоке вставляемых строк не должно быть дубликатов;это можно сделать, вставив их в промежуточную таблицу и удалив там дубликаты непосредственно перед окончательной вставкой в ​​таблицу измерений.Вы также можете извлечь дубликаты и направить их обратно в процесс загрузки для обновления записей о клиентах;они могут содержать более новые данные, например обновленные номера телефонов и т.п.

Как только клиент приедет, загрузите факты.

Таблица фактов должна выглядеть примерно так:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

Я использовал составной первичный ключ DateKey и OrderNumber, что позволяет время от времени сбрасывать последовательность номеров заказов.

В процессе загрузки измените запись факта, чтобы она выглядела примерно так:

DateKey CustomerBusinessKey OrderNumber Total
20100201  john_smith_101       111       500
20100301  john_smith_101       222       600

На этом этапе нам нужно заменить CustomerBusinessKey на CustomerKey из таблицы измерений с помощью поиска.Итак, после поиска поток будет выглядеть так:

DateKey CustomerKey OrderNumber Total
20100201 12345       111         500
20100301 12345       222         600

Теперь это можно вставить в таблицу фактов.

Я также немного схитрил — не искал ключ даты в dimDate и не искал существующие строки в таблице фактов.При загрузке таблицы фактов вы можете поискать существующую комбинацию (DateKey, OrderNumer) перед загрузкой или оставить ее на усмотрение первичного ключа для защиты от дубликатов — на ваш выбор.В любом случае убедитесь, что попытка повторно загрузить те же данные в таблицу фактов не удалась.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top