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.
sumber
Jawaban:
Ada alat yang memungkinkan ini - http://www.varigence.com/products/biml.html
Ada versi komersial, tetapi kami juga menyertakan beberapa fungsi BIML di BIDS Helper, alat gratis. http://bidshelper.codeplex.com/
Saya senang menjawab pertanyaan apa pun yang mungkin Anda miliki tentang itu.
Ini adalah alat yang disediakan perusahaan saya.
sumber
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.
sumber
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 .
sumber
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
OPENQUERY
danBULK 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?
sumber