Bagikan melalui


Membuat Tujuan dengan Komponen Skrip

Berlaku untuk: Integration Runtime SSIS SQL Server di Azure Data Factory

Anda menggunakan komponen tujuan dalam aliran data paket Layanan Integrasi untuk menyimpan data yang diterima dari sumber upstream dan transformasi ke sumber data. Biasanya komponen tujuan terhubung ke sumber data melalui manajer koneksi yang ada.

Untuk gambaran umum komponen Skrip, lihat Memperluas Aliran Data dengan Komponen Skrip.

Komponen Skrip dan kode infrastruktur yang dihasilkannya untuk Anda menyederhanakan proses pengembangan komponen aliran data kustom secara signifikan. Namun, untuk memahami cara kerja komponen Skrip, Anda mungkin merasa berguna untuk membaca langkah-langkah untuk mengembangkan komponen aliran data kustom di bagian Mengembangkan Komponen Aliran Data Kustom , dan terutama Mengembangkan Komponen Tujuan Kustom.

Memulai Komponen Tujuan

Saat Anda menambahkan komponen Skrip ke tab Aliran Data dari SSIS Designer, kotak dialog Pilih Jenis Komponen Skrip terbuka dan meminta Anda untuk memilih skrip Sumber, Tujuan, atau Transformasi . Dalam kotak dialog ini, pilih Tujuan.

Selanjutnya, sambungkan output transformasi ke komponen tujuan di SSIS Designer. Untuk pengujian, Anda dapat menghubungkan sumber langsung ke tujuan tanpa transformasi apa pun.

Mengonfigurasi Komponen Tujuan dalam Mode Metadata-Design

Setelah Anda memilih opsi untuk membuat komponen tujuan, Anda mengonfigurasi komponen dengan menggunakan Editor Transformasi Skrip. Untuk informasi selengkapnya, lihat Mengonfigurasi Komponen Skrip di Editor Komponen Skrip.

Untuk memilih bahasa skrip yang akan digunakan tujuan Skrip, Anda mengatur properti ScriptLanguage pada halaman Skrip dari kotak dialog Editor Transformasi Skrip .

Catatan

Untuk mengatur bahasa skrip default untuk komponen Skrip, gunakan opsi Bahasa pembuatan skrip pada halaman Umum kotak dialog Opsi . Untuk informasi selengkapnya, lihat Halaman Umum.

Komponen tujuan aliran data memiliki satu input dan tanpa output. Mengonfigurasi input untuk komponen adalah salah satu langkah yang harus Anda selesaikan dalam mode desain metadata, dengan menggunakan Editor Transformasi Skrip, sebelum Anda menulis skrip kustom Anda.

Menambahkan Pengelola Koneksi

Biasanya komponen tujuan menggunakan manajer koneksi yang ada untuk menyambungkan ke sumber data tempat komponen menyimpan data dari aliran data. Pada halaman Pengelola Koneksidari Editor Transformasi Skrip, klik Tambahkan untuk menambahkan manajer koneksi yang sesuai.

Namun, pengelola koneksi hanyalah unit nyaman yang merangkum dan menyimpan informasi yang diperlukan untuk terhubung ke sumber data dari jenis tertentu. Anda harus menulis kode kustom Anda sendiri untuk memuat atau menyimpan data Anda, dan mungkin untuk membuka dan menutup koneksi ke sumber data.

Untuk informasi umum tentang cara menggunakan pengelola koneksi dengan komponen Skrip, lihat Menyambungkan ke Sumber Data di Komponen Skrip.

Untuk informasi selengkapnya tentang halaman Pengelola Koneksidari Editor Transformasi Skrip, lihat Editor Transformasi Skrip (Halaman Pengelola Koneksi).

Mengonfigurasi Input dan Kolom Input

Komponen tujuan memiliki satu input dan tanpa output.

Pada halaman Kolom Inputdari Editor Transformasi Skrip, daftar kolom memperlihatkan kolom yang tersedia dari output komponen upstream dalam aliran data. Pilih kolom yang ingin Anda simpan.

Untuk informasi selengkapnya tentang halaman Kolom Input dari Editor Transformasi Skrip, lihat Editor Transformasi Skrip (Halaman Kolom Input).

Halaman Input dan Output dari Editor Transformasi Skrip menampilkan satu input, yang dapat Anda ganti namanya. Anda akan merujuk ke input berdasarkan namanya dalam skrip Anda dengan menggunakan properti pengakses yang dibuat dalam kode yang dibuat secara otomatis.

Untuk informasi selengkapnya tentang halaman Input dan Output dari Editor Transformasi Skrip, lihat Editor Transformasi Skrip (Halaman Input dan Output).

Menambahkan Variabel

Jika Anda ingin menggunakan variabel yang ada dalam skrip, Anda dapat menambahkannya di bidang properti ReadOnlyVariables dan ReadWriteVariables di halaman SkripEditor Transformasi Skrip.

Saat Anda menambahkan beberapa variabel di bidang properti, pisahkan nama variabel dengan koma. Anda juga dapat memilih beberapa variabel dengan mengklik tombol elipsis (...) di samping bidang properti ReadOnlyVariables dan ReadWriteVariables , lalu memilih variabel dalam kotak dialog Pilih variabel .

Untuk informasi umum tentang cara menggunakan variabel dengan komponen Skrip, lihat Menggunakan Variabel di Komponen Skrip.

Untuk informasi selengkapnya tentang halaman SkripEditor Transformasi Skrip, lihat Editor Transformasi Skrip (Halaman Skrip).

Membuat Skrip Komponen Tujuan dalam Mode Code-Design

Setelah mengonfigurasi metadata untuk komponen, Anda dapat menulis skrip kustom Anda. Di Editor Transformasi Skrip, pada halaman Skrip, klik Edit Skrip untuk membuka IDE Microsoft® Visual Studio® Tools for Applications (VSTA) tempat Anda dapat menambahkan skrip kustom Anda. Bahasa pembuatan skrip yang Anda gunakan bergantung pada apakah Anda memilih Microsoft Visual Basic atau Microsoft Visual C# sebagai bahasa skrip untuk properti ScriptLanguage di halaman Skrip .

Untuk informasi penting yang berlaku untuk semua jenis komponen yang dibuat dengan menggunakan komponen Skrip, lihat Pengkodian dan Penelusuran Kesalahan Komponen Skrip.

Memahami Kode yang Dibuat Secara Otomatis

Saat Anda membuka VSTA IDE setelah Anda membuat dan mengonfigurasi komponen tujuan, kelas ScriptMain yang dapat diedit muncul di editor kode dengan stub untuk metode ProcessInputRow . Kelas ScriptMain adalah tempat Anda akan menulis kode kustom Anda, dan ProcessInputRow adalah metode terpenting dalam komponen tujuan.

Jika Anda membuka jendela Project Explorer di VSTA, Anda dapat melihat bahwa komponen Skrip juga telah menghasilkan item proyek BufferWrapper dan ComponentWrapper baca-saja. Kelas ScriptMain mewarisi dari kelas UserComponent di item proyek ComponentWrapper .

Pada durasi, mesin aliran data memanggil metode ProcessInput di kelas UserComponent , yang mengambil ProcessInput alih metode ScriptComponent kelas induk. Metode ProcessInput pada gilirannya mengulang baris dalam buffer input dan memanggil metode ProcessInputRow satu kali untuk setiap baris.

Menulis kode kustom Anda

Untuk menyelesaikan pembuatan komponen tujuan kustom, Anda mungkin ingin menulis skrip dalam metode berikut yang tersedia di kelas ScriptMain .

  1. Ambil alih metode AcquireConnections untuk menyambungkan ke sumber data eksternal. Ekstrak objek koneksi, atau informasi koneksi yang diperlukan, dari pengelola koneksi.

  2. Ambil alih metode PreExecute untuk bersiap menyimpan data. Misalnya, Anda mungkin ingin membuat dan mengonfigurasi SqlCommand dan parameternya dalam metode ini.

  3. Gunakan metode ProcessInputRow yang ditimpa untuk menyalin setiap baris input ke sumber data eksternal. Misalnya, untuk tujuan SQL Server, Anda dapat menyalin nilai kolom ke dalam parameter SqlCommand dan menjalankan perintah satu kali untuk setiap baris. Untuk tujuan file datar, Anda dapat menulis nilai untuk setiap kolom ke StreamWriter, memisahkan nilai menurut pemisah kolom.

  4. Ambil alih metode PostExecute untuk memutuskan sambungan dari sumber data eksternal, jika diperlukan, dan untuk melakukan pembersihan lain yang diperlukan.

Contoh

Contoh yang mengikuti menunjukkan kode yang diperlukan di kelas ScriptMain untuk membuat komponen tujuan.

Catatan

Contoh-contoh ini menggunakan tabel Person.Address dalam database sampel AdventureWorks dan meneruskan kolom pertama dan keempatnya, kolom intAddressID dan nvarchar(30)City , melalui aliran data. Data yang sama digunakan dalam sampel sumber, transformasi, dan tujuan di bagian ini. Prasyarat dan asumsi tambahan didokumenkan untuk setiap contoh.

Contoh Tujuan ADO.NET

Contoh ini menunjukkan komponen tujuan yang menggunakan pengelola koneksi ADO.NET yang ada untuk menyimpan data dari aliran data ke dalam tabel SQL Server.

Jika Anda ingin menjalankan kode sampel ini, Anda harus mengonfigurasi paket dan komponen sebagai berikut:

  1. Buat pengelola koneksi ADO.NET yang menggunakan penyedia SqlClient untuk menyambungkan ke database AdventureWorks .

  2. Buat tabel tujuan dengan menjalankan perintah Transact-SQL berikut ini di database AdventureWorks :

    CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL,  
        [City] [nvarchar](30) NOT NULL)  
    
  3. Tambahkan komponen Skrip baru ke permukaan perancang Aliran Data dan konfigurasikan sebagai tujuan.

  4. Sambungkan output sumber upstream atau transformasi ke komponen tujuan di SSIS Designer. (Anda dapat menyambungkan sumber langsung ke tujuan tanpa transformasi apa pun.) Output ini harus menyediakan data dari tabel Person.Address dari database sampel AdventureWorks yang berisi setidaknya kolom AddressID dan City .

  5. Buka Editor Transformasi Skrip. Pada halaman Kolom Input , pilih kolom input AddressID dan City .

  6. Pada halaman Input dan Output , ganti nama input dengan nama yang lebih deskriptif seperti MyAddressInput.

  7. Pada halaman Pengelola Koneksi , tambahkan atau buat pengelola koneksi ADO.NET dengan nama seperti MyADONETConnectionManager.

  8. Pada halaman Skrip , klik Edit Skrip dan masukkan skrip yang mengikuti. Kemudian tutup lingkungan pengembangan skrip.

  9. Tutup Editor Transformasi Skrip dan jalankan sampel.

Imports System.Data.SqlClient  
...  
Public Class ScriptMain  
    Inherits UserComponent  
  
    Dim connMgr As IDTSConnectionManager100  
    Dim sqlConn As SqlConnection  
    Dim sqlCmd As SqlCommand  
    Dim sqlParam As SqlParameter  
  
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)  
  
        connMgr = Me.Connections.MyADONETConnectionManager  
        sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)  
  
    End Sub  
  
    Public Overrides Sub PreExecute()  
  
        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _  
            "VALUES(@addressid, @city)", sqlConn)  
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)  
        sqlCmd.Parameters.Add(sqlParam)  
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)  
        sqlCmd.Parameters.Add(sqlParam)  
  
    End Sub  
  
    Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)  
        With sqlCmd  
            .Parameters("@addressid").Value = Row.AddressID  
            .Parameters("@city").Value = Row.City  
            .ExecuteNonQuery()  
        End With  
    End Sub  
  
    Public Overrides Sub ReleaseConnections()  
  
        connMgr.ReleaseConnection(sqlConn)  
  
    End Sub  
  
End Class  
using System.Data.SqlClient;  
public class ScriptMain:  
    UserComponent  
  
{  
    IDTSConnectionManager100 connMgr;  
    SqlConnection sqlConn;  
    SqlCommand sqlCmd;  
    SqlParameter sqlParam;  
  
    public override void AcquireConnections(object Transaction)  
    {  
  
        connMgr = this.Connections.MyADONETConnectionManager;  
        sqlConn = (SqlConnection)connMgr.AcquireConnection(null);  
  
    }  
  
    public override void PreExecute()  
    {  
  
        sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " +  
            "VALUES(@addressid, @city)", sqlConn);  
        sqlParam = new SqlParameter("@addressid", SqlDbType.Int);  
        sqlCmd.Parameters.Add(sqlParam);  
        sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);  
        sqlCmd.Parameters.Add(sqlParam);  
  
    }  
  
    public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)  
    {  
        {  
            sqlCmd.Parameters["@addressid"].Value = Row.AddressID;  
            sqlCmd.Parameters["@city"].Value = Row.City;  
            sqlCmd.ExecuteNonQuery();  
        }  
    }  
  
    public override void ReleaseConnections()  
    {  
  
        connMgr.ReleaseConnection(sqlConn);  
  
    }  
  
}  

Contoh Tujuan File Datar

Contoh ini menunjukkan komponen tujuan yang menggunakan manajer koneksi File Datar yang ada untuk menyimpan data dari aliran data ke file datar.

Jika Anda ingin menjalankan kode sampel ini, Anda harus mengonfigurasi paket dan komponen sebagai berikut:

  1. Buat pengelola koneksi File Datar yang tersambung ke file tujuan. File tidak harus ada; komponen tujuan akan membuatnya. Konfigurasikan file tujuan sebagai file yang dibatasi koma yang berisi kolom AddressID dan Kota .

  2. Tambahkan komponen Skrip baru ke permukaan perancang Aliran Data dan konfigurasikan sebagai tujuan.

  3. Sambungkan output sumber upstream atau transformasi ke komponen tujuan di SSIS Designer. (Anda dapat menyambungkan sumber langsung ke tujuan tanpa transformasi apa pun.) Output ini harus menyediakan data dari tabel Person.Address dari database sampel AdventureWorks , dan harus berisi setidaknya kolom AddressID dan City .

  4. Buka Editor Transformasi Skrip. Pada halaman Kolom Input , pilih kolom AddressID dan Kota .

  5. Pada halaman Input dan Output , ganti nama input dengan nama yang lebih deskriptif, seperti MyAddressInput.

  6. Pada halaman Pengelola Koneksi , tambahkan atau buat pengelola koneksi File Datar dengan nama deskriptif seperti MyFlatFileDestConnectionManager.

  7. Pada halaman Skrip , klik Edit Skrip dan masukkan skrip yang mengikuti. Kemudian tutup lingkungan pengembangan skrip.

  8. Tutup Editor Transformasi Skrip dan jalankan sampel.

Imports System.IO  
...  
Public Class ScriptMain  
    Inherits UserComponent  
  
    Dim copiedAddressFile As String  
    Private textWriter As StreamWriter  
    Private columnDelimiter As String = ","  
  
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)  
  
        Dim connMgr As IDTSConnectionManager100 = _  
            Me.Connections.MyFlatFileDestConnectionManager  
        copiedAddressFile = CType(connMgr.AcquireConnection(Nothing), String)  
  
    End Sub  
  
    Public Overrides Sub PreExecute()  
  
        textWriter = New StreamWriter(copiedAddressFile, False)  
  
    End Sub  
  
    Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer)  
  
        With textWriter  
            If Not Row.AddressID_IsNull Then  
                .Write(Row.AddressID)  
            End If  
            .Write(columnDelimiter)  
            If Not Row.City_IsNull Then  
                .Write(Row.City)  
            End If  
            .WriteLine()  
        End With  
  
    End Sub  
  
    Public Overrides Sub PostExecute()  
  
        textWriter.Close()  
  
    End Sub  
  
End Class  
using System.IO;  
public class ScriptMain:  
    UserComponent  
  
{  
    string copiedAddressFile;  
    private StreamWriter textWriter;  
    private string columnDelimiter = ",";  
  
    public override void AcquireConnections(object Transaction)  
    {  
  
        IDTSConnectionManager100 connMgr = this.Connections.MyFlatFileDestConnectionManager;  
        copiedAddressFile = (string) connMgr.AcquireConnection(null);  
  
    }  
  
    public override void PreExecute()  
    {  
  
        textWriter = new StreamWriter(copiedAddressFile, false);  
  
    }  
  
    public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row)  
    {  
  
        {  
            if (!Row.AddressID_IsNull)  
            {  
                textWriter.Write(Row.AddressID);  
            }  
            textWriter.Write(columnDelimiter);  
            if (!Row.City_IsNull)  
            {  
                textWriter.Write(Row.City);  
            }  
            textWriter.WriteLine();  
        }  
  
    }  
  
    public override void PostExecute()  
    {  
  
        textWriter.Close();  
  
    }  
  
}  

Lihat juga

Membuat Sumber dengan Komponen Skrip
Mengembangkan Komponen Tujuan Kustom