ETL: 200 tablodan ayıklama - SSIS veri akışı veya özel T-SQL?


12

Analizime dayanarak, veri ambarımız için eksiksiz bir boyutsal model 200'den fazla kaynak tablodan çıkarılmasını gerektirecektir. Bu tablolardan bazıları artımlı bir yükün parçası olarak çıkarılacak ve diğerleri tam yük olacaktır.

Not etmek gerekirse, hepsi aynı şemaya sahip yaklaşık 225 kaynak veritabanına sahibiz.

Gördüğüm kadarıyla, OLE DB kaynağı ve OLE DB hedefi ile SSIS'de basit bir veri akışı oluşturmak, sütunların ve veri türlerinin tasarım zamanında belirlenmesini gerektirir. Bu, sonuçta sadece ayıklama için 200'den fazla veri akışı ile sonuçlanacağım anlamına geliyor.

Sürdürülebilirlik açısından bakıldığında bu beni büyük bir sorun olarak görüyor. Çıkarma kodunda bir çeşit süpürme değişikliği yapmam gerekirse, 200 farklı veri akışını değiştirmem gerekirdi.

Alternatif bir seçenek olarak, bir dizi meta veri tablosu kümesinden ayıklamak istediğim kaynak veritabanlarını, tablo adlarını ve sütunları okuyan küçük bir komut dosyası yazdım. Kod, birden çok döngüde çalışır ve bağlantılı bir sunucu ve OPENQUERY aracılığıyla kaynak tablolardan ayıklamak için dinamik SQL kullanır.

Testlerime dayanarak, bu hala bir OLEDB kaynağı ve hedefi ile bir SSIS veri akışı kullanmak kadar hızlı değil. Bu yüzden ne tür alternatiflerim olduğunu merak ediyorum. Şimdiye kadar düşünceler şunları içerir:

  1. Programlı olarak basit veri akışı ile SSIS paketleri oluşturmak için EZAPI kullanma . Çıkarılacak tablolar ve sütunlar, daha önce belirtilen aynı meta veri tablolarından gelirdi.
  2. 3. taraf yazılım satın alın (dinamik veri akışı bileşeni)

Buna yaklaşmanın en iyi yolu nedir? .NET programlama söz konusu olduğunda yeni başlayan biriyim, bu yüzden sadece temel bilgilerle rampa etmek için gereken süre de bir endişe kaynağı.


1
225 veritabanının hepsi aynı şemaya sahip olduğundan, 225 veritabanının tümünden gelen verileri birleştiren ve SSIS paketini buna yönlendiren bir görünüm sağlamak mümkün müdür? Bu bir tıkanıklık aracı gibi görünse de ve sihirli bir şekilde performans göstermeyecek olsa da, 225 SSIS paketinden daha kolay yönetilebilir (orada bazı otomasyonları yönetseniz bile). Ayrıca yarıya inebilir ve her bir veritabanı seti için bir görünüm oluşturabilirsiniz, örneğin 1-25, 26-50, 51-75 gibi veritabanları
Aaron Bertrand

Veritabanları, daha karmaşık hale getirdiğini düşündüğüm birden çok sunucuda bulunuyor. Aslında 225 veritabanına karşı geliştirme kutusu üzerinde farklı tablolar bir görünüm oluşturmaya çalıştım ve verilerin okunması acı yavaş oldu.
8kb

1
Sadece aynı sunucudaki veritabanlarına referans vermek için bir görünüm istersiniz. Ve yine, tüm 225 tablolara karşı tek bir görünüm sihirli bir performans göstermeyecek, ancak bence hala bölünebilir ve fethedebilir ve 225 veri akışına sahip olamazsınız.
Aaron Bertrand

Yanıtlar:


12

Tek bir pakette 200 veri akışı olmasını istemezdim. Sadece açılıp doğrulanması gereken zaman sizi zamanınızdan önce yaşlandıracaktır.

EzAPI eğlencelidir ancak .NET ve SSIS'de yeniyseniz , oh hayır, bunu istemezsiniz. Bence SSIS nesne modeli hakkında bilgi edinmek ve muhtemelen COM ile uğraşmaktan çok daha fazla zaman harcayacaksınız.

Tembel olduğum için, listelemediğiniz ücretsiz bir seçenek olarak BIML'yi takacağım. SO ile ilgili bir cevaptan /programming/13809491/generating-several-slike-ssis-packages-file-data-source-to-db/13809604#13809604

  • Biml ilginç bir canavar. Varigence size Mist için lisans satmaktan mutluluk duyacaktır, ancak buna gerek yoktur. Eğer gerekir tek şey BIDSHelper ve sonra göz atmak BimlScript ihtiyaçlarınızı yaklaşan bir tarif için ve görünüm. Bunu yaptıktan sonra, BIDSHelper ve whoosh'ta içeriğe duyarlı menü düğmesine tıklayın, paketler oluşturur.

Bence bu sizin için de bir yaklaşım olabilir. Paketlerinizin nasıl davranması gerektiğini tanımlayan ve daha sonra bunları nasıl oluşturacağını açıklayan BIML'nizi tanımlarsınız. Senaryoda, nerede değişiklik yaptığınızı ve N paketlerini düzeltmeniz gerektiğini açıklayın, hayır, sorun tanımınızı düzeltin ve paketleri yeniden oluşturun.

Ya da çerçeveye yeterince aşina olduysanız, tüm kırık şeyleri düzeltmek için EzAPI gibi bir şey kullanın. Heck, bunu 2005 olarak etiketlediğiniz için mevcut paketler üzerinde toplu değişiklikler yapmanız gerekiyorsa PacMan'ı da deneyebilirsiniz.

SSIS Tasarımında dikkat edilecek noktalar

Genel olarak, paketlerimin tek bir görevi (satış verilerini yükle) çözmeye odaklanmaya çalışıyorum. Bu 2 veri akışı gerektiriyorsa, öyle olsun. Devralmaktan nefret ettiğim, içe aktarma sihirbazından tek bir pakette çok sayıda ilişkili olmayan veri akışına sahip bir paket. Onları çok özel bir sorunu çözen bir şeye bölün. Yüzey alanı azaldıkça gelecekteki geliştirmeleri daha az riskli hale getirir. Ek bir fayda, DimProductsminyonum yükleme SnowflakeFromHellpaketi ile uğraşırken yükleme üzerinde çalışabilmemdir .

Daha sonra çocuk iş akışlarını düzenlemek için ana paket (ler) i kullanın. 2005'te olduğunuzu biliyorum ama SQL Server 2012'nin SSIS sürümü kedinin pijamaları. Proje dağıtım modelini ve paketler arasında izin verdiği sıkı entegrasyonu seviyorum.

TSQL ve SSIS (Hikayem)

Saf TSQL yaklaşımına gelince, önceki bir işte, tüm Informix verilerini SQL Server'a çoğaltmak için 73 adımlı bir iş kullandılar. Genellikle yaklaşık 9 saat sürdü, ancak 12 saate kadar uzayabildi. Yeni bir SAN satın aldıktan sonra, yaklaşık 7 saatten fazla sürdü. SSIS ile yeniden yazılan aynı mantıksal süreç 2 saatin altındaydı. O zamanlar aşağı inerken en büyük etken SSIS'i kullandığımız "serbest" paralelleştirmedir. Aracı işi tüm bu görevleri seri olarak gerçekleştirdi. Ana paket temel olarak tabloları işlem birimlerine böldü (kovaları "yinelenen tablo 1'i çalıştır", tablo 2 vb. Serileştirilmiş görevlerin 5 paralel seti), buradaki kovaları eşit eşit büyüklükteki iş birimlerine bölmeye çalıştım. Bu, 60 kadar referans referans tablosunun hızlı bir şekilde doldurulmasına izin verdi ve daha sonra "

SSIS kullanarak benim için diğer artıları ben "yuvarlak" yapılandırma, günlüğü ve yuvarlak bir deliğe dayak gerekir kare veri için .NET kütüphaneleri erişim olsun. Canavarın grafiksel doğası gereği bir SSIS paketini korumanın (bakımdan vazgeçmenin) saf bir TSQL yaklaşımından daha kolay olabileceğini düşünüyorum.

Her zaman olduğu gibi, kilometreniz değişebilir.


BIML çok ilginç görünüyor. Ayrıca her veri akışını ayrı bir paket olarak oluşturmayı ve sonra bunları bir ana paket aracılığıyla çağırmayı düşünüyordum. Bunun daha iyi olduğunu düşünüyor musun? Ayrıca, T-SQL yaklaşımı hakkında bir fikriniz varsa merak ediyorum. Daha yavaş ama test ettim ve işe yarayacak.
8kb


0

200 kaynak tablonuz ve 225 veritabanınız olduğunu söylemiştiniz. 200 kaynak tabloları tüm 225 veritabanlarından tüm tabloların bir sayımı olduğunu varsayıyorum (neden toplam tablo sayısı 45000 koymak her veritabanında 200 tablo varsa). Ayrıca, veritabanının şemasının 225 veritabanı için aynı olduğunu belirttiniz.

Önce sadece 1 veritabanı için SSIS paketleri oluşturabilir ve daha sonra işlerinizi planladığınızda, paket yapılandırmasını kullanarak veritabanı bağlantı dizesini değiştirebilirsiniz (SQL 2005'iniz varsa, paket dağıtım modelini kullanacaksınız). Daha önceki yanıtlarda belirtildiği gibi SQL 2012, proje dağıtım modelini kullanarak parametrelerinizi yapılandırmanın yeni yollarına sahiptir.

SSIS ile paket yapılandırması hakkında daha fazla bilgiye buradan ulaşabilirsiniz http://www.sql-server-performance.com/2007/package-configuration-2005/

Proje parametrelerini kullanma hakkında daha fazla bilgiyi buradan edinebilirsiniz, /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.