Bagikan melalui


Jenis Data SSIS dalam Ekspresi

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

Evaluator ekspresi menggunakan jenis data Integration Services. Saat data pertama kali memasukkan aliran data dalam paket Layanan Integrasi, mesin aliran data mengonversi semua data kolom ke jenis data Layanan Integrasi, dan data kolom yang digunakan ekspresi sudah memiliki jenis data Integration Services. Ekspresi yang digunakan dalam Pemisahan Bersyarkat dan transformasi Kolom Turunan dapat mereferensikan kolom karena merupakan bagian dari aliran data yang menyertakan data kolom.

Variabel

Ekspresi juga dapat menggunakan variabel. Variabel memiliki jenis data Varian dan evaluator ekspresi mengonversi jenis data variabel dari subjenis Varian ke jenis data Integration Services sebelum mengevaluasi ekspresi. Variabel hanya dapat menggunakan subset jenis data Integration Services. Misalnya, variabel tidak dapat menggunakan jenis data Binary Large Object Block (BLOB).

Untuk informasi selengkapnya tentang jenis data Integration Services dan pemetaan jenis data Varian ke jenis data Integration Services, lihat Jenis Data Integration Services.

Harfiah

Selain itu, ekspresi dapat mencakup string, Boolean, dan literal numerik. Untuk informasi selengkapnya tentang mengonversi literal numerik ke jenis data Layanan Integrasi numerik, lihat Literal (SSIS).

String

Anda dapat menggunakan DT_STR atau DT_WSTR sebagai jenis pengembalian ekspresi. Namun, di dalam ekspresi, hanya DT_WSTR yang didukung, dan nilai DT_STR dikonversi ke nilai DT_WSTR. Perilaku ini memiliki beberapa implikasi saat Anda menulis ekspresi.

  • Di dalam ekspresi, gunakan NULL(DT_WSTR, ...) alih-alih NULL(DT_STR, ...). Untuk informasi selengkapnya tentang fungsi ini, lihat NULL (Ekspresi SSIS).

  • Di dalam ekspresi, Anda hanya dapat menggunakan fungsi CAST untuk mentransmisikan nilai ke jenis DT_STR di akar ekspresi - yaitu, saat Anda mengembalikan hasil akhir ekspresi. Jika tidak, gunakan jenis DT_WSTR dalam ekspresi.

Pertimbangkan ekspresi dalam cuplikan layar berikut.

String data types in SSIS expressions

  1. Ekspresi pertama berjalan tanpa kesalahan karena fungsi NULL(DT_STR, ...) berada di tingkat akar ekspresi.

  2. Ekspresi kedua berjalan tanpa kesalahan karena menggunakan NULL(DT_WSTR, ...).

  3. Ekspresi ketiga menimbulkan kesalahan karena menggunakan NULL(DT_STR, ...) di dalam ekspresi.

  4. Ekspresi keempat berjalan tanpa kesalahan karena melemparkan hasil NULL(DT_STR, ...) di dalam ekspresi.

    Evaluator ekspresi menangani pemeran ini secara cerdas dan ditransmisikan ke DT_WSTR, bukan untuk DT_STR, karena mengenali bahwa operasi tidak berada di tingkat akar ekspresi.

Contoh berikut menunjukkan efek transmisi.

Casting strings in SSIS expressions

  1. Dalam ekspresi pertama, pemeran tidak berada di tingkat akar ekspresi. Evaluator ekspresi menangani transmisi ini secara cerdas dan dilemparkan ke DT_WSTR, bukan untuk DT_STR. Ekspresi mengembalikan DT_WSTR.

  2. Dalam ekspresi kedua, pemeran berada di tingkat akar ekspresi. Ekspresi mengembalikan DT_STR.

Konversi Data Implisit

Konversi implisit dari jenis data terjadi saat evaluator ekspresi secara otomatis mengonversi data dari satu jenis data ke jenis data lainnya. Misalnya, jika smallint dibandingkan dengan int, smallint secara implisit dikonversi ke int sebelum perbandingan dilakukan.

Evaluator ekspresi tidak dapat melakukan konversi data implisit ketika argumen dan operand memiliki jenis data yang tidak kompatibel. Selain itu, evaluator ekspresi tidak dapat mengonversi nilai apa pun secara implisit ke Boolean. Sebaliknya, argumen dan operand harus dikonversi secara eksplisit dengan menggunakan operator cast. Untuk informasi selengkapnya, lihat Cast (Ekspresi SSIS).

Diagram berikut menunjukkan jenis hasil konversi implisit operasi BINARY. Persimpangan kolom dan baris dalam tabel ini adalah tipe hasil operasi biner dengan operand dari jenis kiri (Dari) dan kanan (Ke).

Implicit data type conversion between data types

Persimpangan bilangan bulat yang ditandatangani dan bilangan bulat yang tidak ditandatangani adalah bilangan bulat bertanda tangan yang berpotensi lebih besar dari salah satu argumen.

Operator membandingkan string, tanggal, Boolean, dan jenis data lainnya. Sebelum operator membandingkan dua nilai, evaluator ekspresi melakukan konversi implisit tertentu. Evaluator ekspresi selalu mengonversi literal string ke jenis data DT_WSTR dan mengonversi literal Boolean ke jenis data DT_BOOL. Evaluator ekspresi menginterpretasikan semua nilai yang diapit dalam tanda kutip sebagai string. Literal numerik dikonversi ke salah satu jenis data Layanan Integrasi numerik.

Catatan

Nilai Boolean adalah nilai logis, bukan angka. Meskipun nilai Boolean dapat ditampilkan sebagai angka di beberapa lingkungan, nilai tersebut tidak disimpan sebagai angka, dan berbagai bahasa pemrograman mewakili nilai Boolean sebagai nilai numerik secara berbeda, seperti halnya metode .NET Framework.

Misalnya, fungsi konversi yang tersedia di Visual Basic mengonversi True ke -1; namun, metode System.Convert.ToInt32 dalam .NET Framework mengonversi True ke +1. Bahasa Ekspresi Layanan Integrasi mengonversi True ke -1.

Untuk menghindari kesalahan atau hasil yang tidak terduga, Anda tidak boleh menulis kode yang bergantung pada nilai numerik tertentu untuk True dan False. Jika memungkinkan, Anda harus membatasi penggunaan variabel Boolean ke nilai logis yang dirancang.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Fungsi yang menggunakan argumen tunggal mengembalikan hasil dengan jenis data yang sama dengan argumen, dengan pengecualian berikut:

  • HARI, BULAN, dan TAHUN menerima tanggal dan mengembalikan hasil bilangan bulat (DT_I4).

  • ISNULL menerima ekspresi jenis data SSIS apa pun dan mengembalikan hasil Boolean (DT_BOOL).

  • SQUARE dan SQRT menerima ekspresi numerik dan mengembalikan hasil numerik non-integral (DT_R8).

Jika argumen memiliki jenis data yang sama, hasilnya adalah jenis tersebut. Satu-satunya pengecualian adalah hasil operasi biner pada dua nilai dengan jenis data DT_DECIMAL, yang mengembalikan hasil dengan jenis data DT_NUMERIC.

Persyaratan untuk Data yang Digunakan dalam Ekspresi

Evaluator ekspresi mendukung semua jenis data Integration Services. Namun, tergantung pada operasi atau fungsi, operand dan argumen memerlukan jenis data tertentu. Evaluator ekspresi memberlakukan persyaratan jenis data berikut pada data yang digunakan dalam ekspresi:

  • Operand yang digunakan dalam operasi logis harus mengevaluasi ke Boolean. Misalnya, ColumnA > 1&ColumnB < 2.

  • Operan yang digunakan dalam operasi matematika harus mengevaluasi ke nilai numerik. Misalnya, 23,75 * 4.

  • Operand yang digunakan dalam operasi perbandingan, seperti operasi logis dan kesetaraan, harus dievaluasi ke jenis data yang kompatibel.

    Misalnya, salah satu ekspresi dalam contoh berikut menggunakan jenis data DT_DBTIMESTAMPOFFSET:

    (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"

    Sistem mengonversi ekspresi, (DT_DBDATE)"1999-10-12", menjadi DT_DBTIMESTAMPOFFSET. Contoh mengevaluasi ke TRUE karena ekspresi yang dikonversi menjadi "1999-10-12 00:00:00.000 +00:00", yang tidak sama dengan nilai ekspresi lain, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".

  • Argumen yang diteruskan ke fungsi matematika harus dievaluasi ke jenis data numerik. Bergantung pada fungsi atau operasi, jenis data numerik tertentu mungkin diperlukan. Misalnya, fungsi HEX memerlukan bilangan bulat yang ditandatangani atau tidak ditandatangani.

  • Argumen yang diteruskan ke fungsi string harus dievaluasi ke jenis data karakter: DT_STR atau DT_WSTR. Misalnya, UPPER("flower"). Beberapa fungsi string, seperti SUBSTRING, memerlukan argumen bilangan bulat tambahan untuk posisi awal dan panjang string.

  • Argumen yang diteruskan ke fungsi tanggal dan waktu harus dievaluasi ke tanggal yang valid. Misalnya, DAY(GETDATE()). Beberapa fungsi, seperti DATEADD, memerlukan argumen bilangan bulat tambahan untuk jumlah hari yang ditambahkan fungsi ke tanggal.

Operasi yang menggabungkan bilangan bulat delapan byte yang tidak ditandatangani dan bilangan bulat yang ditandatangani memerlukan transmisi eksplisit untuk mengklarifikasi format hasil. Untuk informasi selengkapnya, lihat Cast (Ekspresi SSIS).

Hasil dari banyak operasi dan fungsi memiliki jenis data yang telah ditentukan sebelumnya. Ini bisa menjadi jenis data argumen atau jenis data tempat evaluator ekspresi mentransmisikan hasilnya. Misalnya, hasil operator OR logis (||) selalu boolean, hasil fungsi ABS adalah tipe data numerik argumen, dan hasil perkalian adalah tipe data numerik terkecil yang dapat menahan hasilnya tanpa kehilangan. Untuk informasi selengkapnya tentang jenis data hasil, lihat Operator (Ekspresi SSIS) dan Fungsi (Ekspresi SSIS).

Menggunakan Ekspresi dalam Komponen Aliran Data