Apakah ada bahasa / antarmuka standar untuk ETL terprogram di SQL Server?

10

Saat ini saya sedang dalam proses membuat ETL untuk gudang data kami. Kami menggunakan SSIS 2008, tetapi kami mengalami masalah, yang terbesar adalah kesulitan dalam menggunakan kembali komponen. Kami memiliki paket terpisah untuk setiap tabel dan setiap paket mengambil input sejumlah variabel dari paket induk. Saat kami membuat perubahan pada variabel input ini, kami diharuskan masuk ke setiap paket (kami memiliki 15 atau lebih sekarang, tetapi jumlah ini akan tumbuh secara signifikan) dan memodifikasi paket untuk menangani perubahan tersebut. Ada juga masalah lain, termasuk ketidakmampuan untuk menjalankan SQL sewenang-wenang untuk ekstraksi kami, kemampuan logging yang buruk, dll.

Keseluruhan proses ini akan jauh lebih kuat jika ada cara mengembangkan ETL kami dalam kode, memungkinkan penggunaan kembali kode, perpustakaan umum, pengujian unit yang lebih baik, dll. Apakah ada standar bahasa / API ETL standar de facto untuk API Server? Saya mencari untuk menghindari alat GUI sebanyak mungkin.

Sunting: Saya harus menyebutkan latar belakang saya. Saya bukan DBA dan tidak memiliki pelatihan DBA formal (atau informal), pada dasarnya saya sudah memikirkan hal ini ketika saya melanjutkan, jadi ada kemungkinan saya mencoba melakukan hal-hal yang tidak pantas dengan SSIS atau mendekati ETL ini. memproyeksikan dari sudut yang salah. Selain itu, saya saat ini bekerja di pemerintah negara bagian, jadi solusi apa pun yang memerlukan pembelian paket perangkat lunak baru tidak berada dalam bidang kemungkinan.


Inilah salah satu tugas kita. Kami menggunakan Paket SSIS tunggal untuk memuat setiap tabel di gudang kami. Setiap paket Fakta dan paket Dimensi umumnya sama, mereka hanya berbeda dalam

  • Ekstraksi dari database sumber
  • Manipulasi dalam Aliran Data
  • Menggabungkan ke dalam tabel tujuan

Apa yang ingin saya lakukan (yang menurut saya sulit dilakukan di SSIS)

  • Muat kueri ekstraksi dari file teks. Ketika pengembang menulis dan menguji kueri ekstraksi mereka, saya tidak harus memanipulasi kueri mereka dengan cara apa pun sebelum SSIS menjalankannya dan saya tidak harus memotong dan menempelkan kueri ke objek Sumber DB.
  • Uji setiap komponen secara terpisah. Saya harus dapat menguji proses ETL lengkap untuk tabel individu secara terpisah, terlepas dari beban tabel lainnya.
  • Buat modifikasi pada logika bersama di satu tempat, tidak harus mengedit setiap paket individu. Setiap paket memuat data ke tabel audit dengan cara yang sama, jika saya ingin mengubah data yang dimuat diaudit, saya tidak ingin harus mengedit semua 15 paket (nomor ini akan menjadi jauh lebih besar dari waktu ke waktu).

Seluruh proses terasa seperti itu akan jauh lebih mudah untuk diterapkan dan lebih kuat jika dilakukan secara terprogram dengan penggunaan kode bersama yang tepat.

kubi
sumber
4
Saya BUKAN pengguna SSIS yang sangat besar tetapi dapat memahami persepsi kurva pembelajaran yang curam di sini. Saya mendorong Anda untuk melihat beberapa video / blog Andy Leonard, Jamie Thompson, Brian Knight yang ahli di bidang ini dan mendapatkan arahan. Lihatlah situs web sqlpass.org untuk mendapatkan video gratis dari KTT & sqlblog.com, pragmaticworks.com
Sankar Reddy
Saya tidak percaya kurva belajar adalah masalah. Saya tahu bagaimana melakukan tugas yang ingin saya lakukan di SSIS. Saya melihat ke dalam proses baru karena solusi yang saya temukan berulang, rapuh dan tidak perlu rumit.
kubi
Kubi, Jika Anda dapat menambahkan detail komponen mana yang Anda maksud, saya akan membawa seseorang yang mampu menjawabnya untuk Anda. Seperti saat ini, pertanyaan Anda terlalu luas untuk dijawab.
Sankar Reddy
4
@ Kubi - Anda telah menyentuh salah satu rahasia kecil kotor industri BI. Alat ETL sangat, sangat buruk pada abstraksi dan logika yang dapat digunakan kembali. Akibatnya skala mereka sangat buruk dengan meningkatnya kompleksitas domain.
ConcernedOfTunbridgeWells
1
Saya memilikinya pada otoritas yang cukup baik bahwa sekitar setengah dari pelanggan produk vertikal industri tertentu untuk perbankan dan asuransi (dibuat oleh perusahaan yang pernah Anda dengar dan biasanya disebut dengan warna tertentu) membuat keputusan teknis eksplisit untuk membangun Pemrosesan ETL dalam prosedur tersimpan cude, untuk alasan inilah.
ConcernedOfTunbridgeWells

Jawaban:

6

Setelah membaca ini saya langsung berpikir untuk merekomendasikan alat Varigence. Namun, saya melihat bahwa salah satu arsitek utama di Varigence, John Welch, tiba di sini sebelum saya.

Alat Varigence adalah lapisan abstraksi di atas SSIS. Keuntungan yang diberikan adalah kemampuan untuk mendefinisikan "barang" yang dapat digunakan kembali sehingga memberikan konsistensi di beberapa paket. Anda menentukan bagaimana paket harus disusun dan bagaimana mereka berbeda berdasarkan individu - output "dikompilasi" dari alat Varigence adalah paket SSIS.

Anggap saja sebagai Dynamic SQL untuk paket SSIS. Dengan GUI. Sangat keren.

jamiet
sumber
3

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 layak. Jauh lebih baik menghabiskan lebih banyak waktu untuk meningkatkan keterampilan C # daripada menghabiskan waktu yang sama untuk mempelajari SSIS - Anda akan mendapatkan lebih banyak pengembalian pelatihan Anda. Saya tidak perlu membahas banyak hal di sini - Ayende menulis ringkasan yang bagus yang tidak perlu saya tambahkan .

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

Selain itu, ada situasi ketika SSIS diam-diam gagal mengisi beberapa kolom dalam beberapa baris, hanya melewatkannya tanpa menaikkan 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.

Juga Rhino ETL tampaknya benar-benar keren.

Ada beberapa diskusi serupa tentang stackoverflow .

AK
sumber
2

Secara pribadi, saya menangani sebanyak mungkin proses ETL dalam SQL. Saya menggunakan SSIS untuk mengimpor dari sumber data aneh seperti situs FTP atau Excel, tapi itu hanya untuk mendapatkan data mentah ke dalam database di mana SQL melakukan sisanya.

Situasi saya saat ini relatif sederhana karena sebagian besar datanya ada di database MS SQL lainnya, yang dengannya saya dapat mengatur server yang tertaut. Jika Anda harus terhubung ke platform lain, saya sarankan menggunakan OPENQUERYdan BULK INSERT. Mereka dapat dibangun secara terprogram jika perlu, dan di antara keduanya, mereka dapat terhubung ke sebagian besar tipe data.

Saya menggunakan SQL karena itu yang saya tahu paling baik, tetapi memiliki beberapa keuntungan obyektif. Terutama, sudah digunakan: tidak perlu belajar atau membayar alat baru. Ini adalah keterampilan yang tersedia secara luas, yang seharusnya penting bagi atasan Anda jika tidak bagi Anda. Karena beroperasi dalam database, pencatatan mudah. Ini didasarkan pada kode teks biasa, sehingga mudah dicari dan berfungsi dengan baik dengan kontrol sumber. Ini sangat stabil, dengan sangat sedikit kemungkinan vendor mengubah hal-hal dan merusak kompatibilitas. Mungkin paling tidak secepat bahasa RBAR apa pun.

Jika Anda membutuhkan lebih banyak, saya sarankan .NET, jika hanya karena itu digunakan dalam SSIS dan SQLCLR. Saya menggunakan aplikasi C # untuk mengelola keseluruhan proses ETL - memulai sub-langkah, memantau hasilnya, mengirim email. Tetapi hampir semua ini bisa dilakukan dengan SQL Agent, dbmail, dll.

Apakah ada alasan Anda tidak dapat menggunakan SQL untuk ETL Anda? Apa yang tidak bisa dilakukannya untuk Anda?

Jon dari Semua Perdagangan
sumber
Memang kami menggunakan SSIS untuk membuang data mentah ke Temp DBs lalu kami menggunakan TSQL untuk menentukan bagaimana kami ingin T dan L itu.
Paul