ETL: mengekstraksi dari 200 tabel - aliran data SSIS atau T-SQL khusus?

12

Berdasarkan analisis saya, model dimensi lengkap untuk gudang data kami akan membutuhkan ekstraksi dari lebih dari 200 tabel sumber. Beberapa tabel ini akan diekstraksi sebagai bagian dari beban tambahan dan lainnya akan menjadi beban penuh.

Untuk diketahui, kami memiliki sekitar 225 sumber basis data dengan skema yang sama.

Dari apa yang saya lihat, membangun aliran data sederhana dalam SSIS dengan sumber OLE DB dan tujuan OLE DB membutuhkan kolom dan tipe data yang harus ditentukan pada waktu desain. Ini berarti bahwa saya pada akhirnya akan berakhir dengan lebih dari 200 aliran data hanya untuk ekstraksi saja.

Dari perspektif rawatan, ini menurut saya masalah besar. Jika saya perlu melakukan beberapa perubahan besar pada kode ekstraksi, saya harus memodifikasi 200 aliran data yang berbeda.

Opsi alternatif, saya menulis skrip kecil yang membaca sumber database, nama tabel dan kolom yang ingin saya ekstrak dari satu set tabel metadata. Kode berjalan dalam beberapa loop dan menggunakan SQL dinamis untuk mengekstrak dari tabel sumber melalui server yang terhubung dan OPENQUERY.

Berdasarkan pengujian saya, ini masih tidak secepat menggunakan aliran data SSIS dengan sumber dan tujuan OLEDB. Jadi saya bertanya-tanya alternatif apa yang saya miliki. Pikiran sejauh ini meliputi:

  1. Menggunakan EZAPI untuk secara sistematis menghasilkan paket SSIS dengan aliran data sederhana. Tabel dan kolom untuk mengekstrak akan berasal dari tabel metadata yang sama yang disebutkan sebelumnya.
  2. Beli perangkat lunak pihak ketiga (komponen aliran data dinamis)

Apa cara terbaik untuk mendekati ini? Ketika datang ke pemrograman NET. Saya seorang pemula, jadi waktu yang dibutuhkan untuk meningkatkan hanya dengan dasar-dasar juga menjadi perhatian.

8kb
sumber
1
Karena semua 225 database memiliki skema yang sama, apakah mungkin untuk mempertahankan pandangan yang menyatukan data dari semua 225 database dan mengarahkan paket SSIS pada saat itu? Meskipun ini mungkin tampak seperti alat clobbering dan tidak akan selalu berfungsi secara ajaib, itu terdengar jauh lebih mudah untuk dikelola daripada 225 paket SSIS (bahkan jika Anda mengelola beberapa otomatisasi di sana). Anda juga bisa setengah jalan dan membangun tampilan untuk setiap set database, mis. Database 1-25, 26-50, 51-75, dll.
Aaron Bertrand
Basis data berada di beberapa server yang saya pikir membuatnya lebih rumit. Saya sebenarnya telah mencoba membuat tampilan tabel yang berbeda pada kotak pengembangan saya terhadap 225 database dan membaca data sangat lambat.
8kb
1
Yah Anda hanya ingin tampilan untuk referensi database di server yang sama. Dan lagi, satu tampilan terhadap 225 tabel tidak akan tampil secara ajaib, tapi saya pikir Anda masih bisa membagi dan menaklukkan dan tidak memiliki 225 aliran data.
Aaron Bertrand

Jawaban:

12

Saya tidak ingin memiliki 200 aliran data dalam satu paket. Waktu yang dibutuhkan hanya untuk membuka dan memvalidasi akan membuat Anda menjadi tua sebelum waktu Anda.

EzAPI memang menyenangkan tetapi jika Anda baru mengenal .NET dan SSIS, oh tidak, Anda tidak menginginkannya. Saya pikir Anda akan menghabiskan lebih banyak waktu belajar tentang model objek SSIS dan mungkin berurusan dengan COM daripada benar-benar menyelesaikan pekerjaan.

Karena saya malas, saya akan pasang BIML sebagai opsi gratis yang tidak Anda daftarkan. Dari jawaban di SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604

  • Biml adalah binatang yang menarik. Varigence akan dengan senang hati menjual lisensi kepada Anda kepada Mist, tetapi itu tidak diperlukan. Yang Anda butuhkan adalah BIDSHelper dan kemudian telusuri BimlScript dan cari resep yang mendekati kebutuhan Anda. Setelah Anda memilikinya, klik tombol menu konteks sensitif di BIDSHelper dan whoosh, itu menghasilkan paket.

Saya pikir itu mungkin pendekatan untuk Anda juga. Anda menentukan BIML Anda yang menjelaskan bagaimana perilaku paket Anda dan kemudian menghasilkannya. Dalam skenario yang Anda jelaskan di mana Anda membuat perubahan dan harus memperbaiki paket N, tidak, Anda memperbaiki definisi Anda tentang masalah dan membuat ulang paket.

Atau jika Anda sudah cukup terbiasa dengan kerangka kerja maka gunakan sesuatu seperti EzAPI untuk pergi dan memperbaiki semua barang yang rusak. Heck, karena Anda telah menandai ini sebagai 2005, Anda juga bisa mencoba PacMan jika Anda perlu melakukan modifikasi massal untuk paket yang ada.

Pertimbangan Desain SSIS

Secara umum, saya mencoba untuk membuat paket saya fokus pada penyelesaian satu tugas (memuat data penjualan). Jika itu membutuhkan 2 aliran data, ya sudah. Yang saya benci mewarisi adalah paket dari panduan ekspor impor dengan banyak aliran data yang tidak terkait dalam satu paket. Uraikan mereka menjadi sesuatu yang memecahkan masalah yang sangat spesifik. Itu membuat peningkatan di masa depan menjadi lebih tidak berisiko karena luas permukaan berkurang. Manfaat tambahan adalah bahwa saya dapat mengerjakan pemuatanDimProducts sementara antek saya berurusan dengan SnowflakeFromHellpaket pemuatan .

Kemudian gunakan paket master untuk mengatur alur pekerjaan anak. Saya tahu Anda menggunakan 2005 tetapi SQL Server 2012 rilis SSIS adalah piyama kucing. Saya suka model penyebaran proyek dan integrasi ketat yang memungkinkan antar paket.

TSQL vs SSIS (cerita saya)

Adapun pendekatan TSQL murni, dalam pekerjaan sebelumnya, mereka menggunakan pekerjaan 73 langkah untuk mereplikasi semua data Informix mereka ke dalam SQL Server. Biasanya membutuhkan waktu sekitar 9 jam tetapi bisa mencapai 12 atau lebih. Setelah mereka membeli SAN baru, turun menjadi sekitar 7+ jam. Proses logis yang sama, ditulis ulang dalam SSIS adalah sub 2 jam yang konsisten. Mudah faktor terbesar dalam mengemudi saat itu adalah paralelisasi "bebas" yang kami dapatkan menggunakan SSIS. Pekerjaan Agen menjalankan semua tugas itu secara serial. Paket master pada dasarnya membagi tabel menjadi unit pemrosesan (5 set paralel tugas berseri dari "run replicate table 1", table 2, dll) di mana saya mencoba untuk membagi ember ke dalam kuasi unit kerja berukuran sama. Ini memungkinkan 60 atau lebih tabel referensi pencarian untuk diisi dengan cepat dan kemudian pemrosesan melambat saat masuk ke "

Kelebihan lainnya bagi saya menggunakan SSIS adalah saya mendapatkan konfigurasi "bebas", masuk dan akses ke .NET libraries untuk data kuadrat, saya perlu bash ke dalam lubang bundar. Saya pikir akan lebih mudah untuk mempertahankan (melewatkan pemeliharaan) paket SSIS daripada pendekatan TSQL murni berdasarkan sifat grafis dari binatang itu.

Seperti biasa, jarak tempuh Anda mungkin bervariasi.

billinkc
sumber
BIML terlihat sangat menarik. Saya juga mempertimbangkan untuk membuat setiap aliran data sebagai paket terpisah dan kemudian meminta mereka dipanggil melalui paket master. Apakah Anda pikir itu lebih baik? Juga, ingin tahu apakah Anda memiliki pendapat tentang pendekatan T-SQL. Ini lebih lambat tapi saya sudah mengujinya dan itu akan berhasil.
8kb
Saya telah memperbarui tanggapan saya dengan pemikiran tentang desain dan pendekatan ETL tsql murni
billinkc
0

Anda menyebutkan Anda memiliki 200 tabel sumber dan 225 database. Saya mengasumsikan 200 tabel sumber adalah hitungan semua tabel dari semua 225 database (karena jika Anda memiliki 200 tabel di setiap database yang akan menempatkan jumlah tabel total Anda menjadi 45000). Anda juga menyebutkan bahwa skema database sama untuk 225 database.

Anda bisa membangun paket SSIS hanya untuk 1 database pertama dan kemudian ketika Anda menjadwalkan pekerjaan Anda, Anda bisa mengubah string koneksi database menggunakan konfigurasi paket (jika SQL 2005, maka Anda akan menggunakan model penyebaran paket). Seperti disebutkan dalam respons sebelumnya, SQL 2012 memiliki cara baru untuk mengonfigurasi parameter Anda menggunakan model penyebaran proyek.

Anda dapat memperoleh informasi lebih lanjut tentang konfigurasi paket dengan SSIS di sini http://www.sql-server-performance.com/2007/package-configuration-2005/

Anda dapat memperoleh informasi lebih lanjut tentang menggunakan parameter proyek dari sini, /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-under-dvironment-environment-configurat

Harb
sumber