Programcılar SSIS kullanmalı mı, öyleyse neden? [kapalı]


94

Bir .NET geliştiricisi olarak, SSIS paketlerini kod yazmak yerine hangi nedenlerle tercih etmeliyim? Şu anda çalıştığım üretimde tonlarca ambalajımız var ve bunlar hem "yazmak" (belki çizmek?) Hem de sürdürmek için bir kabus. Her paket, soyutlamaların bozulduğu noktalarda karıştırılmış C # ve VB.NET komut dosyalarına sahip çok renkli spagetti kasesine benziyor. Her "SQL Görevini Yürüt" veya "Foreach Döngüsü" nün ne yaptığını anlamak için, lanet olası şeyi çift tıklamam ve birden çok sekmeye dağılmış bir dizi değişmez değerler ve ifadeler ağacına göz atmam gerekiyor.

Açık fikirliyim, bu yüzden diğer iyi geliştiricilerin SSIS'i sadece bir kod yazmaktan daha verimli bulup bulmadığını bilmek istiyorum . SSIS'i daha üretken bulursanız, lütfen bana nedenini söyleyin.


4
nasıl yaptığını bilmiyorum ama SSIS, bir veri ambarı oluşturmak için yazdığım herhangi bir manuel koddan çok daha hızlı. bu iş için tasarlanmış bir araçtır - görevleri bir ana paketten yürütülen alt paketlere
ayırmaya çalışın

1
Benzer bir soruya bağlantı: stackoverflow.com/q/690123/327165
Ilya Berdichevsky

5
Şimdi bununla karşılaştım. Bazı sorunlu SSIS paketlerini korumak için çalışıyorum ve yararlı çalışmayı bir C # programına çıkarmak için bir derleyici yazdım. code.google.com/p/csharp-dessist
Ted Spence

5
Tecrübelerime göre, "uzun" ve / veya "karmaşık" metinler veya birçok komut dosyanız varsa SSIS zor olabilir. Bir konsol uygulamasında hata ayıklamak çok daha kolay. SSIS'te, komut dosyanızın hatalarını kendi başına ayıklayamazsınız. Bir komut dosyası nedeniyle üretilen hata mesajları şifreli ve hataya neden olan satırı tam olarak göremezsiniz. IMO, proje ihtiyaçları standart SSIS bileşenleri ile karşılanabiliyorsa, SSIS gitmenin yolu olabilir. Ancak bunun için SSIS bileşenlerinin sınırlamalarını bilmeniz gerekir. Örneğin, bu video size "posta görevi gönder" in neden neredeyse yararsız olduğunu gösteriyor - youtube.com/watch?v=IlUzkMPYDSk
Steam

3
bu sorunun 7 cevabı vardır, bu nedenle münazara, tartışma, anket veya genişletilmiş tartışma istemedi. Neden açık tutmuyorsunuz?
Michael Freidgeim

Yanıtlar:


94

Büyük bir veri ambarı ve küpü korumak ve yönetmek için her gün SSIS kullanıyorum. İki yıldır% 100 iş zekası ve veri ambarı yapıyorum. Ondan önce 10 için .NET uygulama geliştiricisiydim.

SSIS'in değeri, verileri bir noktadan diğerine taşımak için bir iş akışı motoru olarak, yol boyunca sınırlı bir dönüşüm ve koşullu dallanma olabilir. Paketleriniz çok sayıda komut dosyası içeriyorsa, ekibiniz SSIS'i yanlış görevler için kullanıyor veya SQL konusunda rahat değil veya yutturmaca satın almış. SSIS paketlerinde hata ayıklamak çok zordur. Komut dosyası bileşenleri mutlak bir kabustur ve yalnızca biçimlendirme, döngü veya son çare olarak kullanılmalıdır.

  1. Paketlerinizi basit, sql görevleri ve veri akışı görevleri tutun.
  2. SSIS dışında, tercihen SQL'de mümkün olduğunca çok çalışın
  3. Değişkenlerinizi tek bir genel kapsamda tutun
  4. SQL'inizi değişkenler veya depolama prosedürleri içinde tutun, asla sıralı değil
  5. Değişken değerlerinizi bir yapılandırma deposunda, tercihen bir SQL veritabanında tutun

1
SSIS ile yaşadığım sorunla, daha önyargılı bir cevap verirdim (sanki sorumun tonundan anlayamıyormuşsunuz gibi :)). Güzel cevap Kevin.
Charles

6
2002'de piyasaya sürüldüyse .NET ile 10 yıl boyunca nasıl çalıştınız?
Brady Holt

7
[alıntı] Microsoft, .NET Framework üzerinde geliştirmeye 1990'ların sonunda başlangıçta Yeni Nesil Windows Hizmetleri (NGWS) adı altında başladı. 2000'in sonlarına doğru .NET 1.0'ın ilk beta sürümleri yayınlandı [/ quote] Bu şekilde, muhtemelen beta ile çalışıyordu.
nitefrog

Soru 2010'da cevaplandı, bu yüzden iki yıllık BI'yı çıkarın ve ardından 10, 1998'i, bahsettiğiniz beta sürümünden iki yıl önce verir. Aksi takdirde, iyi cevap! :)
finoutlook

Evet, küresel kapsam mantıklı. Yerel yaparsanız ve başka bir yerden erişmek istiyorsanız, bir sorununuz var demektir. Yerelin kapsamını küresel olarak değiştiremezsiniz. Bunun yerine çok sayıda tıklama ve silme yapmanız gerekiyor. Hatta 10-15 yerliniz varsa, bu bir acıya dönüşür.
Steam

52

SSIS'i birkaç kez kullanmayı denedim ve vazgeçtim. IMO C # ile ihtiyacım olan her şeyi yapmak çok daha kolay. SSIS çok karmaşık, çok fazla sorun var ve buna değmez. Aynı zamanı SSIS öğrenmek için harcamaktansa C # becerilerini geliştirmek için daha fazla zaman harcamak çok daha iyidir - eğitiminizden çok daha fazla getiri elde edersiniz.

Ayrıca bir VS çözümünde işlevselliği bulmak ve sürdürmek çok daha kolaydır. VS ile birim testi kolaydır. Tek yapmam gereken Subversion'da kaynağı kontrol etmek ve nasıl yüklendiğini doğrulamak. SSIS paketlerinin birim testi, hafifçe söylemek için çok karmaşıktır.

Ayrıca, SSIS'in bazı satırlarda bazı sütunları sessizce doldurmakta başarısız olduğu, istisnaları artırmadan sadece onları atladığı durumlar vardı. Sorun gidermek ve neler olup bittiğini anlamak için çok zaman harcadık. C # ile alternatif bir çözüm geliştirmek bir saatten az sürdü ve iki yıl sorunsuz çalışıyor.


Puanlarınız için teşekkürler Alex. İşte bir gotcha olabileceğini düşündüğüm şeye bir örnek - stackoverflow.com/questions/21616435/… .
Steam

2
Bir ETL geliştiricisinin bilmesi GEREKEN tüm C # / programlama konularının bir listesi var mı? Örneğin. LINQ, SqlDataReader, DataTable vb. Ben de SSIS'in karmaşık görevler için iyi olmadığını düşünüyorum. Kolay bir "kopyala-yapıştır" projeniz / göreviniz varsa, SSIS en iyi araç olabilir.
Steam

@blasto Rhino ETL'yi denediniz mi: ayende.com/blog/3102/rhino-etl-2-0
AK

Alex, Jerome'un cevabı Rhino ETL'yi de önerdi. Bana anlaşılmaz geliyor. Bu nedenle, dokümantasyon, destek ve eğitim eksikliği nedeniyle kullanmakta tereddüt ederdim. Ayrıca, üzerinde sadece bir geliştirici çalışıyor gibi görünüyor. Bu, araca olan güvenimi azaltır. Bunu eğlence için ya da meraktan denerdim ama bunu gerçek bir proje için kullanamam. Teşekkürler.
Steam

Birisi Rhino ETL (saf C # ile) hakkında bir eğitim isterse işte bir tane - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

Bana göre - SSIS yalnızca ETL işlemleri içindir ve bu kapsamın dışında hiçbir mantık içermemelidir.


8
ETL = Dönüştürme Yükünü Ayıkla
Christoph

3
Ben de öyle hissediyorum. Bizim durumumuzda, fiyatlandırma bilgisi içeren e-posta (veya SFTP) CSV'leri gibi şeyler yapmak için SSIS kullanıyoruz. Dallanma, gömülü komut dosyaları vb. Oldukça korkunç. Bazı verileri SSIS ile taşımış olsaydınız, muhtemelen o kadar da kötü olmazdı.
Charles

1
Sanırım cevabınızın biraz daha derinliği olabilir.
Steam

3
ETL'deki T bazı mantık içermeyebilir mi? Sadece bir düşünce ...
cs0815

Yalnızca verileri şekillendirmek / yönlendirmekle ilgiliyse, elbette. Ama herhangi bir iş mantığından kaçınırdım.
Christoph

11

SSIS'in çeşitli kaynaklardan verileri toplamak ve birleştirmek için yeterince iyi bir çözüm olacağını düşündüğümüz bir proje üzerinde çalışırken talihsiz bir deneyim yaşadım. Talihsiz olan şey, ilk başta harika çalışmasıydı, ancak daha sonra gereksinimler değişti ve (sonunda) bunun yanlış araç olduğunu anladık.

belki sadece yanlış kullanıyorduk ama şemamızı değiştirirsek çok zorlandık ve sonunda bunu yapmak için C # ile özel bir araç yazmak için ön uçtan ORM tanımlarımızı yeniden kullandık. Veri modeline zaten sahip olduğumuz için bu şaşırtıcı derecede kolaydı. Açıkçası YMMV ve ben hiçbir şekilde bir SSIS uzmanı değilim, ancak bu durumda SSIS, kollarımızı sıvayıp 'kodlama' yaptığımızda çok sayıda yinelenen işe ve baş ağrısına neden oldu ve bu beklenenden daha kolaydı.

Bu yüzden SSIS'i düşünürken esnekliği çok düşünürdüm.


7
Ben de aynı duyguları paylaşıyorum. Kodu yeniden düzenlemek kolaydır ... görsel DSL ile o kadar da değil.
Charles

Luke, lütfen bize proje ihtiyaçlarının bir özetini verir misin? Teşekkürler.
Steam

@blasto, çeşitli veritabanlarından gelen verileri entegre etmeye ve farklı sistemlerden (esasen CRM veritabanları) verileri birleştirmek için yerleşik olasılıklı dizi eşleştirme araçlarından bazılarını kullanmaya çalışıyorduk. 5+ yıl önceydi, bu yüzden tüm detayları hatırlamıyorum.
luke

Bir .net mağazasıysanız ve veri ambarlama amacıyla veri taşıma işiyle ilgiliyseniz, SSIS yalnızca yeterince iyi biliyorsanız size yardımcı olacaktır. .Net gurusu olan ancak SSIS'i tam olarak anlamayan birçok insan gördüm (ve onları suçlamıyorum). SSIS kesinlikle yeterince iyi bilen bir kişi gerektirir, aksi takdirde verimsiz ve doğru şeyi yapamayan paketler yazarsınız.
rvphx

6

SSIS'in yeri vardır ve bu yer genel programlama veya saklı yordamların yerine geçme yeri değildir. ETL okulundan (Çıkar, Dönüştür ve Yükle) gelir ve kökeni orasıdır.

Eski ad (DTS, Veri Dönüştürme Hizmetleri) ve yeni ad (SSIS, Sql Sunucu Entegrasyon Hizmetleri), SQL Server veritabanını daha büyük süreçlere entegre etmek için verileri işlemek üzere tasarlanmış bir hizmet (veya hizmetler kümesi) olduğunu açıkça ortaya koymaktadır.


Bu cevabın nasıl bu kadar çok olumlu oy alacağını anlamıyorum. SSIS'in neden size bir programlama dilinin gücünü veremediğinden bahsetmiyor. Benim için hiçbir anlam ifade etmiyor. SSIS'in bir programlama diliyle eşleşemediğinin bir örneği hata ayıklamadır. Görünüşe göre, SSIS 2012 bunu değiştiriyor. Öyleyse, belki de, araç daha programcı dostu olma yolunda ilerliyor.
Steam

>> SSIS'in bir programlama diliyle eşleşemediği bir örnek ... Katılıyorum - bu bir programlama dili değil. İyi bir ETL aracıdır.
DaveE

4

Verilerinizi programlı olarak taşımak istiyorsanız, Rhino ETL'ye bakmak isteyebilirsiniz.

Ayrıca, SSIS'i bir CSV dosyasından birim test verilerini yüklemek gibi geliştirme ile ilgili basit veri görevleri için biraz fazla ilgili bulduğum için kendi çerçevem Fluent ETL üzerinde çalışıyorum .


Rhino ETL belirsizdir ve şu anda SO ile ilgili yalnızca 24 sorusu vardır - stackoverflow.com/questions/tagged/rhino-etl . Bilgi ve deneyime sahipseniz C # 'nin ETL için yeterince iyi olacağını düşünüyorum.
Steam

1
Rhino ETL'ye herhangi bir popüler alternatif var mı?
Steam

3

SSIS bir program değildir. SSIS'de birçok şey yapmak daha hızlıdır ve yönetici olarak çok güzel ayrıntılı ilerleme ve hata bilgileri elde edersiniz - bu, SSIS'in çözmesi gereken senaryolarda çok iyi olabilir, çünkü bazen işler ters gider ve yöneticinin çok şey yapması gerekir. bilgi.

Bununla birlikte, SSIS, kendi kendine açıklayıcı şeylere sahip değilseniz, gerçekten o kadar yararlı değildir - bunlar bir şey içindir, genel programlamaya çok fazla girmek onları iğrenç yapar.


2
SSIS'in gelişimi bir senaryoda nasıl hızlandırıp diğerlerinde yavaşlatabileceğine dair bir örnek verebilir misiniz?
Steam
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.