Haruskah programmer menggunakan SSIS, dan jika demikian, mengapa? [Tutup]

94

Sebagai pengembang .NET, untuk alasan apa saya lebih memilih paket SSIS daripada menulis kode? Kami memiliki banyak paket dalam produksi di mana saya saat ini bekerja, dan mereka adalah mimpi buruk untuk "menulis" (mungkin menggambar?) Dan mempertahankannya. Setiap paket tampak seperti semangkuk spageti warna-warni dengan skrip C # dan VB.NET bercampur di titik-titik di mana abstraksi rusak. Untuk mengetahui apa yang masing-masing "Jalankan Tugas SQL" atau "Loop Selamanya", saya harus mengklik dua kali benda terkutuk itu dan menelusuri pohon nilai dan ekspresi literal, yang tersebar di banyak tab.

Saya berpikiran terbuka, jadi saya ingin tahu apakah ada pengembang bagus lainnya yang menganggap SSIS lebih produktif daripada hanya menulis beberapa kode. Jika menurut Anda SSIS lebih produktif, beri tahu saya alasannya.

Charles
sumber
4
tidak tahu bagaimana melakukannya, tetapi SSIS jauh lebih cepat daripada kode manual yang saya tulis untuk membuat gudang data. Ini adalah alat yang dirancang untuk pekerjaan itu - mencoba memecah tugas menjadi paket anak yang dijalankan dari paket master
Mr Shoubs
1
Tautan ke pertanyaan serupa: stackoverflow.com/q/690123/327165
Ilya Berdichevsky
5
Baru saja menemukan ini. Saya sedang bekerja untuk memelihara beberapa paket SSIS yang bermasalah dan menulis sebuah decompiler untuk mengekstrak pekerjaan yang berguna darinya ke dalam program C #. code.google.com/p/csharp-dessist
Ted Spence
5
Dari pengalaman saya, SSIS bisa menyakitkan jika Anda memiliki skrip "panjang" dan / atau "rumit" atau banyak skrip. Men-debug aplikasi konsol jauh lebih mudah. Di SSIS, Anda tidak dapat men-debug skrip Anda sendiri. Pesan kesalahan yang dihasilkan karena skrip bersifat samar dan Anda tidak dapat melihat baris persis yang menyebabkan kesalahan. IMO, jika kebutuhan proyek dapat dipenuhi dengan komponen SSIS standar, maka SSIS adalah cara yang tepat. Namun, untuk itu Anda perlu mengetahui batasan komponen SSIS. Misalnya, video ini menunjukkan kepada Anda mengapa "tugas kirim email" hampir tidak berguna - youtube.com/watch?v=IlUzkMPYDSk
Steam
3
pertanyaan ini memiliki 7 jawaban, jadi tidak mengundang perdebatan, argumen, jajak pendapat, atau diskusi panjang. Mengapa tidak tetap terbuka?
Michael Freidgeim

Jawaban:

94

Saya menggunakan SSIS setiap hari untuk memelihara dan mengelola gudang data dan kubus yang besar. Saya telah 100% intelijen bisnis dan pergudangan data selama dua tahun. Sebelumnya saya adalah seorang pengembang aplikasi .NET selama 10 tahun.

Nilai SSIS adalah sebagai mesin alur kerja untuk memindahkan data dari satu tempat ke tempat lain dengan mungkin beberapa transformasi terbatas dan percabangan bersyarat di sepanjang jalan. Jika paket Anda berisi banyak skrip maka tim Anda menggunakan SSIS untuk tugas yang salah atau merasa tidak nyaman dengan SQL atau telah membeli hype. Paket SSIS sangat sulit untuk di-debug. Komponen skrip adalah mimpi buruk absolut dan harus digunakan hanya untuk pemformatan, perulangan, atau sebagai upaya terakhir.

  1. Buat paket Anda tetap sederhana, tugas sql, dan tugas aliran data.
  2. Lakukan pekerjaan sebanyak mungkin di luar SSIS, sebaiknya di SQL
  3. Pertahankan variabel Anda dalam satu cakupan global
  4. Simpan SQL Anda dalam variabel atau prosedur penyimpanan, jangan pernah sejalan
  5. Simpan nilai variabel Anda di penyimpanan konfigurasi, sebaiknya database SQL
Kevin D. White
sumber
1
Dengan masalah yang saya alami dengan SSIS, saya akan memberikan jawaban yang lebih bias (seolah-olah Anda tidak dapat membedakan dari nada suara pertanyaan saya :)). Jawaban yang bagus, Kevin.
Charles
6
Bagaimana Anda bekerja dengan .NET selama 10 tahun jika dirilis pada tahun 2002?
Brady Holt
7
[kutipan] Microsoft memulai pengembangan pada .NET Framework pada akhir 1990-an yang awalnya dengan nama Next Generation Windows Services (NGWS). Pada akhir tahun 2000 versi beta pertama dari .NET 1.0 dirilis [/ quote] Begitulah, dia mungkin bekerja dengan versi beta.
nitefrog
Pertanyaan itu dijawab pada 2010, jadi lepaskan dua tahun BI, dan kemudian 10 tahun lagi, berikan 1998, dua tahun sebelum rilis beta yang Anda sebutkan. Jika tidak, jawaban yang bagus! :)
finoutlook
Ya, cakupan global masuk akal. Jika Anda membuatnya lokal dan ingin mengaksesnya di tempat lain, Anda memiliki masalah. Anda tidak bisa begitu saja mengubah cakupan lokal menjadi global. Anda harus banyak mengklik dan menghapus sebagai gantinya. Jika Anda memiliki 10-15 penduduk setempat, ini menjadi sakit.
Steam
52

Saya mencoba menggunakan SSIS beberapa kali, dan menyerah. IMO jauh lebih mudah untuk melakukan semua yang saya butuhkan di C #. SSIS terlalu kompleks, memiliki terlalu banyak gotcha, dan itu tidak sepadan. Jauh lebih baik menghabiskan lebih banyak waktu untuk meningkatkan keterampilan C # daripada menghabiskan waktu yang sama untuk mempelajari SSIS - Anda akan mendapatkan lebih banyak keuntungan dari pelatihan Anda.

Juga menemukan dan memelihara fungsionalitas dalam solusi VS jauh lebih mudah. Pengujian unit dengan VS itu mudah. Yang perlu saya lakukan adalah memeriksa sumber di Subversion, dan memverifikasi bagaimana sumber itu dimuat. Paket SSIS pengujian unit sangat terlibat untuk membuatnya lebih ringan.

Selain itu, ada situasi ketika SSIS secara diam-diam gagal mengisi beberapa kolom di beberapa baris, hanya melewatinya tanpa memunculkan pengecualian. Kami menghabiskan banyak waktu untuk memecahkan masalah dan mencari tahu apa yang sedang terjadi. Mengembangkan solusi alternatif dalam C # membutuhkan waktu kurang dari satu jam, dan bekerja tanpa masalah selama dua tahun.

AK
sumber
Terima kasih atas poin Anda Alex. Berikut adalah contoh dari apa yang menurut saya mungkin sebuah gotcha - stackoverflow.com/questions/21616435/… .
Steam
2
Apakah ada daftar semua topik C # / pemrograman yang HARUS diketahui oleh pengembang ETL? Misalnya. LINQ, SqlDataReader, DataTable, dll. Saya juga merasa bahwa SSIS tidak baik untuk tugas yang kompleks. Jika Anda memiliki proyek / tugas "salin-tempel" yang mudah, SSIS mungkin alat terbaik.
Steam
@blasto sudahkah Anda mencoba Rhino ETL: ayende.com/blog/3102/rhino-etl-2-0
AK
Alex, jawaban Jerome juga menyarankan ETL Rhino. Sepertinya tidak jelas bagi saya. Jadi, saya akan ragu untuk menggunakannya karena kurangnya dokumentasi, dukungan dan tutorial. Selain itu, sepertinya hanya satu pengembang yang mengerjakannya. Itu mengurangi kepercayaan saya pada alat tersebut. Saya akan mencoba ini untuk bersenang-senang atau karena penasaran, tetapi saya tidak dapat menggunakan ini untuk proyek nyata. Terima kasih.
Steam
Jika seseorang menginginkan tutorial tentang Rhino ETL (dengan C # murni), inilah satu - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam
14

Menurut pendapat saya - SSIS hanya untuk operasi ETL dan tidak boleh mengandung logika di luar cakupan tersebut.

Christoph
sumber
8
ETL = Ekstrak Beban Transformasi
Christoph
3
Itulah yang saya rasakan. Dalam kasus kami, kami menggunakan SSIS untuk melakukan hal-hal seperti email (atau SFTP) CSV yang berisi info harga. Percabangan, skrip yang disematkan, dll cukup mengerikan. Jika hanya memindahkan beberapa data dengan SSIS, itu mungkin tidak akan terlalu buruk.
Charles
1
Saya pikir jawaban Anda bisa lebih mendalam.
Steam
3
Bisakah T di ETL tidak melibatkan logika? Hanya pemikiran ...
cs0815
Jika hanya terkait dengan pembentukan / perutean data, tentu. Tetapi saya akan menghindari logika bisnis apa pun.
Christoph
11

Saya memiliki pengalaman malang mengerjakan sebuah proyek di mana kami pikir SSIS akan menjadi solusi yang cukup baik untuk mengumpulkan dan menggabungkan data dari beberapa sumber. Hal yang disayangkan adalah itu berfungsi dengan baik pada awalnya tetapi kemudian persyaratan berubah dan kami (akhirnya) menyadari bahwa itu adalah alat yang salah.

mungkin kami hanya menggunakannya secara tidak benar tetapi kami mengalami banyak kesulitan jika kami pernah mengubah skema kami dan akhirnya kami hanya menggunakan kembali definisi ORM kami dari ujung depan untuk menulis alat khusus di C # untuk melakukan ini. Karena kami sudah memiliki model data, ini sangat mudah. jelas YMMV dan saya sama sekali bukan ahli SSIS, tetapi dalam kasus yang satu ini SSIS menyebabkan banyak pekerjaan duplikat dan sakit kepala ketika hanya menyingsingkan lengan baju dan 'handcoding' itu lebih mudah dari yang diharapkan.

Jadi saya akan banyak memikirkan tentang fleksibilitas ketika mempertimbangkan SSIS.

luke
sumber
7
Saya berbagi beberapa perasaan yang sama. Mudah untuk merefaktor kode ... tidak begitu banyak dengan DSL visual.
Charles
Luke, dapatkah Anda memberi kami garis besar persyaratan proyek Anda? Terima kasih.
Steam
@blasto kami mencoba mengintegrasikan data dari beberapa database dan menggunakan beberapa utilitas pencocokan string probabilistik bawaan untuk menggabungkan data dari sistem yang berbeda (pada dasarnya database CRM). Itu 5+ tahun yang lalu jadi saya tidak ingat semua detailnya.
Lukas
Jika Anda adalah toko bersih dan terlibat dalam pemindahan data untuk keperluan pergudangan data, SSIS hanya akan membantu Anda jika Anda mengetahuinya dengan cukup baik. Saya telah melihat banyak orang yang merupakan guru .net tetapi gagal untuk sepenuhnya memahami SSIS (dan saya tidak menyalahkan mereka). SSIS benar-benar membutuhkan orang yang mengetahuinya dengan cukup baik jika tidak, Anda akan berakhir dengan menulis paket yang tidak efisien dan tidak dapat melakukan hal yang benar.
rvphx
6

SSIS memiliki tempatnya, dan tempat itu bukanlah pemrograman umum atau sebagai pengganti prosedur tersimpan. Itu berasal dari sekolah ETL (Ekstrak, Transformasi, dan Muat) dan di situlah kekuatannya berada.

Nama lama (DTS, Layanan Transformasi Data) dan nama baru (SSIS, Layanan Integrasi Server Sql) keduanya menjelaskan bahwa ini adalah layanan (atau kumpulan layanan) yang dirancang untuk memanipulasi data untuk mengintegrasikan database SQL Server ke dalam proses yang lebih besar.

DaveE
sumber
Saya tidak melihat bagaimana jawaban ini harus mendapatkan banyak suara positif. Tidak disebutkan mengapa SSIS tidak dapat memberi Anda kekuatan bahasa pemrograman. Tidak masuk akal bagiku. Salah satu contoh di mana SSIS gagal untuk mencocokkan bahasa pemrograman adalah debugging. Ternyata, SSIS 2012 mengubah itu. Jadi, mungkin saja, alat ini sedang dalam perjalanan untuk menjadi lebih ramah programmer.
Steam
>> Salah satu contoh di mana SSIS gagal untuk mencocokkan bahasa pemrograman ... Saya setuju-itu bukan bahasa pemrograman. Ini adalah alat ETL yang layak.
DaveE
4

Jika Anda ingin memindahkan data Anda secara terprogram, Anda mungkin ingin melihat Rhino ETL.

Saya juga mengerjakan kerangka kerja saya sendiri, Fluent ETL , karena menurut saya SSIS agak terlalu rumit untuk tugas data sederhana yang terkait dengan pengembangan, seperti memuat data pengujian unit dari file CSV.

Jerome
sumber
Rhino ETL tidak jelas dan hanya memiliki 24 pertanyaan tentang SO saat ini - stackoverflow.com/questions/tagged/rhino-etl . Saya pikir C # akan cukup baik untuk ETL, jika Anda memiliki pengetahuan dan pengalaman.
Steam
1
Apakah ada alternatif populer selain Rhino ETL?
Steam
3

SSIS bukanlah program. Banyak hal yang lebih cepat dibuat di SSIS, dan Anda mendapatkan kemajuan mendetail yang sangat bagus dan informasi kesalahan sebagai admin - yang bisa sangat bagus dalam skenario SSIS yang dimaksudkan untuk diselesaikan, karena terkadang ada yang salah dan admin membutuhkan banyak informasi.

Yang sedang berkata, SSIS tidak terlalu berguna jika Anda tidak memiliki barang-barang itu sendiri edxplanatory - mereka dimaksudkan untuk sesuatu, memasukkan terlalu banyak ke dalam pemrograman umum membuat mereka sial.

TomTom
sumber
2
Dapatkah Anda memberi kami contoh bagaimana SSIS dapat mempercepat pengembangan di satu skenario dan memperlambat di skenario lain?
Steam