Sebagian besar data perusahaan tinggal di database, dan pintu masuknya satu bahasa: SQL. Data engineer menulis SQL untuk mengekstrak data dari sistem sumber, membangun transformasi di data warehouse, dan memeriksa kualitas data lewat agregasi sederhana.
Tool modern seperti dbt pun pada akhirnya menghasilkan SQL, sehingga kemampuan ini tidak tergantikan oleh framework apa pun. Chapter ini memetakan klausa SQL yang wajib dikuasai pemula, mengujinya lewat SQLite bawaan Python, lalu menutup dengan cek kesiapan diri.
Kenapa SQL Penting untuk Data Engineer #
SQL muncul di setiap tahap pipeline. Saat ingestion, SQL menarik data dari database sumber; saat transformasi, SQL membangun tabel hasil di warehouse; saat monitoring, SQL menghitung jumlah baris bermasalah per hari.
Kemampuan membaca dan menulis query dengan percaya diri mempercepat hampir semua tugas data. Lima kemampuan berikut menutup kebutuhan dasar:
SELECT ... FROM— memilih kolom tertentu dari sebuah tabel.WHERE— menyaring baris sesuai kondisi, misalnya hanya transaksi bulan berjalan.ORDER BYdanLIMIT— mengurutkan hasil dan membatasi jumlah baris yang tampil.- Agregasi
COUNT,SUM,AVGdenganGROUP BY— meringkas jutaan baris menjadi angka yang bisa dibaca. JOIN— menggabungkan dua tabel yang berelasi menjadi satu hasil.
Contoh Nyata: SELECT dengan Filter di SQLite #
Kita dapat berlatih SQL tanpa memasang server database, karena modul sqlite3 sudah tersedia di dalam Python. Contoh berikut membuat tabel pelanggan di memori, mengisi tiga baris, lalu menjalankan SELECT dengan filter kota dan pengurutan nama.
import sqlite3
koneksi = sqlite3.connect(":memory:")
koneksi.execute("""
CREATE TABLE pelanggan (
id INTEGER PRIMARY KEY,
nama TEXT,
kota TEXT
)
""")
koneksi.executemany(
"INSERT INTO pelanggan (nama, kota) VALUES (?, ?)",
[("Budi", "Bandung"), ("Siti", "Jakarta"), ("Dewi", "Bandung")],
)
koneksi.commit()
baris_hasil = koneksi.execute("""
SELECT nama, kota
FROM pelanggan
WHERE kota = 'Bandung'
ORDER BY nama
""").fetchall()
for nama, kota in baris_hasil:
print(f"{nama} - {kota}")Output yang Dihasilkan:
Budi - Bandung
Dewi - BandungMari kita telaah baris-baris kode di atas:
- Baris 3 (
sqlite3.connect(":memory:")): database dibuat sepenuhnya di memori — cocok untuk latihan karena tidak meninggalkan berkas di disk. - Baris 4-10 (
CREATE TABLE): tabelpelanggandidefinisikan dengan tiga kolom;INTEGER PRIMARY KEYmenandaiidsebagai penanda unik setiap baris. - Baris 11-14 (
INSERTdengan tanda tanya): tanda tanya adalah placeholder parameter — nilai diisikan terpisah dari teks SQL, praktik yang mencegah SQL injection. - Baris 17-22 (
SELECT ... WHERE ... ORDER BY): query memilih dua kolom, menyaring hanya kotaBandung, lalu mengurutkan hasil berdasarkan nama;fetchall()mengambil semua baris hasil sebagai daftar. - Baris 24-25 (
print): setiap baris hasil dicetak satu per satu, dan urutanBudisebelumDewimembuktikanORDER BYbekerja.
Dari lima baris data, hanya dua lolos saring — dan di pipeline nyata pola yang sama menyaring jutaan baris menjadi ratusan yang benar-benar perlu ditindaklanjuti.
Cek Kesiapan Anda #
- Anda siap bila dapat menulis
SELECTdenganWHEREtanpa membuka contekan. - Anda siap bila dapat menjelaskan fungsi
ORDER BYdanLIMITpada sebuah query. - Anda siap bila dapat menghitung jumlah baris per kategori memakai
COUNTdenganGROUP BY. - Anda siap bila dapat menggabungkan dua tabel berelasi memakai
JOIN.
SQL adalah bahasanya, sedangkan rumahnya adalah sistem database itu sendiri. Chapter berikutnya, Dasar Database, memetakan konsep tabel, relasi, dan RDBMS yang menaungi seluruh query Anda.