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 BY dan LIMIT — mengurutkan hasil dan membatasi jumlah baris yang tampil.
  • Agregasi COUNT, SUM, AVG dengan GROUP 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.

python
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:

text
Budi - Bandung
Dewi - Bandung

Mari kita telaah baris-baris kode di atas:

  1. Baris 3 (sqlite3.connect(":memory:")): database dibuat sepenuhnya di memori — cocok untuk latihan karena tidak meninggalkan berkas di disk.
  2. Baris 4-10 (CREATE TABLE): tabel pelanggan didefinisikan dengan tiga kolom; INTEGER PRIMARY KEY menandai id sebagai penanda unik setiap baris.
  3. Baris 11-14 (INSERT dengan tanda tanya): tanda tanya adalah placeholder parameter — nilai diisikan terpisah dari teks SQL, praktik yang mencegah SQL injection.
  4. Baris 17-22 (SELECT ... WHERE ... ORDER BY): query memilih dua kolom, menyaring hanya kota Bandung, lalu mengurutkan hasil berdasarkan nama; fetchall() mengambil semua baris hasil sebagai daftar.
  5. Baris 24-25 (print): setiap baris hasil dicetak satu per satu, dan urutan Budi sebelum Dewi membuktikan ORDER BY bekerja.

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 SELECT dengan WHERE tanpa membuka contekan.
  • Anda siap bila dapat menjelaskan fungsi ORDER BY dan LIMIT pada sebuah query.
  • Anda siap bila dapat menghitung jumlah baris per kategori memakai COUNT dengan GROUP 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.