Setiap pipeline data engineering berakhir di sebuah tempat penyimpanan, baik itu basis data relasional, warehouse, maupun berkas kolom seperti Parquet. Sebelum melangkah ke materi SQL dan pipeline, kita perlu menyiapkan database yang akan dipakai sepanjang course ini. Tiga pilihan yang saling melengkapi: SQLite untuk latihan tanpa instalasi, DuckDB untuk analitik berukuran besar di laptop, dan PostgreSQL untuk skenario produksi yang sesungguhnya. Ketiganya dipakai bergantian di section berikutnya, jadi pastikan ketiganya siap di lingkungan Anda.
Tiga Pilihan yang Saling Melengkapi #
| Aspek | SQLite | DuckDB | PostgreSQL |
|---|---|---|---|
| Cara instalasi | menyertai Python | pip install duckdb | apt, installer, atau Docker |
| Jenis beban | transaksi kecil | analitik (OLAP) | transaksi dan banyak koneksi |
| Penyimpanan | satu berkas | satu berkas | server tersendiri |
| Cocok untuk | latihan, data kecil | eksplorasi, miliaran baris | aplikasi dan pipeline produksi |
SQLite dan DuckDB bersifat embedded: keduanya berjalan di dalam proses Python kita sendiri tanpa server terpisah. PostgreSQL bekerja sebaliknya — klien terhubung ke server yang berjalan terus-menerus, model yang sama dengan warehouse di perusahaan.
SQLite: Nol Instalasi #
Modul sqlite3 menyertai Python sejak awal, sehingga verifikasi cukup satu baris:
python3 -c "import sqlite3; print(sqlite3.sqlite_version)"Output yang Dihasilkan:
3.53.1Angka tersebut adalah versi mesin SQLite yang ditanamkan di dalam interpreter Python Anda, bukan versi Python itu sendiri. Dokumentasi SQL lengkapnya tersedia di https://www.sqlite.org/docs.html .
DuckDB: Analitik via pip #
DuckDB dipasang seperti pustaka Python biasa, cukup pip install duckdb di dalam venv. Setelah terpasang, verifikasi dengan atribut __version__:
python3 -c "import duckdb; print(duckdb.__version__)"Output yang Dihasilkan:
1.5.6DuckDB dirancang untuk query analitik: agregasi jutaan baris, window function, hingga membaca berkas Parquet dan CSV langsung dari disk tanpa memuat seluruh isi ke memori. Dokumentasi resminya ada di https://duckdb.org/docs/ .
Verifikasi Koneksi dengan Satu Skrip #
Kedua database embedded tersebut dapat diuji sekaligus lewat skrip pendek berikut, yang membuat database in-memory (tidak menulis berkas apa pun), lalu menjalankan query SELECT sederhana:
import sqlite3
import duckdb
# --- Uji SQLite: database in-memory, tanpa berkas ---
koneksi_sqlite = sqlite3.connect(":memory:")
koneksi_sqlite.execute("CREATE TABLE kota (nama TEXT, penduduk INTEGER)")
koneksi_sqlite.execute("INSERT INTO kota VALUES ('Bandung', 2500000)")
hasil_sqlite = koneksi_sqlite.execute("SELECT nama, penduduk FROM kota").fetchall()
print("SQLite :", sqlite3.sqlite_version, "->", hasil_sqlite)
# --- Uji DuckDB: database in-memory untuk beban analitik ---
koneksi_duck = duckdb.connect()
koneksi_duck.execute("CREATE TABLE penjualan (produk TEXT, jumlah INTEGER)")
koneksi_duck.execute("INSERT INTO penjualan VALUES ('gula', 120), ('kopi', 85)")
hasil_duck = koneksi_duck.execute(
"SELECT produk, jumlah FROM penjualan ORDER BY jumlah DESC"
).fetchall()
print("DuckDB :", duckdb.__version__, "->", hasil_duck)Output yang Dihasilkan:
SQLite : 3.53.1 -> [('Bandung', 2500000)]
DuckDB : 1.5.6 -> [('gula', 120), ('kopi', 85)]Mari kita telaah baris-baris kode di atas:
- Baris 5 (
koneksi_sqlite = sqlite3.connect(":memory:")): string khusus":memory:"memerintahkan SQLite membuat database di dalam memori — data hilang saat skrip selesai, ideal untuk latihan. - Baris 6-8: tiga pernyataan SQL standar membuat tabel, menyisipkan satu baris, lalu mengambil hasilnya dengan
fetchall()dalam bentuk daftar tuple. - Baris 13 (
koneksi_duck = duckdb.connect()): DuckDB tanpa argumen juga membuka database in-memory; untuk menyimpan permanen, berikan nama berkas misalnyaduckdb.connect("analitik.duckdb"). - Baris 16-18: query yang sama berjalan di DuckDB; perhatikan satu
INSERTdapat memuat dua baris sekaligus lewatVALUES ('gula', 120), ('kopi', 85).
PostgreSQL untuk Skenario Produksi #
PostgreSQL adalah pilihan paling umum untuk database transaksional di dunia nyata. Di Ubuntu/Debian, pemasangan dilakukan lewat apt:
sudo apt update
sudo apt install postgresql postgresql-clientSetelah pemasangan, layanan PostgreSQL berjalan sebagai server di latar belakang. Perintah-perintah berikut berjalan di sistem dengan PostgreSQL terpasang — lingkungan penulisan tidak memasang server PostgreSQL, sehingga kita tidak menyertakan contoh keluarannya:
psql --version
sudo systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"Perintah pertama memeriksa versi klien psql, perintah kedua memastikan layanan server berjalan, dan perintah ketiga menjalankan query SELECT version(); sebagai pengguna bawaan postgres. Alternatif tanpa menyentuh sistem operasi: jalankan PostgreSQL sebagai container Docker, cara yang kita bahas di chapter Pengenalan Docker. Dokumentasi resmi PostgreSQL tersedia di https://www.postgresql.org/docs/
.
Database siap, tetapi hampir semua pekerjaan data engineering dimulai dari terminal: memindai berkas, memfilter log, dan merangkai perintah. Keterampilan tersebut kita latih pada chapter Penggunaan Command Line.