tarik data json dari web service menggunakan Pentaho Data Integration (pentaho spoon)

dalam integrasi antar aplikasi, cara yang paling umum digunakan adalah menggunakan web service, dengan format data json. artikel ini membahas bagaimana cara menarik data web service dengan format json, menggunakan pentaho data integration, alias pentaho spoon.

pentaho data integrationa, atau pentaho spoon saat ini sudah dilengkapi dengan field json input, yang dapat secara presisi mengekstrak data dalam bentuk json, menjadi field/kolom dan baris, sehingga bisa dikatakan bisa mengkonversi dari json menjadi tabel.

sebagai data contoh kita akan gunakan github API dengan alamat https://api.github.com/users/mralexgray/repos

jika URL diatas kita panggil, misalnya dengan tool chrome postman, hasilnya akan tampil seperti berikut ini:

dari data json diatas, hasil akhir dari yang diharapkan dari proses ini adalah sebagai berikut:

perhatikan, proses ini berhasil mengkonversi dari json menjadi table. selanjutnya kita akan kupas tuntas bagaimana cara melakukannya.

untuk mengkonversi json menjadi table, ETL transformation di pentaho spoon yang dibutuhkan adalah sebagai berikut:


kita akan bahas satu per satu dari serangkaian step-step pentaho spoon diatas:

1. get variable

fungsinya untuk mendapatkan external parameter, yaitu parameter nomor page (halaman) dan jumlah record per halaman. hal ini diperlukan, supaya pemanggilan API tidak berat, karena tidak semua row kita panggil. misalnya kita panggil page 3 dengan 100 record per page, maka kita akan mendapatkan 100 record, yaitu record ke 201 sampai dengan record ke 300. tentu saja ini jauh lebih cepat dari pada kita tarik semua row, yang mungkin ribuan atau jutaan record, dan belum tentu semua kita perlukan.

untuk mendefinisikan parameter, klik menu edit || setting, lalu buka sub tab parameters.


kemudian isi dari dari step get variable ini adalah sebagaia berikut:

sehingga jika di-preview hasilnya adalah sebagai berikut:

2. http client

fungsinya untuk mendapatkan mendapatkan data json sebagai return dari pemanggilan URL. isi dari step http client adalah sebagai berikut:


perhatikan URL yang diset di step ini, hanya base URL saja, tanpa parameter. sekarang klik sub tab fields.

perhatikan, field dari step sebelumnya diumpankan sebagai URL parameter di step ini. lalu kenapa nama parameternya adalah page dan per_page? ini sesuai dengan dokumentasi dari github disini: https://developer.github.com/v3/#parameters

hasil preview dari step ini adalah sebagai berikut ini:

3. Modified Java Script Value

step ini fungsinya untuk menambahkan root pada json hasil dari pemanggilan URL di step sebelumnya, karena json yang di return tidak memiliki entiti root. perhatikan gambar dibawah ini

dan dengan step ini, akan dirubah supaya menjadi seperti ini

caranya? dengan memasukkan kode javascript seperti dibawah ini:

4. json input

step ini fungsinya untuk mengekstrak field-field dalam string json. sumber dari step json input tentu saja field jsonrow, yang merupakan output dari step sebelumnya.

buka tab field, tambahkan field berikut ini:

mengapa path untuk field jsonrow adalah $.jsonrow.* ? hal ini mengacu pada konvensi berikut ini: http://goessner.net/articles/JsonPath/

4. json input 2

step ini adalah json input, yang fungsinya untuk mengekstrak hasil output dari step json input (step sebelumnya). step sebelumnya juga berupa string dalam bentuk json. jadi apa bedanya dengan output dari http client? kalau dari http client adalah 1 row (1 json row, tetapi dalam 1 json row ada beberapa record), sedangkan dari json input ini keluarannya adalah json tetapi dalam beberapa row. dalam kasus kita adalah 100 row (sebab parameter per_page diisi 100). apa alasan dibuat 2x json input seperti ini: jika anda perhatikan, json output dari API ini ada 2 level data, yaitu level root, dan level owner.

buka tab field, tambahkan field berikut ini:

jadi, kalau diextrak 1 tahap, akan error, sebab kedalaman data yang berbeda, misalnya jumlah record pada field owner.id tidak sama jumlahnya dengan field root.id. oleh sebab itu di extract 2x. tahap 1 extract semua yg ada didalam root, sehingga dari 1 json row dikonversi menjadi 100 row, baru kemudian di tiap-tiap dari 100 row itu, field-nya diektrak lagi.

sehingga, cara seting step json input 2 ini adalah sebagai berikut:

5. select value

step ini merupakan step terkahir, dan sepele, hanya mengurangi field-field yang tidak perlu. berikut isi dari step select value:

dan hasilnya, woohaaa konversia json ke stream table

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s