DQS Как очистить дубликаты в основной таблице и исправить идентификаторы во всех ссылочных таблицах
У нас много дубликатов в мастер-таблице. В приведенном ниже примере Customer ABC Corp существует 3 раза в основной таблице, а все 3 CustID указаны в таблице Orders.
**Customers Table**
<table>
<tr><td><strong>CustID</strong></td><td><strong>CustName</strong></td></tr>
<tr><td>1001</td><td>ABC Corp.</td></tr>
<tr><td>1002</td><td>XYZ Corp.</td></tr>
<tr><td>1003</td><td>ABC Corp Ltd.</td></tr>
<tr><td>1002</td><td>ABC Corporation Limited.</td></tr>
</table>
**Orders Table**
<table>
<tr><td><strong>OrderID</strong></td><td><strong>CustID</strong></td></tr>
<tr><td>23425</td><td>1001</td></tr>
<tr><td>23466</td><td>1003</td></tr>
<tr><td>23488</td><td>1003</td></tr>
<tr><td>43877</td><td>1004</td></tr>
</table>
Как я могу использовать Data Quality Services для удаления дубликатов таблицы "Клиенты" и ТАКЖЕ для обновления таблицы "Заказы", чтобы отразить изменения.
то есть CustID 1003 и 1004, объединенные в 1001 и 1003 и 1004 из таблицы Orders, также должны быть обновлены до 1001.
Что я сделал до сих пор. Создал базу знаний для клиентов с синонимами для CustName и определил ведущее значение. А затем создал проект очистки данных в DQS, проанализировал данные, а затем внес исправления в основные данные и импортировал эти исправленные значения в базу знаний клиентов. Я понял, что DQS Cleansing Transformation в SSIS делает это автоматически, подключаясь к исходной таблице и DQS KB, и выдает совпадающие и не совпадающие строки, но я до сих пор не понимаю, что делать дальше. Как исправлены данные в таблице "Клиенты" и в таблице "Заказы" соответственно. Пожалуйста, предложите. Примеры, которые я видел до сих пор, используют довольно простые вещи с таблицей и простым листом Excel.
2 ответа
Компьютерщик,
При запуске проекта службы качества данных SQL Server для очистки в качестве последнего шага мастер запрашивает, как экспортировать результаты.
Если вы выберете ту же исходную таблицу, что и цель, она заменит исходные данные новыми данными после очистки
Но я думаю, что это лучший вариант для экспорта данных во временную таблицу, а затем выполнить запрос SQL для обновления проверенных изменений
У меня была таблица CountryList. Затем запустив проект DQS для очистки данных и экспортировав результаты (данные с информацией очистки) в новую таблицу CountryListDQS в базе данных SQL Server.
Позже, запустив оператор SQL Update, аналогичный приведенному ниже, вы можете обновить исходные данные проверенными изменениями из DQS.
update dbo.CountryList
set
country = Q.country_Output
from dbo.CountryList C
inner join dbo.CountryListDQS Q
on C.id = Q.id_Output
where Q.country_Status = 'Corrected'
После того, как очищенный и сопоставленный список строк данных сохранен в новой таблице базы данных, вы можете сначала обновить поля ссылающейся таблицы новым значением (для дубликатов этой записи), а затем удалить дубликаты в таблице поиска.
К сожалению, я не знаю, сможет ли DQS сделать это для нас. Но следующие вопросы могут вам помочь.
Следующее обновляет таблицу ссылок в поле CountryId. Я предпочел сохранить строку с минимальным значением Id как оригинал, а все остальные - как дубликаты.
;with cte as (
select
NewCountryId = Min(id_Output) Over (Partition By Country_Output),
*
from dbo.CountryListDQS
where country_Status = 'Corrected'
)
Update CityList
Set
CountryId = cte.NewCountryId
From CityList
Inner Join cte on cte.id_Output = CityList.CountryId
where CityList.CountryId <> cte.NewCountryId
Вы можете использовать агрегатные функции SQL с предложением Partition By, например Sum(), Count() или Min() и т. Д.
А ниже команда Удалить удаляет повторяющиеся строки в таблице поиска. Возможно, лучше неактивировать, используя поле флага, а не удалять строки из таблицы.
with cte as (
select
rn = ROW_NUMBER() Over (Partition By Country_Output Order By id_Output),
*
from dbo.CountryListDQS
where country_Status = 'Corrected'
)
delete #CountryListTmp
from #CountryListTmp
inner join cte on #CountryListTmp.id = cte.id_Output
where rn > 1
Или лучше сохранить копию таблицы поиска. В случае возникновения проблем с целостностью данных из-за потерянных записей для CountryId, в которых отсутствует отношение внешнего ключа, вы все равно можете найти исходную запись в таблице резервных копий.
Далее вы можете проверить, как удалять дублирующиеся строки, используя функцию SQL Row_Number () в качестве другой опции.
Как последний пункт, я не уверен, что Службы Качества Данных действительно удаляют дублирующиеся строки и сопоставляют все другие строки ссылающейся таблицы с исходным значением.