Sort Component ile Mükerrer Kayıtları Temizlemek

6. December 2010

Bazı durumlarda, özellikle text veya excel gibi kaynaklardan alınan verilerde mükerrer (Çoklu) kayıtlar olabilir. Mükerrer olması veriyi atacağımız tabloda bulunan Primary Key kısıtına takılıyor olduğundan server kaydı eklemenize imkan vermeyebilir. Bu gibi durumlarda, aggregate component'in dışında kullanabileceğimiz bir component de mevcuttur. Sort component içerisinde bulunan bir özellik, mükerrer kayıtların elenmesinde oldukça işimize yarayabilir.

Konuyu anlatmak için öncelikle senaryomuzu ve öğelerini belirleyelim.

Bir adet kişi ile adreslerin eşleştirildiği tablomuz var. Adı: ONLYONEADDRESS, üzerinde CUSTOMERID, CITY, ADDRESS gibi 3 kolon var ve CUSTOMERID, CITY birlikte Primary Key, yani demek oluyor ki bir kişi için bir ilde sadece bir adres olmalı. İş Biriminden böyle bir talep geldi diyelim.

Bu tablo, web üzerinden kayıt yapılan bir başka sistemden dışarıya aktarılmış bir Excel dosyasıyla doluyor. Ancak Excel dosyasının içerisinde ONLYONEADDRESS üzerindeki Primary Key kısıtına aykırı mükerrer (Çoklu) kayıtlar olabilir. Biz bu mükerrer kayıtları eleyip içeriye bir kişi için bir ilde sadece bir adres kaydı atmak istiyoruz diyelim. (Hatırlayalım, İş birimi öyle istiyor, diğer adresler umurlarında değil gibi. Bir tane yeterli denildi.)

Öncelikle Control Flow öğelerini oluşturalım. Bunun için Bir adet truncate, bir adet dataflow task koymamız yeterli.

 

Dataflow Task'ın içerisine de bir adet Excel Source, bir adet Sort ve bir adet de OLEDB Destination koyup birbirine bağlayalım.

Elimize gelen excel'de 3 adet kolon olduğundan bahsetmiştik. Bunlar CustomerID, City, ve AddressLine1.

 

Insert edeceğimiz tablodaki primary key iki adet kolondan oluşuyor.

SSIS içerisinde ise OLEDB Destination içinde ONLYONEADDRESS Tablosunu seçiyoruz:

 

Eğer Sort işlemini konfigure etmeden çalıştırırsak aşağıdaki gibi bir hata alacağız:

Error: 0xC0202009 at Remove Duplicate and Import, OLE DB Destination [49]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E2F.

An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E2F Description: "The statement has been terminated.".

An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E2F Description: "Violation of PRIMARY KEY constraint 'PK_ONLYONEADDRESS'. Cannot insert duplicate key in object 'dbo.ONLYONEADDRESS'.".

Error: 0xC0209029 at Remove Duplicate and Import, OLE DB Destination [49]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "input "OLE DB Destination Input" (62)" failed because error code 0xC020907B occurred, and the error row disposition on "input "OLE DB Destination Input" (62)" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

Error: 0xC0047022 at Remove Duplicate and Import, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "OLE DB Destination" (49) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (62). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

 

Şimdi bu hatayı engellemek için sort penceresinde nasıl bir ayar yapmamız gerektiğine bakalım.

Dikkat ederseniz sol alt köşede "Remove rows with duplicate sort values" isimli bir checkbox var. Bu bize sıralama işlemi sırasında aynı sıralamaya sahip olanları elememize imkan vermektedir.

Ancak dikkat edelim: Tabloda iki adet kolon birlikte primary key olarak kullanıldığından Violation of PRIMARY KEY constraint 'PK_ONLYONEADDRESS'. Hatasını engellemek istiyorsak her iki kolonu da burada sıralama işlemine sokmamız gerekecektir.

Eğer bu önemli kuralı atlarsanız "Remove rows with duplicate sort values" değeri farklı mükerrer kayıtları uçuracaktır.

Evet tüm bu bilgiler ışığı altında paketimizi çalıştırdığımızda sorunsuzca veritabanına kayıt edildiğini ve Primary Key Violation hatası almadığımızı görebiliriz.

Dataflow Components ,

Add comment




biuquote
  • Comment
  • Preview
Loading