Data Professional Survey 2021

Brentozar Unlimited, selalu melakukan survey terhadap data engineer professional terkait pekerjaan mereka,
kali ini ada bentuk tableau untuk dapat kita lihat bersama

Bagaimana memilih bentuk grafik / chart

urusan pelaporan atau penyajian data gampang – gampang susah. walau udah pakai tools canggih macam powerbi, tetap saja kemampuan kita memilih bentuk grafik menjadi sangat krusial.
lagi asik scroll twitter , nemu foto bagus ini, di foto ini sudah ada semacam “decission tree” untuk memilih bentuk grafik atau chart yang baik.

Image

saya rasa selama saya membuat project berbasis chart, gambar ini sangat relevan.

Apa yang terjadi dengan log4j dan bagaimana mengatasinya

kali ini lagi seru serunya tentang bugs yang ada di log4j. Library logging yang sangat populer di pemrograman java. Sepemahaman saya banyak sekali produk – produk java menggunakan log4j ini, jadi gak kebayang hampir semua pasti lagi pusing patch library ini.

tapi apa sih yang terjadi ? terus gimana ngatasinnya ?
saya akhirnya nemu penjelasan yang cukup simple dari post twitter ini.

Image

dari gambarnya saya rasa cukup clear ya problem nya seperti apa, dan bagaimana cara mengatasinya.
semoga aman aman semua.

Membuat sistem basis data sederhana bagian 2 : Refactoring, Statement method, MetaCommand Method

pada bagian ini saya mulai memisahkan beberapa komponen. yaitu dengan memisahkan bagian untuk memproses meta command (command yang diawali dengan tanda .) , lalu untuk menyiapkan statement, dan bagian untuk mengeksekusi query dari statement tersebut.

selain itu juga saya melakukan refactoring dengan membuat package.

sekian catatan bagian ini

Membuat Sistem basis data sederhana Bagian 1 : Github, Ant, Java, REPL

akhirnya buat tulisan lagi,

sejak lama, saya suka sekali mengamati bagaimana sistem basis data bekerja. Untuk memahami lebih dalam akhirnya saya putuskan untuk berlatih membuat sistem basis data sendiri, tidak hanya menggunakan tapi juga membuat dari awal.

tapi untuk memulai juga susah, harus darimana memulainya ? googling sedikit akhirnya menemukan blog ini. di dalam blog tersebut juga punya misi yang sama, yaitu membuat DBMS mengikuti sqlite dengan bahasa C. karena saya tidak punya basic bahasa C, akhirnya saya ganti saja pakai Java

tahap awal ini saya membuat beberapa persiapan

  1. menyiapkan repository di github
  2. menyiapkan file .gitignore
  3. menyiapkan file build.xml
  4. membuat file Database.java sebagai awalan

untuk repository github dapat dilihat di sini.

sedangkan file .gitignore saya buat untuk mempermudah saya meng ignore beberapa file terkait development di java dan vim.

untuk build.xml saya buat untuk mempermudah proses compile dan building jar menggunakan apache ant

dan database.java saya buat pada bagian 1 ini hanya untuk menyiapkan bagian paling dasar , yaitu REPL atau interface dengan pengguna.

itu dulu catatan saya untuk bagian 1 ini.

Membuat Tabel menjadi Read-Only di SQLServer

seringkali kalau masalah data ini sangat bikin tidur tidak nyenyak. saya sendiri sering dibikin seperti ini. takutnya ada yang gak sengaja mengubah data, atau menghapus dan sebagainya.
untuk melakukan pencatatan hal tersebut saya biasanya mengimplement temporal table, namun temporal table kadang tidak cukup. kita kadang butuh melakukan pemaksaan bahwa tabel hanya boleh dibaca tidak boleh diubah sedikitpun.

teknik favorit saya adalah menambahkan trigger di tabel tersebut, teknik ini cukup simple dan powerfull menurut saya,

silakan dicek script berikut ini, ada script untuk menambah trigger nya, dan juga ada untuk menghapus trigger nya jika dibutuhkan untuk mengubah data pada tabel yang bersangkutan, anda tinggal menggati <table_name> menjadi nama table dan <schema> menjadi schema yang digunakan. Semoga membantu !

Investigasi Problem String or binary data would be truncated

Masalah ini sering kita jumpai di sqlserver saat kita akan mengcopy data dari tabel / query sumber ke tabel tujuan yang memiliki struktur yang berubah di sisi tabel / query sumber. Biasanya sih, dikarenakan panjang karakter nya lebih panjang dari tabel tujuan. Sebenarnya masalah ini sudah clear dan jelas , hanya saja yang tidak jelas kolom mana yang bermasalah. tidak ada error yang lebih detail terhadap hal tersebut. untuk itu , kita perlu untuk mencari kolom yang berubah satu per satu dan ini bisa jadi memakan waktu yang cukup banyak jika jumlah kolom nya banyak sekali.

syukurnya ada script yang dapat memudahkan kita untuk melakukan hal tersebut yaitu script yang membandingkan struktur kolom antara 2 tabel. script nya sebagai berikut :

Untuk menggunakan script ini ada langkah2 yang perlu dilakukan :

1. jalan kan query sumber dan simpan dalam temporary table, bisa memanfaatkan perintah SELECT INTO TABLE

2. jalankan script di atas untuk membandingkan antara temporaray table dengan tabel tujuan

3. hapus tabel temporary

cukup mudah, dan cepat dalam mendeteksi kolom mana yang perlu penanganan

Membaca Menulis Excel di Python Menggunakan PyWin32

ok, udah banyak sih library untuk membaca, menulis excel di python ya ..

misalnya aja :

  1. pandas
  2. openpyxl
  3. xlrd
  4. dan lain lain

lalu siapa yang perlu menggunakan ini ? kenapa gak pakai library yang udah ada ?

  1. kalau library yang ada tidak memuaskan , misalnya saja openpyxl, saya pernah menggunakan dan tidak terlalu suka dengan mode ” value” dan mode “formula” saat pembacaan
  2. openpyxl saat membaca value dari workbook terkadang beramasalah jika, value yang dibaca merupaka sebuah formula dari sebuah workbook yang belum dibuka sebelumnya, misal save- as
  3. jika kita memiliki komputer dengan os windows + excel dan ingin mengutilisasi lebih baik
  4. menguasi VBA atau ingin belajar

atas dasar itu, akhir nya saya mencoba mulai menggunakan library pywin32. intinya sih library ini banyak mengeksplorasi kemampuan windows namun menggunakan python. pada case excel ini digunakan COM (Component Object Model – Wikipedia) untuk mengakses excel nya.

berikut catatan saya tentang bagaimana melakukan hal tersebut, dan catatan ini akan berkembang terus menerus

Mengetahui history backup pada SQLServer

pasangan dari postingan sebelum nya mengenai history dari restore pada sqlserver, kali ini kita dapat script untuk melakukan list history backup di sqlserver , dengan script ini :

USE [dbname]
GO

SELECT 
s.database_name,
m.physical_device_name,
CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,
CAST(DATEDIFF(second, s.backup_start_date,
s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,
s.backup_start_date,
CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,
CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,
CASE s.[type] WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Transaction Log'
END AS BackupType,
s.server_name,
s.recovery_model
FROM msdb.dbo.backupset s
INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
WHERE s.database_name = DB_NAME() -- Remove this line for all the database
ORDER BY backup_start_date DESC, backup_finish_date
GO

Konversi Tabel pada SQLServer Menjadi Tabel Temporal

Temporal Tables adalah salah satu fitur yang sangat membantu saya , terutama saat terjadi perselisihan mengenai data , dengan temporal table, secara tidak kita sadari sqlserver mencatat perubahan yang terjadi pada data yang ada pada suatu tabel, sehingga kita tidak pernah kehilangan nilai data sebelum data tersebut berubah atau terhapus.

seringkali kita tidak mendesain sebuah tabel memiliki sifat temporal, sehingga case yang sering adalah, kita punya tabel yang telah terpakai , dan harus diubah menjadi temporal. Dan menariknya , dengan memahami cara ini, kita juga dapat mengaplikasikannya pada case pembuatan tabel yang memiliki sifat temporal sejak awal.

Tahapan melakukan konversi ini antara lain sebagai berikut :

  1. Stop dulu segala transaksi yang akan masuk ke tabel yang ingin dikonversi
  2. Menyiapkan 2 kolom yang bertipe datetime2 sebagai penanda waktu pada data. biasanya kita menyebutnya sebagai starttime dan datetime.
  3. Memberi nilai awal pada 2 kolom tersebut, kolom starttime diisikan nilai terkecil, sedangkan endtime diisi nilai terbesar. hal ini berarti data tersebut masih aktif , tidak masuk dalam kategori historical (dilihat dari range waktu antara starttime dan endtime)
  4. memberi batasan keadaan pada 2 kolom tersebut, bahwa kolom tersebut tidak boleh terisi keadaan NULL
  5. menambah period pada tabel tersebut yang berisi 2 kolom tersebut
  6. melakukan konversi pada tabel tersebut menjadi tabel temporal

saya asumsikan anda, dapat mengikuti langkah – langkah tersebut dan anda sudah terbiasa menggunakan SQLServer, namun jika anda adalah kaum rebahan macam saya,

berikut snippet sql yang bisa digunakan,

anda cukup mengganti value dari variabel @table nya

ok sekian, happy SQL ing