Episode ini membawa SQL kalian ke skala enterprise: cloud data warehouse seperti BigQuery, Snowflake, dan Redshift. Kalian akan memahami perbedaan warehouse vs OLTP, menulis query untuk dataset raksasa, memakai SQL dialect modern, dan mengendalikan biaya query

Hingga episode 15 kalian berlatih di database kecil (PostgreSQL lokal). Di dunia nyata, data analis hidup di data warehouse cloud: BigQuery, Snowflake, atau Redshift, tempat miliaran baris disimpan dan dianalisis. Perbedaannya bukan sekadar "lebih besar" — arsitektur, dialect SQL, dan cara berpikir tentang biaya semuanya berubah.
Episode ini menjembatani SQL yang sudah kalian kuasai ke skala warehouse. Fokusnya tiga hal: memahami mengapa warehouse berbeda dari OLTP, menulis query untuk data raksasa (dengan dialect modern), dan mengendalikan biaya — karena di cloud, query yang ceroboh adalah tagihan yang menyakitkan.
Database operasional (OLTP) dan data warehouse dirancang untuk pekerjaan yang berlawanan:
| Aspek | OLTP (PostgreSQL/MySQL) | Warehouse (BigQuery/Snowflake) |
|---|---|---|
| Tujuan | Proses transaksi real-time | Analisis & agregasi skala besar |
| Beban | Banyak query kecil + tulis | Query besar, baca dominan |
| Skema | Dioptimalkan untuk insert | Kolumnar, dioptimalkan untuk scan |
| Data | Historis terbatas | Historis panjang, sering full snapshot |
| Pengguna | Aplikasi | Analis & BI tools |
Kunci teknisnya: warehouse menyimpan data kolumnar, sehingga membaca satu kolom dari miliaran baris itu murah — asalkan kalian hanya memilih kolom yang dibutuhkan. Ini mengubah kebiasaan SQL kalian: SELECT * yang tidak berbahaya di OLTP bisa jadi mahal di warehouse.
Semua warehouse memakai SQL, tetapi dengan dialect yang sedikit berbeda. Contoh memakai BigQuery:
SELECT
FORMAT_DATE('%Y-%m', order_date) AS bulan,
COUNT(DISTINCT customer_id) AS customers,
SUM(amount) AS revenue
FROM `project.dataset.orders`
WHERE order_date >= '2026-01-01'
GROUP BY bulan
ORDER BY bulan;Perhatikan FORMAT_DATE (pengganti to_char), dan nama tabel berformat project.dataset.tabel dengan backtick. Di Snowflake tabel berbentuk database.schema.table:
SELECT
DATE_TRUNC('month', order_date) AS bulan,
COUNT(DISTINCT customer_id) AS customers,
SUM(amount) AS revenue
FROM analytics.dbt_orders
WHERE order_date >= '2026-01-01'
GROUP BY bulan
ORDER BY bulan;Jangan panik dengan perbedaan kecil — kalian belajar sekali, dialect tinggal disesuaikan. Sebagian besar konsep episode 3-4 (JOIN, window, CTE) berlaku persis sama.
Di dataset miliaran baris, tiga kebiasaan ini menjadi wajib:
SELECT customer_id, amount, order_date
FROM `project.dataset.orders`
WHERE order_date >= '2026-06-01';Warehouse besar hampir selalu dipartisi (misal per tanggal). Filter pada kolom partisi membuat query hanya membaca bagian yang relevan:
SELECT SUM(amount) AS revenue
FROM `project.dataset.orders`
WHERE order_date BETWEEN '2026-06-01' AND '2026-06-30'; -- baca 1 bulan, bukan 3 tahunJoin di warehouse adalah operasi mahal. Kurangi dengan memfilter dan meng-agregasi sebelum join, serta memahami kardinalitas tabel (mana fakt, mana dimensi).
Note
Prinsip yang sama dengan episode 4, tetapi tekanannya jauh lebih besar: di OLTP, query buruk memperlambat satu pengguna; di warehouse berbayar, query buruk juga memperlambat tagihan kalian.
Di cloud, biaya sebanding dengan volume data yang dipindai (BigQuery) atau waktu komputasi (Snowflake). Tiga senjata pengendali biaya:
| Praktik | Mengapa |
|---|---|
| Filter kolom partisi | Data yang tidak dipindai tidak ditagih |
| Agregasi sebelum ekspor | Jangan tarik miliaran baris ke laptop |
| Gunakan materialized view / tabel ringkas | Hasil agregat siap pakai, murah diquery |
Di BigQuery kalian bisa melihat estimasi data yang dipindai sebelum eksekusi:
-- Klik "Query settings" → centang "Dry run" (BigQuery console)
SELECT COUNT(*) FROM `project.dataset.events`; -- tampil "This query will process ~2.1 TB"Estimasi dry run ini menjadi kebiasaan defensif terbaik: kalian tahu biaya sebelum data dipindai. Di Snowflake, ekuivalennya adalah memeriksa CREDITS_USED per query dan QUERY_PROFILE untuk menemukan langkah yang boros.
Sebagian besar analis tidak menulis SELECT di warehouse langsung setiap hari — mereka memakai lapisan di atasnya:
Posisi kalian sebagai analis adalah pengguna cerdas lapisan-lapisan ini: memahami apa yang terjadi di balik layar, mampu menulis query manual saat perlu, dan tahu kapan harus berkolaborasi dengan data engineer.
SELECT * di tabel raksasa. Pilih kolom; warehouse kolumnar menghargai selektivitas.Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kalian memasuki skill paling dicari untuk analis tahun 2026: dbt & Analytics Engineering — transformasi SQL sebagai kode dengan model, test, dan version control, plus membangun pipeline transformasi pertama. Warehouse sudah kalian pahami; sekarang saatnya memproduksi data dengan benar!