Test Connection Setiap Kali Set New Connection


Sebelum anda membuat sebuah koneksi ke Database perlu diperhatikan beberapa hal:
1. Apakah RDBMS anda mengijinkan remote connection?
2. Apakah RDBMS anda mengijinkan connection menggunakan jalur TCP-IP?
3. User ID yang akan digunakan apakah bisa dipakai via remote?


Sebagai contoh saya akan memberikan contoh tampilan untuk RDBMS – MS.SQL Server 2008.
Gambar di bawah adalah contoh Jalur Connection yang diperbolehkan.


Gambar di bawah adalah contoh Jenis Login yang diiinginkan.

Berikut saya akan memberikan contoh langkah2 yang biasa dilakukan untuk men-setup koneksi menggunakan PDI (a.k.a. Kettle). Sebagai Informasi Versi PDI yang saya gunakan adalah “Kettle – Spoon Stable Release – 4.2.0”.
1. Buat Object Table Input

2. Klik 2 kali Object tersebut, lalu klik New pada Connection

3. Isi Connectioon Type dengan nama yang anda inginkan. Tapi biasakan nama Connection mencerminkan nama Server dan nama Database yang dtuju. Untuk kemudahan maintenance
4. Pilih Connection Type: MS SQL

5. Access: Native (JDBC)
6. Host Name: Nama Server / IP Address Database yang anda tuju, example: localhost
7. Database Name: Nama Database Tujuan
8. Port Number: biarkan by Default saja, kecuali kalau settingan PORT DB Server nya sudah tidak default
9. Username & Password, supaya lebih aman, gunakan username dan password untuk SQL Authentication
10. Jika sudah, silahkan click TEST button untuk menge-check apakah koneksi anda berhasil atau tidak.

Gambar di bawah adalah contoh TEST connection yang gagal dan berhasil.



Jika anda merasa settingan connection sudah benar tetapi setelah di test ternyata gagal, ada beberapa kemungkinan yang biasa terjadi:
1. Versi JDBC dari Kettle yang anda gunakan sudah obsole (ketinggalan jaman :p)
2. Check Firewall di Server DB, Tambahkan PORT 1433 ke dalam Exclude PORT list.
3. Salah ketik. ??

Advertisement

Kettle – Load All Excel Files in a Folder


Contoh kasus kali ini adalah:

“Saya punya banyak file Excel dalam satu directory. Semua file ini formatnya sama. Saya ingin meload semua file excel ini kemudian dimasukkan ke dalam satu database. Bagaimana design yang efektif, sehingga saya tidak perlu membuat design satu persatu untuk tiap file excel tersebut? Apakah hal ini memungkinkan dilakukan oleh Kettle?”

Jawaban dari kasus di atas adalah Ya, sangat mungkin sekali. Bahkan relative cukup mudah untuk dilakukan. Sebagaicontoh, misalkan dalam directory di bawah ini saya punya 3 buah file Excel.

Tiap-tiap file Excel tersebut isinya seperti berikut:

Karena ini hanya sebuah contoh, anggap saja saya ingin output nya berupa text file.

Silahkan anda mengikuti langkah2 berikut:

  1. Buat design seperti ini (belum dikonfigurasi).
  2. Save design tersebut, di tempat file Excel disimpan.
  3. Klik 2 kali pada object “Excel Input”. Lalu  Pada inputan File or directory tekan “CTRL + Space” lalu pilih ${Internal.Transformation.Filename.Directory}. Pada inputan regex ketikkan “.*\.xls$” (tanpa tanda petik), lalu klik tombol Add.
  4. Coba anda Klik “Show filename (s)” – seharusnya muncul seperti gambar dibawah.
  5. Klik Ok.
  6. Klik 2 kali pada object “Text file output “. Lalu isikan seperti gambar di bawah.
  7. Save design yang sudah dibuat, lalu coba jalankan.
  8. Jika design ini benar, maka akan mencreate file “hasil.txt” pada directory tempat transformasi disimpan.

Kettle: Spoon Job Error – Running Old Transformation Design


Baru saja dapet case yang menarik dengan Spoon – nya Kettle nih. Permasalahannya sih sederhana, saya mencoba membuat beberapa design transformasi, lalu digabungkan ke dalam satu job, ternyata dalam design tersebut terdapat kesalahan dan harus diperbaiki. Setelah diperbaiki lalu di save kemudian saya coba running job tersebut, tetapi kenapa design yang di running adalah design yang lama bukan yang baru?

Sebagai ilustrasi, silahkan anda perhatikan design job yang sudah saya buat:

Job Design

Job Design

Jadi saya membuat 3 buah design transformation yang akan dijalankan sekaligus melalui satu job. Jika saya running melalui job, terjadi error. Tapi jika dijalankan secara terpisah tiap transformation, hasilnya sukses. Why??

Panik dan bingung.. Kenapa ya kira-kira hal ini bisa terjadi? Apa karena saya salah men-save filenya? Saya coba buka lagi design transformasi yang sudah saya buat, loh kok design-nya sudah benar? Saya coba jalankan kembali job yang tadi, tetapi errornya masih tetap sama. Lalu saya coba jalankan transformasi-nya secara terpisah (diluar job) ternyata hasilnya benar. Lalu dibagian mananya yang error?

Ternyata kesalahan ini terjadi karena terjadi kesalahan target saat menjalankan Job. Untuk lebih jelasnya bisa anda lihat pada gambar di bawah. Seperti dapat dilihat pada form di bawah, terlihat bahwa transformasi yang akan dijalankan adalah Transformasi 1, tetapi sumber design yang akan dijalankan berasal dari file.ktr atau file save-an dari local komputer, bukan dari repository database yang sudah saya buat.

Job Transformation Detail

Job Transformation Detail

Solusi dari permasalahan seperti ini adalah merubah target design yang akan dijalankan, yaitu dengan cara mengosongkan saja field Transformation Filename, atau bisa juga dengan cara meng-eksport ulang transformasi yang telah di re-design menjadi file .ktr, lalu edit agar job menargetkan transformasinya ke file .ktr yang baru.

Demikian penjelasan dari saya semoga bermanfaat.

Kettle design pilih yang simple atau yang kompleks?


Saya ingin mentransformasi data pada 2 table dengan menggunakan Kettle. Saya ingin membuat sebuah design yang simple saja, jangan yang terlalu rumit, tapi design yang saya buat ini harus powerfull. Maksud dari powerfull ini adalah aman, recoverable, bisa mengatasi berbagai masalah yang mungkin terjadi.

Pemikiran seperti ini sangat lazim muncul jika anda masih baru atau sudah mempelajari Data Transformation Design, tidak hanya pada Kettle tapi juga tool yang lainnya. Saya sendiri pun sampai saat ini masih terus mencari sebuah design yang seperti itu. Mana yang paling cocok diterapkan pada sistem yang ada saat ini.

Contoh design yang paling sederhana adalah seperti berikut:

Simple Design

Simple Design

Design seperti di atas sangat mudah sekali dimengerti, tetapi jika kita ingin menggunakan design seperti ini untuk scheduled job, sangatlah tidak dianjurkan. Kenapa tidak dianjurkan? Karena pada design seperti di atas mau tidak mau, kita akan men-truncate table tujuan terlebih dahulu sebelum transformasi dilakukan, jika tidak makan akan terjadi error duplikasi data. Hal inilah yang akan menimbulkan beragam masalah, terutama koneksi jaringan anda bermasalah:

  1. Jika data yang dikirim besar, apakah proses transformasi akan sukses?
  2. Jika proses transformasi gagal, maka data di table tujuan sudah terlanjur di-truncate. Bagaimana cara me-restore data tersebut?

Hal-hal classic seperti ini lah yang ditakuti akan terjadi. Lalu bagaimana cara mengatasi masalah ini? Akan saya coba berikan solusinya pada tulisan ini, tapi sebelumnya kita coba lihat contoh design kettle yang jauh lebih kompleks.

Contoh design yang kompleks:

Bisa dilihat di:

Data Transfer Loop Handling (Bagian 1)
Data Transfer Loop Handling (Bagian 2)

Complex Design

Complex Design

Kalau kita lihat dari design seperti di atas, mungkin yang akan keluar pertama kali dipikiran anda: “Itu apa yah? Kok kayaknya rumit sekali.”
Setidaknya itulah yang keluar dipikiran saya :p
Tapi jika anda mencoba untuk mempelajari-nya tidak sesulit pada kesan pertama kok. Hehe..

Tenang saja, saya solusi yang saya berikan jauh lebih sederhana daripada design di atas. Tapi pilihan tetap ada di tangan anda. 😉

Mari langsung saja ke inti permasalahannya, solusi yang akan saya berikan sebenarnya tidak terlalu jauh dari design yang paling sederhana yang kita bahas pertama kali. Jika kita perhatikan dan analisa lebih jauh design awal, sebenarnya masalah yang paling besar atau saat yang paling rentan adalah pada saat kita akan sudah men-truncate table tujuan sampai data selesai ditransfer. Kita bisa mempersingkat waktu antara men-truncate table sampai data selesai ditransfer dengan cara mempergunakan bantuan 1 buah table lagi yang akan digunakan sebagai temporary table.

Jadi kria-kira scenario-nya dalah sebagai berikut:

  1. Kita men-create sebuah Temporary Table
  2. Kettle mentransfer data dari Table Input ke Table Temporary
  3. Table Output di drop
  4. Lalu Table Temporary di rename menjadi Table Output

Dengan begitu resiko data yang hilang/gagal di transfer akan menjadi sangat kecil. Tentu saja karena masih ada resiko tranformasi data gagal. Maka pada tahap no.1 kita akan tambahkan sql script untuk melakukan penge-cekan apakah Table Temporary masih exist atau tidak, jika ya akan di drop.

Kira-kira Design-nya seperti ini:

Solution Design

Solution Design

Mengenai bagaimana cara untuk mengcreate table, mendrop table, mengecek apakah table x exist atau tidak, tidak saya bahas pada artikel ini. Karena setiap Database mempunyai native sql yang berbeda-beda.

Semoga tulisan ini bermanfaat bagi anda.

Spoon Quick Start


Langsung to the point saja. Di artikel ini akan saya berikan contoh bagaimana cara cepat dan mudah menggunakan Spoon. IMHO inti dari penggunaan spoon mungkin bisa dikatakan sama dengan fasilitas DTS pasa MS.SQL Server.

Contoh Kasus:

Saya ingin mentransfer data sebuah table dari Database MS.SQL Server 2000 ke Database IBM AS400. Data database yang digunakan sebagai berikut:

MS SQL 2000 IBM AS400
Server 192.168.1.20 192.168.1.50
Database Asal Tujuan
PORT 1433 (default-nya MS SQL 2000)
Username andreas andreas
Password tjong tjong

Lalu misalkan table yang ingin ditransfer adalah table CodeMaster, kira2 design nya seperti ini:

CodeMaster
Currency
Code
Name

Lalu ingin ditransfer ke database Tujuan dengan design table dengan asumsi field type and field length nya sama antara database awal dan tujuan:

CDMSTR
CRC
CODE
NAME

Langsung saja kita jalankan kettle dengan mengklik spoon.bat jika anda windows user atau spoon.sh jika anda UNIX user. Jika sudah masuk lalu ada tampilan untuk memasukkan ID atau Password untuk repository, silahkan pilih No repository. Mengenai apa itu repository dan apa kegunaannya, akan saya coba jelaskan pada artikel saya yang lainnya.

Setelah sudah masuk ke Halaman utama Kettle, klik New — Transformation. Lalu buatlah design seperti gambar di bawah ini. Caranya dengan mengklik Core Objects, lalu tinggal drag and drop. Object yang dibutuhkan ada 3, yaitu: Table Input, Select Values, dan Table Output.

design_awal

Klik 2 kali pada Table Input. Pada field Connection klik new. Isikan dengan data database Asal. Jika sudah selesai klik Test Connection apakah sudah success atau belum. Klik Ok. Pada bagian SQL isikan dengan Query: SELECT Currency
,Code
,Name
From CodeMaster

Klik Ok.

database_asal

table_input

Klik 2 kali pada Table Output. Pada field Connection klik new. Isikan dengan data database Tujuan, untuk bagian PORT isi saja dengan (-1). Jika sudah selesai klik Test Connection apakah sudah success atau belum. Pada Column Target Table isikan dengan CDMSTR. Sisa column yang laen biarkan saja apa adanya. Akhiri dengan klik OK.

database_tujuan

Coba hubungkan Table Input dengan Select Values dengan cara menekan Scroll pada Mouse, mulai dari Table Input, lalu lepaskan setelah kursor sampai ke Object Select Values. Coba hubungkan Select Values dengan Table Output dengan cara yang sama.

Klik 2 kali pada Select Values. Pilih Tab Meta-data, klik Get fields to change, maka column Fieldname akan terisikan dengan isi Table CodeMaster pada Database Asal. Isi column Rename sesuai dengan lawan Table CodeMaster di Table CDMSTR. Jika sudah Klik OK.

Save design yang sudah anda buat. Lalu coba jalankan (klik tombol run di atas).

Selamat anda sudah berhasil melakukan transfer data dengan menggunakan fasilitas Spoon pada Kettle.