Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Вот такая ситуция:
существует текстовый файл с данными. Его нужно загрузить на SQL Server. Использую DTS. Вначале данные загружают в StageTable, затем в FactTable. После загрузки данные из StageTable удаляются и тестовый файл тоже удаляется. Проблема заключается в том, что в новом тестовом файле часть данных может повторяться с предыдущим. Данных большое количество FactTable насчитвает порядка 20 миллионов записей. Уникальность записи определить сложно, так как может различаться всего один символ в каком-нибудь поле. Полей много, и естественно lookup использовать очень проблематично - поиск будет осуществялться очень долго. CHECKSUM, как я понимаю тоже не даст уникального значения, так вот вопрос в том, кто может подсказать как мне определить уникальность данных. Спасибо.
8 сен 05, 13:28    [1858755]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Может быть, есть возможность изменить постановку задачи. Например, добавить поле primary key (если его нет) и поле-признак того, что запись менялась в источнике данных (это то, с чего делается txt-файл) с момента последней синхронизации. Тогда вместо здоровенного файла вы будете иметь небольшой файл изменений, который можно будет залить в StageTable и потом быстро и без проверок применить к FactTable.
8 сен 05, 13:41    [1858846]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
GreenSunrise
Может быть, есть возможность изменить постановку задачи. Например, добавить поле primary key (если его нет) и поле-признак того, что запись менялась в источнике данных (это то, с чего делается txt-файл) с момента последней синхронизации. Тогда вместо здоровенного файла вы будете иметь небольшой файл изменений, который можно будет залить в StageTable и потом быстро и без проверок применить к FactTable.

Абсолютно с Вами согласен, и именно так бы и действовал, но ... Тестовый файл поставляется сторонним ПО с помощью стандартной функции. Причем их может быть несколько полностью идентичных, только имена разные. Они автоматически помещяются на диск, а пакет уже автоматически обрабатывает эти файлы.
8 сен 05, 13:47    [1858883]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Возможно, вам нужен не CHECKSUM, а BINARY_CHECKSUM? Есть еще такая штука, как CHECKSUM_AGG, но она вам вряд ли нужна.
BINARY_CHECKSUM
8 сен 05, 13:55    [1858939]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Хотя все равно для каких-то случаев даже бинарная функция будет давать не тот результат, что вам нужен...
8 сен 05, 13:57    [1858956]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
Уникальность записи определить сложно, так как может различаться всего один символ в каком-нибудь поле.
Непонятно - есть у записи ПК или нет ?
8 сен 05, 13:57    [1858959]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Glory
Уникальность записи определить сложно, так как может различаться всего один символ в каком-нибудь поле.
Непонятно - есть у записи ПК или нет ?

BINARY_CHECKSUM тоже дублируется. primary key отсутсвует. данные примерно такого типа:
тип - дата - транзакции- комментарии - описание
всего полей около 20. Естествено все данные в полях формируются из справочников, кроме "транзакции", но это цифры. Они тоже тоже могут совпадать.
8 сен 05, 14:04    [1859008]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Судя по постановке задачи, даже наличие ПК не спасет автора вопроса. Насколько я понимаю, у него есть некое стороннее ПО, которое выгружает некую таблицу ЦЕЛИКОМ в файл, потом это тащится на соседний сервак, и там начинает обрабатываться. При этом есть ПК, нет ПК, неважно - для нахождения различий в существующих записях ему придется сравнивать все поля.
8 сен 05, 14:05    [1859022]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
primary key отсутсвует. данные примерно такого типа:
тип - дата - транзакции- комментарии - описание

На основании чего тогда можно сделать вывод, что какая-то запись есть повторная запись ?
8 сен 05, 14:06    [1859027]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Какая конечная цель? Найти разницу между таблицами или что?
8 сен 05, 14:07    [1859037]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Glory
primary key отсутсвует. данные примерно такого типа:
тип - дата - транзакции- комментарии - описание

На основании чего тогда можно сделать вывод, что какая-то запись есть повторная запись ?

Один и тот тип, дата, транзакции, описание
пробовал давать таким образом:
select count(*),
CHECKSUM(тип, дата, транзакции) as F1
CHECKSUM(*) as F2
from STAGETABLE
group by CHECKSUM(тип, дата, транзакции),CHECKSUM(*)
having count(*)>1
тогда все получается (выдаются только дублирующие записи), но я не уверен в будущем это будет работать.
8 сен 05, 14:11    [1859066]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
Один и тот тип, дата, транзакции, описание
пробовал давать таким образом

Ну значит ПК есть.
8 сен 05, 14:11    [1859071]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
GreenSunrise
Какая конечная цель? Найти разницу между таблицами или что?

ц5ель загрузить ТОЛЬКО уникальные данные в хранилище, повторяющие данные отбросить, т.е. иметь правельное хранилище.
8 сен 05, 14:12    [1859077]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
ruslrain
Member

Откуда:
Сообщений: 114
Glory
Один и тот тип, дата, транзакции, описание
пробовал давать таким образом

Ну значит ПК есть.
Ну кто спорит что таким образом проверять можно. Все правельно, но вот только по такому ключу (больше десятка полей) на таблице в 20 млн записей, у меня загрузка будет идти полночи (если не больше). Хотелось то именно найти другой способ определения уникальности.
8 сен 05, 14:15    [1859094]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
usalex2
Guest
Top 10, Punkt 9, chast 3.

Privedennaia tam shema posvolit sravnivat 2(i bolee) tabliz po vsem poliam srasu.

/*Esli uj vam deistvitelno nado pri kajdom importe sravnivat vse 20 mln sapisei*/
8 сен 05, 14:27    [1859201]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
2usalex2: да проблема не в том, чтобы проверку написать на 20 полей, а в том, чтобы это быстро работало. Сдается мне, что описанный в той статье способ будет работать еще медленнее, чем простое сравнение.

2ruslrain: может, все-таки добавить поле-признак того, что запись менялась? тогда на удаленном сервере таблица будет сливаться по-прежнему целиком, но зато в этом поле у нее будет 0 или 1. Конечно, надо будет тогда предусмотреть обнуление этого поля после выгрузки.
8 сен 05, 14:57    [1859431]     Ответить | Цитировать Сообщить модератору
 Re: определение уникальности данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/forum/actualtopics.aspx?search=%22ignore_DUP_KEY%22&submit=%CD%E0%E9%F2%E8&bid=1
8 сен 05, 16:20    [1860023]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить