Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Beban Tambahan di SSIS

Orang-orang semakin terburu-buru. Mereka ingin data mereka hampir sekarang. Dan terlebih lagi, data semakin besar dan besar. Jadi, Anda tidak dapat menggunakan teknik lama yang baik karena "cukup baik". Itu harus cepat. Dan langkah-langkah ETL bukanlah pengecualian. Di sinilah beban tambahan berperan. Dan jika Anda berada di halaman ini, Anda mungkin mencari beban tambahan di SSIS.

Dan itulah fokus kami dalam artikel ini. Kami akan membuat perbandingan dan contoh untuk menjelaskan beban data tambahan di SSIS langkah demi langkah. Dan yakinlah itu tidak akan membuat Anda pusing memikirkan hal ini.

Inilah yang tersedia untuk Anda:

  • Apa yang dimaksud dengan beban penuh dan beban tambahan di ETL?
  • Apa yang dimaksud dengan beban data tambahan di SSIS?
  • Perbedaan antara beban penuh dan beban tambahan di SSIS
  • Pembebanan tambahan di SSIS menggunakan CDC atau Ubah Pengambilan Data
  • Pemuatan tambahan di SSIS menggunakan kolom DateTime
  • Cara melakukan beban tambahan di SSIS menggunakan Pencarian
  • Alat terbaik untuk memuat data SSIS

Setiap bagian akan memiliki subbagian. Anda dapat melompat ke topik yang Anda butuhkan dengan mengeklik tautan.

Sebelum kita mulai dengan contoh, mari kita bandingkan beban tambahan dengan kebalikannya, beban penuh.

Apa itu Full Load dan Incremental Load di ETL

Apa pun alat ETL yang Anda gunakan, Beban Penuh dan Tambahan memiliki arti yang sama. Mari kita jelaskan di bawah ini.

Beban Penuh dalam ETL

Seperti namanya, Full Load di ETL memuat SEMUA data dari sumber ke tujuan. Tabel target dipotong sebelum memuat semuanya dari sumbernya. Itu sebabnya teknik ini juga dikenal sebagai Beban Merusak . Teknik ini juga lebih mudah dilakukan. Dan ini juga memastikan integritas data tertinggi. Tapi ukuran data Anda hari ini lebih besar dari kemarin. Jadi, jika Anda menggunakan ini pada data yang terus bertambah, prosesnya akan menjadi lebih lambat dari waktu ke waktu.

Kasus Penggunaan Beban Penuh ETL

  • Ukuran data sumber kecil dan tidak akan tumbuh secara signifikan di tahun-tahun mendatang. Contohnya termasuk daftar warna, beberapa kategori/klasifikasi, daftar negara dan kota, dan banyak lagi.
  • Sulit untuk mengatakan mana yang baru atau diubah dalam sumbernya.
  • Data harus sama persis dari sumber ke tujuan
  • Riwayat data tidak relevan dan lebih sering ditimpa

Pemuatan Tambahan dalam ETL

Sementara itu, Incremental Load juga sesuai dengan namanya. Hanya data yang diubah yang akan dimuat dari sumber ke tujuan. Ini dilakukan secara bertahap dari waktu ke waktu. Yang tidak berubah akan tetap apa adanya. Ini agak sulit dilakukan. Anda perlu memastikan bahwa semua perubahan telah dikumpulkan dan dimuat ke tujuan. Tapi ini akan berjalan lebih cepat daripada Full Load pada data yang sangat besar.

Kasus Penggunaan Beban Tambahan ETL

  • Ukuran data sangat besar dan kueri akan sangat lambat untuk kumpulan hasil yang besar
  • Perubahan mudah ditanyakan
  • Data yang dihapus harus disimpan di tujuan, seperti sistem audit

Apa itu Beban Tambahan di SSIS

Konstituen dasar dari beban tambahan di SSIS ditunjukkan pada Gambar 1.

Pemuatan tambahan di SSIS cenderung menjadi lebih kompleks tergantung pada kebutuhan Anda. Tetapi "kartu resep" sederhana pada Gambar 1 mencakup apa yang Anda butuhkan untuk "memasak" data secara bertahap. Menangkap perubahan dalam data adalah bagian yang menantang. Anda dapat mengacaukan tujuan jika Anda tidak hati-hati.

Di bagian berikutnya, Anda akan melihat bagaimana melakukan beban tambahan di SSIS dengan contoh. Ini termasuk menggunakan ChangeData Capture (CDC), kolom DateTime, dan pencarian. Anda juga akan melihat bagaimana ini dilakukan menggunakan komponen Devart SSIS.

Mari kita bandingkan beban tambahan dengan beban penuh di SSIS di bagian berikutnya.

Perbedaan Antara Full Load dan Incremental Load di SSIS

Anda sudah melihat seperti apa beban tambahan di SSIS (Gambar 1). Sementara itu, berikut tampilan SSIS Full load pada Gambar 2 di bawah ini.

Perbedaan antara beban penuh dan beban tambahan di SSIS adalah dalam desain paket. Desain beban penuh membutuhkan lebih sedikit komponen yang diseret ke dalam paket SSIS. Ini sangat sederhana, hanya ada sedikit pemikiran yang terlibat. Itu sebabnya karena rasa produktivitas yang salah, beberapa pengembang cenderung menggunakan teknik ini hampir sepanjang waktu.

Tetapi menjalankan paket desain beban penuh setiap malam tidak disarankan untuk data besar, katakanlah 15 TB. Apakah Anda pikir itu akan selesai tepat waktu sebelum pengguna tiba di pagi hari? Itu tidak akan terjadi karena Anda mencoba memasukkan kembali catatan yang tidak berubah sama sekali. Jika itu sekitar 70% dari data, Anda memerlukan lebih banyak waktu henti bergantung pada sumber daya server.

Itu tidak bisa diterima.

Jadi, semakin Anda perlu menggunakan beban tambahan pada skenario ini. Di bagian berikut, Anda akan mempelajari cara memuat data lebih cepat menggunakan beban tambahan.

Incremental Load inSSIS Menggunakan CDC

Pertama, mari pertimbangkan untuk menggunakan Change Data Capture (CDC). Perhatikan bahwa dari sini ke 3 contoh berikutnya, kita akan menggunakan contoh sederhana. Jadi, desain paket tidak akan mengaburkan tujuan.

Sebelum kita mulai dengan contoh, bagian ini akan membahas hal berikut:

  • Pertama, cara mengaktifkan CDC di database dan tabel
  • Kemudian, buat paket SSIS untuk beban tambahan SSIS menggunakan CDC
  • Akhirnya, jalankan dan periksa hasilnya

Gambar 3 menunjukkan konstituen dari contoh ini.

Ubah Data Capture (CDC) merekam sisipan, penghapusan, dan pembaruan dalam sebuah tabel. Sebelum Anda dapat membuat contoh ini berfungsi, Anda memerlukan database dan tabel yang dikonfigurasi untuk CDC.

Cara Mengaktifkan CDC di aDatabase dan Tabel

Pengaturan database dan tabel default ke tanpa CDC. Untuk membuat database CDC-enabled, berikut sintaks T-SQL:

-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

Kemudian, untuk memeriksa apakah CDC memang diaktifkan, jalankan ini:

select name from sys.databases
where is_cdc_enabled=1

Jika nama database yang Anda aktifkan untuk CDC muncul, Anda siap melakukannya. Basis data Anda sekarang mendukung CDC.

Tapi itu tidak berakhir di sini. Anda perlu menyatakan tabel apa yang ingin Anda lacak untuk setiap perubahan. sp_cdc_enable_table akan melakukan trik. Di bawah ini adalah contohnya.

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

Menjalankan kode di atas akan menghasilkan pesan serupa di bawah ini:

Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Pesan-pesan itu adalah 2 pekerjaan Agen Server SQL baru yang dibuat setelah mengaktifkan tabel untuk CDC. Itu sebabnya Anda memerlukan SQL Server Agent untuk membuat CDC berfungsi. Lihat tangkapan layar pada Gambar 4.

Melakukan penyisipan, penghapusan, dan pembaruan pada sportsCarSales tabel akan secara otomatis merekam perubahan ke tabel lain bernama cdc.dbo_sportsCarSales_CT . Tabel ini memiliki kolom seperti aslinya. Lihat tangkapan layar pada Gambar 5.

_$operasi kolom di tabel kiri sangat menarik. Nilai yang mungkin untuk kolom ini adalah 1(Hapus), 2 (Sisipkan), 3, dan 4 (Perbarui). Pembaruan menggunakan 2 nilai:satu untuk nilai kolom sebelum pembaruan (itu 3). Dan yang lainnya untuk nilai kolom setelah pembaruan (itu 4). Anda dapat memeriksa kolom ini saat memeriksa nilai sebelum menjalankan paket SSIS Anda. CDCSource dan Pembagi CDC komponen menggunakan tabel ini saat mengidentifikasi perubahan. Selengkapnya tentang ini di bagian berikutnya.

Membuat Paket SSIS untuk Beban Tambahan SSIS Menggunakan CDC

Berikut adalah langkah-langkah dalam membuat paket SSIS dengan beban tambahan menggunakan CDC. Ini mengasumsikan Anda sudah memiliki paket kosong di Visual Studio 2019. Tujuan kami di sini adalah memuat baris dari sportsCarSales tabel ke dalam FactSportsCarSales tabel fakta di gudang data.

Berikut ringkasan langkah-langkahnya:

LANGKAH 1. Buat 2 manajer koneksi database
LANGKAH 2. Seret 2 Tugas Kontrol CDC ke Aliran Kontrol
LANGKAH #3. Seret Tugas Aliran Data dan Hubungkan ke Tugas Kontrol CDC

LANGKAH #1. Buat 2 Manajer Koneksi Database

Kami membutuhkan 2 koneksi database di sini. Salah satunya adalah koneksi ADO.Net yang seharusnya mengarah ke database yang mendukung CDC. Dan kemudian, buat Koneksi OLE DB ke gudang data sebagai tujuan. Keduanya adalah database SQL Server 2019. Lihat Gambar 6 dan 7 yang sesuai. Dalam contoh ini, kedua database berada di mesin yang sama. Dan kami menggunakan otentikasi Windows untuk terhubung.

Jadi, di Pengelola Koneksi jendela, klik kanan dan pilih Koneksi ADO.Net Baru . Kemudian, isikan server, otentikasi, dan pengaturan database seperti yang terlihat pada Gambar 6 di bawah ini.

Kemudian, buat koneksi OLE DB ke gudang data. Di jendela Connections Manager, klik kanan dan pilih New OLE DB Connection . Kemudian, isi server, otentikasi, dan nama database. Tentukan gudang data di sini.

LANGKAH #2. Seret 2 Tugas Kontrol CDC ke Alur Kontrol

Ada 2 hal yang perlu kita lakukan setelah menyeret Tugas Kontrol CDC di Alur Kontrol.

Tandai CDC Mulai

Pertama, kita perlu mengonfigurasi Tugas Kontrol CDC untuk Menandai CDC Mulai. Dan kemudian, buat tabel Negara Bagian CDC. Ini dapat dilakukan dalam satu jendela konfigurasi. Lihat Gambar 8 di bawah ini.

Mengikuti langkah-langkah bernomor pada Gambar 9, berikut rinciannya.

  1. Pilih koneksi ADO.Net yang kita buat pada Gambar 6.
  2. Lalu, pilih Tandai CDC mulai .
  3. Klik Baru untuk membuat variabel status CDC. Kemudian, sebuah jendela akan muncul. Klik Oke untuk membuat nama variabel default User::CDC_State .
  4. Pilih koneksi ADO.Net agar kami dapat menyimpan status CDC di database tersebut.
  5. Klik Baru untuk membuat tabel untuk menyimpan status. Script sudah dibuat untuk Anda. Jadi, cukup klik Jalankan di jendela berikutnya.
  6. Kemudian, pilih CDC_State sebagai nama negara bagian.
  7. Terakhir, klik OK .

Setelah mengonfigurasi Tugas Kontrol CDC ini, jalankan paket. Anda belum akan melihat rekaman yang disalin ke database lain. Tetapi tabel status (dbo.cdc_state ) akan diisi dengan nilai awal.

Dari sini, Anda dapat memilih untuk menonaktifkan Tugas Kontrol CDC ini atau menimpanya lagi dengan nilai baru di tugas berikutnya.

Dapatkan Rentang Pemrosesan

Entah Anda menyeret Tugas Kontrol CDC baru ke Alur Kontrol atau menimpa yang sebelumnya. Konfigurasinya sama seperti pada Gambar 9, kecuali untuk Operasi Kontrol CDC (#2). Kali ini, pilih Dapatkan rentang pemrosesan . Kemudian, klik Oke . Hubungkan ini ke Tugas Aliran Data di LANGKAH #3 nanti.

Tandai Rentang yang Diproses

Konfigurasikan Tugas Kontrol CDC lainnya seperti yang pertama, kecuali kali ini, pilih Tandai rentang yang diproses untuk Operasi Kontrol CDC. Hubungkan Tugas Aliran Data di LANGKAH #3 ke ini.

Langkah #3. Seret Tugas Aliran Data dan Hubungkan ke Tugas Kontrol CDC

Tugas Aliran Data ini akan melakukan ekstraksi dan pemuatan seperti yang terlihat pada Gambar 3 tadi. Sebelum kita menyelami detail setiap langkah, berikut ringkasannya:

A. Tambahkan Sumber CDC
B. Tambahkan Splitter CDC dan hubungkan ke Sumber CDC
C. Tambahkan Perintah OLE DB untuk menghapus catatan
D. Tambahkan Tujuan DB OLE untuk memasukkan catatan
E. Tambahkan Perintah OLE DB lain untuk memperbarui catatan

Sekarang, mari selami.

A. Tambahkan Sumber CDC

Seret Sumber CDC komponen dengan pengaturan yang ditunjukkan pada Gambar 9 di bawah.

Mengikuti langkah-langkah bernomor pada Gambar 9, berikut rinciannya:

  1. Pertama, pilih koneksi ADO.Net yang kita buat pada Gambar 6.
  2. Kemudian, pilih tabel yang mendukung CDC sportsCarSales .
  3. Pilih contoh pengambilan dbo_SportsCarSales .
  4. Kemudian, pilih Bersih untuk mode pemrosesan CDC. Ini hanya akan mengembalikan perubahan bersih. Untuk penjelasan rinci tentang setiap mode pemrosesan, lihat tautan ini. Anda juga dapat mengeklik Pratinjau untuk melihat baris apa yang akan disertakan.
  5. Pilih variabel Status CDC yang kita buat sebelumnya (Gambar 9).
  6. Terakhir, klik Oke .
B. Tambahkan Pemisah CDC dan Hubungkan ke Sumber CDC

Satu-satunya persyaratan CDC Splitter adalah Sumber CDC mendahuluinya. Jadi, hubungkan Sumber CDC sebelumnya untuk komponen ini. Ini akan memisahkan perubahan pada sisipan, pembaruan, dan penghapusan.

C. Tambahkan Perintah OLE DB untuk Menghapus Catatan

Pertama, Anda perlu memberi label pada komponen ini sebagai Delete Records (Lihat Gambar 3). Kemudian, hubungkan ini ke CDC Splitter. Saat prompt muncul, pilih DeleteOutput untuk output dan klik OK .

Kemudian, konfigurasikan Perintah OLE DB Connection Managers tab. Lihat Gambar 10.

Selanjutnya, di Properti Komponen tab, tentukan perintah DELETE untuk SQLCommand Properti. Perintahnya harus seperti ini:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Lihat tangkapan layar pada Gambar 11 di bawah.

Tanda tanya akan membuat parameter untuk SalesID . Setiap ID Penjualan nilai yang berasal dari CDCSplitter akan digunakan untuk menghapus baris di FactSportsCarSales tabel.

Kemudian, di Pemetaan Kolom tab, petakan SalesID kolom tabel ke parameter (Param_0 ) Lihat Gambar 12.

Terakhir, klik Oke.

D. Tambahkan Tujuan OLE DB untuk Menyisipkan Catatan

Pertama, seret Tujuan OLE DB . Kemudian, beri label Sisipkan Catatan . Hubungkan ini ke CDC Splitter . Kemudian, pilih InsertOutput ketika jendela prompt muncul. Lihat Gambar 14 untuk pengaturan dasar.

Mengikuti langkah-langkah bernomor pada Gambar 13, di bawah ini adalah detailnya:

  1. Pertama, pilih OLE DB Connection yang kita buat pada Gambar 7.
    Kemudian, pilih FactSportsCarSales tabel fakta.
  2. Terakhir, klik OK .
E. Tambahkan Perintah OLE DB untuk Memperbarui Catatan

Seret Perintah OLE DB lainnya dan beri label Perbarui Catatan. Kemudian, sambungkan ke CDC Splitter . Ini akan secara otomatis memilih UpdateOutput keluaran. Manajer Koneksi pengaturan tab harus sama seperti pada Gambar 11.

Tapi Komponen PropertiesSQLCommand harus memiliki nilai seperti ini:

UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

Jumlah tanda tanya pada kode di atas akan memberitahu Anda berapa banyak parameter yang digunakan mulai dari Param_0 .Posisi parameter dari Param_0 ke Param_5 disusun berdasarkan tempatnya dalam kode. Jadi, Param_0 adalah untuk ID Klien , Param_1 adalah untuk SportsCarID , dan seterusnya.

Lihat Pemetaan Kolom pada Gambar 15.

Setelah mengkonfigurasi CDC di tingkat database dan tabel, cara untuk menguji apakah CDC berfungsi adalah dengan menambahkan dan mengubah baris. Jadi, mari tambahkan beberapa record ke tabel.


USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

Untuk melihat apakah ini tercatat di CDC adalah dengan menanyakan cdc.dbo_sportsCarSales_CT tabel.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Lihat hasil change data capture setelah perintah INSERT pada Gambar 15.

Jadi, itu merekam sisipan. Itu bagus.

Sekarang, coba jalankan paket SSIS tadi. Hasilnya harus sama seperti Gambar 16 di bawah ini.

Gambar 16 . Hasil runtime paket SSIS untuk beban tambahan menggunakan CDC.

Dan akhirnya, menanyakan hasil di FactSportsCarSales tabel mengungkapkan kumpulan 4 record yang sama.

Pemuatan Tambahan di SSIS Menggunakan Kolom DateTime

Beban tambahan di SSIS menggunakan DateTimecolumns adalah cara lain untuk mengumpulkan data secara bertahap. Jika Anda melakukan ETL dalam tabel tanpa CDC, ini adalah pilihan Anda berikutnya.

Tabel sumber mungkin memiliki Dimodifikasi atau Pembaruan Terakhir kolom seperti pada Gambar 17.

Untuk menanyakan perubahan adalah dengan mengetahui Dimodifikasi maksimum nilai kolom dari tujuan. Kemudian, buat kueri semua record dari sumber yang memiliki lebih dari Modified nilai kolom dari tujuan.

Bahan-bahan khas dari teknik ini ditunjukkan pada Gambar 18.

Silakan ikuti petunjuk tentang cara memasak jenis beban tambahan ini. Berikut adalah subtopik untuk bagian ini:

  • Membuat paket untuk melakukan beban tambahan SSIS dengan kolom DateTime
  • Paket hasil runtime

Membuat Paket untuk Melakukan Beban Tambahan SSIS dengan Kolom DateTime

Tujuan kami adalah memuat SportsCars tabel ke dimSportsCars tabel dimensi di database lain. Berikut ringkasan langkah-langkahnya:

LANGKAH 1. Buat 2 manajer koneksi OLE DB
LANGKAH 2. Buat 2 variabel paket
LANGKAH #3. Tambahkan Jalankan Tugas SQL dalam Aliran Kontrol
LANGKAH #4. Tambahkan Tugas Aliran Data

Mari kita mulai.

LANGKAH #1. Buat 2 Manajer Koneksi DB OLE

Koneksi OLE DB pertama berasal dari database transaksional. Dan pengaturannya sederhana seperti yang ditunjukkan pada Gambar 19.

Kemudian, buat koneksi OLE DB lain ke gudang data. Ini harus sama seperti pada Gambar 7.

LANGKAH #2. Buat 2 Variabel Paket

Variabel pertama akan menyimpan tanggal modifikasi terakhir dari dimSportsCars tabel dimensi. Kemudian, yang kedua akan menyimpan kueri SQL khusus.

A. Buat Variabel Pengguna::sportsCars_lastUpdate
  1. Dalam Variabel jendela, klik Tambahkan variabel .
  2. Beri nama sportsCars_lastupdate .
  3. Setel tipe data ke DateTime .
B. Buat User::sqlCommand Variabel
  1. Dalam Variabel jendela, klik Tambahkan variabel .
  2. Beri nama sqlCommand .
  3. Setel jenisnya ke String .
  4. Klik tombol elipsis untuk membuat Ekspresi . Lihat Gambar 21 untuk Pembuat Ekspresi jendela dan ekspresi string yang sebenarnya.
  5. Klik Oke .

String SQL harus seperti ini:

"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Perhatikan bahwa kita menyetel klausa WHERE ke Modified lebih besar dari Pengguna::sportsCars_lastupdate .

Akan ada detail lebih lanjut tentang pengaturan 2 variabel di langkah berikutnya.

LANGKAH #3. Tambahkan Tugas SQL Jalankan di Alur Kontrol

Tugas ini akan meminta tabel tujuan untuk mendapatkan Dimodifikasi . terakhir nilai tanggal. Seret Jalankan Tugas SQL ke Aliran Kontrol. Kemudian, beri label Dapatkan Tanggal Modifikasi Terakhir dari DW . Kemudian, lihat pengaturan pada Gambar 21.

Properti penting yang harus disetel di sini adalah Koneksi , Pernyataan SQL , dan ResultSet properti.

Setel Koneksi properti ke koneksi OLE DB kedua yang diatur dalam LANGKAH #1. Kemudian, atur SQLStatement properti ke kode di bawah ini.

select max(modified) as LastUpdate from dimSportsCars

Kemudian, atur ResultSet properti ke Satu baris .

Terakhir, Anda perlu memetakan LastUpdate kolom alias (lihat kode di atas) ke User::sportsCars_lastupdate variabel. Lihat tangkapan layar pada Gambar 22.

Terakhir, klik Oke untuk menyimpan pengaturan baru.

LANGKAH #4. Tambahkan Tugas Aliran Data

Seret Tugas Aliran Data ke Control Flow dan hubungkan Execute SQL Task untuk itu. Kemudian, beri label Tugas Aliran Data Perbarui dimensi dimSportsCars . Kemudian, ikuti langkah-langkah untuk menambahkan komponen ke Tugas Aliran Data .

Tugas Aliran Data memiliki beberapa langkah di dalamnya:

A. Tambahkan Sumber OLE DB
B. Tambahkan Transformasi Pencarian untuk membandingkan sumber dengan tujuan
C. Tambahkan Perintah OLE DB untuk memperbarui catatan
D. Tambahkan OLE DB Destination untuk menyisipkan catatan

Sekarang, mari kita mulai.

A. Tambahkan Sumber OLE DB

Sumber OLE DB . ini akan menanyakan tabel sumber untuk catatan yang diubah. Lihat pengaturan pada Gambar 23.

Berikut angka-angka pada Gambar 23, berikut rinciannya:

  1. Pertama, tentukan koneksi OLE DB yang kita buat. Lihat Gambar 20.
  2. Kemudian, setel Mode akses data untuk perintah SQL dari variabel .
  3. Kemudian, pilih variabel User::sqlCommand yang kita buat tadi. Lihat Gambar 21.
  4. Terakhir, klik Oke .
B. Tambahkan Transformasi Pencarian untuk Membandingkan Sumber dengan Tujuan

Sekarang, kita perlu memiliki cara untuk membandingkan tabel sumber dan tujuan. Kita dapat menggunakan Pencarian Transformationcomponent untuk melakukan itu. Ini akan melakukan penggabungan antara 2 tabel.

Jadi, seret Pencarian Transformasi dalam Aliran Data dan beri nama Klasifikasikan Perubahan . Kemudian, sambungkan ke OLE DB Source lebih awal. Klik dua kali. Lihat Gambar 24 untuk menyiapkan Umum halaman.

Setel tarik-turun ke Arahkan ulang baris ke keluaran yang tidak cocok seperti yang terlihat pada Gambar 24. Ini berarti kita akan menggunakan baris yang tidak memiliki kecocokan. Dan dalam hal ini, ini untuk mendeteksi baris yang ada di sumber tetapi tidak di tujuan.

Selanjutnya, klik Sambungan halaman di panel kiri Editor Transformasi Pencarian . Kemudian, lihat Gambar 25 tentang apa yang harus disetel.

Pada Gambar 26, Anda perlu menentukan Koneksi OLE DB untuk tabel target. (Lihat Gambar 7). Dan kemudian, atur kueri SQL ke kode di bawah ini.

SELECT SportsCarID from dimSportsCars

Kami hanya membutuhkan SportsCarID kolomuntuk membandingkan, jadi kami menggunakan kueri alih-alih seluruh tabel.

Selanjutnya, klik Kolom halaman untuk mengatur pemetaan kolom kunci kueri sumber ke tujuan. Lihat Gambar 26 untuk pemetaan.

Seperti terlihat pada Gambar 26, harus ada garis dari sumber ke tujuan menggunakan SportsCarID kolom kunci. Kedua kolom kunci akan digunakan untuk perbandingan.

Terakhir, klik Oke .

C. Tambahkan Perintah OLE DB untuk Memperbarui Catatan

Bagian ini akan memperbarui catatan yang memiliki SportsCarID yang cocok nilai kunci dari Pencarian Transformasi.

Jadi, seret Perintah OLE DB di Data Flow dan beri nama Update dimSportsCars . Kemudian, hubungkan ke Pencarian Transformasi sebelumnya. Saat prompt muncul, atur Output untuk Mencari Hasil Kecocokan . Kemudian, klik Oke .

Klik dua kali Perintah OLE DB dan atur properti di Pengelola Koneksi tab. Lihat Gambar 27.

Gambar 27 menunjukkan bahwa Anda perlu mengatur Connection Manager ke database target (Lihat Gambar 8). Kemudian, klik Properti Komponen tab. Lihat Gambar 28 untuk pengaturan properti.

Properti SQLCommand diatur ke:

UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Kami sudah melakukan hal serupa sebelumnya. Tanda tanya adalah placeholder parameter. Dan jika kita memetakan kolom sumber yang benar, kolom target yang sesuai akan ditetapkan. Lihat pemetaan pada Gambar 29.

Terakhir, klik Oke .

D. Tambahkan Tujuan OLE DB untuk Menyisipkan Catatan

Bagian ini akan menyisipkan catatan baru yang ditemukan di SportsCars tabel ke dalam dimSportsCars dapat diukur.

Jadi, seret Tujuan OLE DB komponen dan beri nama Sisipkan Catatan Baru di dimSportsCars. Klik dua kali dan atur koneksi dan tabel target. Lihat Gambar 30.

Seperti yang ditunjukkan pada Gambar 30, atur koneksi ke gudang data (Gambar 8) dan pilih dimSportsCars tabel dimensi.

Selanjutnya, klik Pemetaan halamanuntuk melihat apakah kolom dipetakan sesuai dengan itu. Karena nama kolom sama di sumber dan target, mereka akan dipetakan secara otomatis.

Terakhir, klik Oke .

Hasil Waktu Proses Paket

Sekarang setelah paket selesai, berikut adalah tangkapan layar hasilnya pada Gambar 31.

Proses memperbarui 8 baris dan memasukkan 1 baris baru ke dimSportsCars tabel dimensi.

Pemuatan Tambahan di SSIS Menggunakan Pencarian

Metode lain untuk melakukan beban tambahan adalah membandingkan sumber dari target untuk melihat apa yang perlu dimasukkan, diperbarui, dan dihapus. Dan ini adalah pilihan Anda jika tidak ada kolom DateTime dan tidak ada CDCon di kedua tabel. Salah satu cara untuk melakukannya adalah dengan menggunakan Pencarian Transformasi.

Bahan khas untuk pendekatan ini ditunjukkan pada Gambar 32.

Perhatikan bahwa pendekatan sederhana pada Gambar 32 berlaku untuk tabel yang tidak mengizinkan penghapusan paksa. Jika penghapusan perlu ditangani, Gabung Gabung menggunakan Gabung penuh mungkin berlaku.

Ada 2 subtopik untuk bagian ini:

Membuat paket SSIS untuk beban tambahan SSIS menggunakan Lookup
Hasil runtime paket

Mari selami.

Membuat Paket SSIS untuk Beban Tambahan SSIS Menggunakan Pencarian

Tujuan kami di sini adalah memuat baris Produsen tabel ke dimManufacturers dapat diukur.

Ini mengasumsikan bahwa Anda telah menyiapkan paket SSIS kosong.

Berikut ringkasan langkah-langkahnya:

LANGKAH 1. Buat 2 Koneksi OLE DB
LANGKAH 2. Tambahkan Tugas Aliran Data

Mari kita mulai dengan contohnya.

LANGKAH #1. Buat 2 Koneksi OLE DB

Anda dapat merujuk ke Gambar 19 untuk sumber dan Gambar 7 untuk target. Kami menggunakan Pengelola Koneksi yang sama di sini.

LANGKAH #2. Tambahkan Tugas Aliran Data

Seret Tugas Aliran Data di Alur Kontrol dan beri nama Perbarui Tabel Dimensi Produsen. Klik dua kali dan ikuti langkah selanjutnya. Rangkuman di bawah ini adalah langkah-langkah di dalam Tugas Aliran Data .

A. Tambahkan Sumber OLE DB
B. Tambahkan Pencarian Transformasi untuk memindai catatan baru
C. Tambahkan Tujuan OLE DB untuk menyisipkan record.
D. Tambahkan Pencarian lainnya Transformasi untuk Memindai Perubahan
E. Tambahkan Perintah OLE DB untuk memperbarui tabel target

A. Tambahkan Sumber DB OLE

Seret Sumber OLE DB dan beri label Produsen . Setel Pengelola Koneksi seperti yang terlihat pada Gambar 33.

B. Tambahkan Transformasi Pencarian untuk Memindai Catatan Baru

Pencarian . ini Transformation akan memindai record yang tidak ada di target berdasarkan ManufacturerID kolom kunci Dan semua baris yang tidak cocok adalah kandidat untuk penyisipan tabel.

Seret Pencarian transformasi dan beri nama Cari dimManufacturers. Kemudian, klik dua kali.

Setelan untuk Umum halaman harus sama seperti pada Gambar 24. Sementara itu, setel koneksi ke gudang data dan gunakan kueri untuk Koneksi pengaturan halaman. Lihat Gambar 34.

C. Tambahkan Tujuan OLE DB untuk Menyisipkan Catatan

Seret Tujuan OLE DB dan beri nama Sisipkan Catatan Baru. Hubungkan ke Pencarian Transformasi dan pilih Output Pencarian Tidak Cocok ketika sebuah prompt muncul. Klik dua kali dan atur koneksi dan tabel target seperti yang terlihat pada Gambar 35.

Tabel sumber dan target memiliki nama kolom yang sama dan akan dipetakan secara otomatis. Lihat Gambar 36.

Terakhir, klik Oke .

D. Tambahkan Transformasi Pencarian Lain untuk Memindai Perubahan

Tidak seperti Pencarian sebelumnya Transformasi, yang ini akan memindai perubahan di Produsen kolom. Dan jika ada perubahan akan menjadi kandidat untuk tabel update.

Seret Pencarian . lainnya Transformasi dan beri nama Cari Catatan yang Berubah. Hubungkan ke Pencarian first pertama Transformasi. Umum halaman untuk pencarian ini harus sama seperti pada Gambar 24.

Sementara itu, Koneksi halaman akan terlihat seperti Gambar 37 di bawah ini.

Sementara itu, perhatikan pemetaan pada Gambar 38.

Gambar 38 menunjukkan pemetaan melalui Produsen nama. Jika tidak sama, ada perubahan pada sumbernya. Dan itu perlu disalin di target.

E. Tambahkan Perintah OLE DB untuk Memperbarui Tabel Target

Pengaturan harus sama seperti pada Gambar 29, kecuali untuk SQLCommand . Perintah UPDATE seharusnya seperti ini:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Sesuaikan pemetaan kolom dengan parameter yang sesuai.

Hasil Waktu Proses Paket

Selesai? Kemudian, jalankan paket. Anda akan melihat hasil runtime sama seperti pada Gambar 39.

Alat Terbaik untuk Pemuatan Data SSIS

Semua contoh yang kami miliki sebelumnya menggunakan komponen out-of-the-box yang berasal dari Microsoft. Meskipun cukup baik untuk beberapa proyek, bagaimana jika Anda harus mengintegrasikan sumber cloud dan database melalui SSIS?

Di sinilah Komponen SSIS Devart ikut bermain. Komponen SSIS ini nyaman digunakan. Dan mereka menawarkan pemuatan data berkinerja tinggi menggunakan pengoptimalan khusus sumber data dan caching tingkat lanjut. Mereka juga memiliki 40+ sumber data, termasuk favorit RDBMS seperti MySQL, PostgreSQL, dan Oracle. Juga termasuk layanan cloud seperti Salesforce, HubSpot, Google Analytics, dan banyak lagi. Jadi, patut dicoba untuk memuat jutaan catatan di SSIS menggunakan Komponen SSIS Devart.

Mengapa bukan contoh?

Menggunakan Komponen SSIS Devart untuk Melakukan Beban Tambahan

Mari kita coba mereplikasi dimManufacturers tabel ke MySQL, dan gunakan Pencarian Devart dan Tujuan komponen untuk MySQL. Resepnya ditunjukkan pada Gambar 40.

Mari mulai dengan menambahkan paket SSIS baru ke proyek Layanan Integrasi Visual Studio Anda. Kemudian, tambahkan Data FlowTask dan klik dua kali. Kemudian, ikuti langkah-langkah di bawah ini.

Sebelum itu, berikut ringkasan langkah-langkahnya:

LANGKAH 1. Tambahkan Sumber OLE DB
LANGKAH 2. Tambahkan Pengelola Koneksi MySQL Devart
LANGKAH #3. Tambahkan Devart MySQL Lookup untuk memindai catatan baru
LANGKAH #4. Tambahkan Devart MySQL Lookup . lainnya Transformasi untuk memindai perubahan
LANGKAH #5. Tambahkan Devart MySQL Destination untuk memasukkan catatan
LANGKAH #6. Add another Devart MySQL Destination to update records

STEP #1. Add an OLE DB Source

This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .

STEP #2. Add a Devart MySQL Connection Manager

We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records

Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager lebih awal. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:

  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers table.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

CATATAN :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes

This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records

This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords

Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformasi. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results

See the runtime results in Figure 46.

Kesimpulan

That’s it.

You learned 3 ways to do incremental load in SSIS by using the following:

  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cluster Pengikut – 3 Kasus Penggunaan Utama untuk Menyinkronkan Penerapan SQL &NoSQL

  2. Pelajari Cara Menangani Pengecualian Di PL/SQL

  3. SQL Antar Operator

  4. Cara memastikan bahwa database dicadangkan secara teratur

  5. Software Database Terbaik untuk Developer (Edisi 2022)