Мы начинаем загружать хранилище данных с данными из журналов событий. У нас есть нормальная звездная схема, где строка в таблице фактов представляет одно событие. Наши таблицы измерений представляют собой типичное сочетание USER_AGENT, IP реферала, страница, и т.д. Один размера таблицы выглядит следующим образом:DataOverhouse duplicate rows rows
create table referal_dim(
id integer,
domain varchar(255),
subdomain varchar(255),
page_name varchar(4096),
query_string varchar(4096)
path varchar(4096)
)
Где мы автоматическая генерация идентификатора, чтобы в конечном итоге присоединиться к таблице фактов. Мой вопрос: какой лучший способ идентифицировать дубликаты записей в нашем процессе массовой загрузки? Мы загружаем все записи для файла журнала в таблицы temp, прежде чем делать фактическую вставку в постоянное хранилище, однако идентификатор просто автоматически увеличивается, поэтому две идентичные записи с двумя днями будут иметь разные идентификаторы. Будет ли целесообразно создавать хэш столбцов значений, а затем попытаться сравнить на этом? Кажется, что попытка сравнения на каждом столбце значения будет медленным. Есть ли какая-либо передовая практика для такой ситуации?
Какая платформа вы используете, sql-сервер? Oracle? MySql? Версия? – chadhoc
Он использует Vertica, но я считаю, что он спрашивает, как нормализовать входящие данные в его таблицу измерений, сохраняя ссылку в таблицах фактов. Если он выполняет поиск по каждой строке, чтобы узнать, существует ли измерение для данного факта, тогда, когда вы попадаете в миллионы строк, он будет очень медленным. Хеширование столбцов для создания первичного ключа может быть жизнеспособным решением, но вам нужно тогда беспокоиться о парадоксальности дня и возможных столкновениях. –