Lewati ke konten utama

C4 · Modul 02

Format dan penyimpanan

41 langkah singkat, dari mudah sampai tantangan.

  1. Level 1

    Kenal

  2. Level 2

    Paham

  3. Level 3

    Terapkan

  4. Level 4

    Tantangan

  5. Level 5

    Pendalaman

Intinya

  • Terima format apa pun dari sumber, simpan salinan mentahnya, lalu ubah secepatnya ke format kolumnar bertipe (Parquet).
  • CSV dibaca dengan skema per sumber yang ditulis: pemisah, pengodean, tipe, format tanggal, token kosong. Jangan pernah menebak (format="mixed", sep=None).
  • Bilangan yang bisa kosong memakai Int64; uang tidak pernah float64.
  • Parquet menyimpan skema dan statistik min/maks di footer, sehingga mesin kueri bisa melewati row group (predicate pushdown); urutan baris menentukan ukuran dan seberapa banyak yang bisa dilewati.

Sebelum mulai

±6 jam.

Modul ini memakai materi di bawah. Belum yakin? Ulas dulu bagian yang disebut.

Hasil belajar: memilih format berkas (CSV, JSON, JSON Lines, Parquet, Arrow) dengan alasan yang terukur: tata letak baris atau kolom, skema, kompresi, dan cara membacanya sebagian; membaca CSV yang ambigu tanpa menebak (pemisah, kutip RFC 4180, desimal dan ribuan, pengodean dan BOM, tanggal dd/mm/yyyy, token kosong, kolom yang muncul di tengah jalan); menulis baca_mesin_a, baca_mesin_b, dan baca_pos yang mengubah dua format mesin kasir ke skema normal POS; membedah berkas Parquet (footer, row group, kamus dan RLE, statistik min/maks) dan memakai statistiknya untuk melewati row group; memilih urutan baris, kompresi, dan ukuran row group dengan angka ukuran berkas sebagai alasan.

Hasil lab: gudang.py berisi baca_mesin_a, baca_mesin_b, baca_pos sesuai kontrak, dan data/lapisan/pos_mentah.parquet (1.529 baris, terurut waktu, terkompresi zstd) yang isinya dicocokkan dengan CSV asal. Contoh diuji dengan Python 3.12 dan 3.13, pandas 3.0.2, pyarrow 22.0.0, dan DuckDB 1.5.1 (_kerangka/requirements.txt). Ukuran berkas Parquet yang dicetak bergantung pada versi pyarrow; dengan versi lain angkanya bisa bergeser beberapa byte, tetapi perbandingannya tetap.

Istilah di modul ini (26)

Ketuk istilah untuk melihat penjelasannya. Di materi, istilah bergaris titik membuka kartu yang sama. Semua istilah course

Bahan modul

Semua kode, latihan, dan data modul ini dalam satu zip, untuk dijalankan di laptop atau Google Colab.

  • 17 contoh kode
  • 8 berkas latihan + tes
  • 68 berkas data
  • requirements.txt
Lihat isi zip
  • BACA-DULU.txt
  • pos_mesin.py
  • contoh_c4_02_25.py
  • contoh_c4_02_56.py
  • contoh_c4_02_110.py
  • contoh_c4_02_177.py
  • contoh_c4_02_201.py
  • contoh_c4_02_229.py
  • contoh_c4_02_289.py
  • contoh_c4_02_333.py
  • contoh_c4_02_380.py
  • contoh_c4_02_407.py
  • contoh_c4_02_826.py
  • contoh_c4_02_979.py
  • contoh_c4_02_1053.py
  • contoh_c4_02_1262.py
  • contoh_c4_02_1461.py
  • contoh_c4_02_1553.py
  • contoh_c4_02_1621.py
  • test_c4_02_1.py
  • test_c4_02_2.py
  • test_c4_02_3.py
  • test_c4_02_4.py
  • test_c4_02_6.py
  • test_c4_02_8.py
  • test_c4_02_5.py
  • test_c4_02_7.py
  • cdc_pelanggan.jsonl
  • pemasok_api/halaman_001.json
  • pemasok_api/halaman_002.json
  • pemasok_api/halaman_003.json
  • pemasok_api/halaman_004.json
  • pemasok_api/halaman_005.json
  • pos_harian/mesin_a_2026-09-01.csv
  • pos_harian/mesin_a_2026-09-02.csv
  • pos_harian/mesin_a_2026-09-03.csv
  • pos_harian/mesin_a_2026-09-04.csv
  • pos_harian/mesin_a_2026-09-05.csv
  • pos_harian/mesin_a_2026-09-06.csv
  • pos_harian/mesin_a_2026-09-07.csv
  • pos_harian/mesin_a_2026-09-08.csv
  • pos_harian/mesin_a_2026-09-09.csv
  • pos_harian/mesin_a_2026-09-10.csv
  • pos_harian/mesin_a_2026-09-11.csv
  • pos_harian/mesin_a_2026-09-12.csv
  • pos_harian/mesin_a_2026-09-13.csv
  • pos_harian/mesin_a_2026-09-14.csv
  • pos_harian/mesin_a_2026-09-15.csv
  • pos_harian/mesin_a_2026-09-16.csv
  • pos_harian/mesin_a_2026-09-17.csv
  • pos_harian/mesin_a_2026-09-18.csv
  • pos_harian/mesin_a_2026-09-19.csv
  • pos_harian/mesin_a_2026-09-20.csv
  • pos_harian/mesin_a_2026-09-21.csv
  • pos_harian/mesin_a_2026-09-22.csv
  • pos_harian/mesin_a_2026-09-23.csv
  • pos_harian/mesin_a_2026-09-24.csv
  • pos_harian/mesin_a_2026-09-25.csv
  • pos_harian/mesin_a_2026-09-26.csv
  • pos_harian/mesin_a_2026-09-27.csv
  • pos_harian/mesin_a_2026-09-28.csv
  • pos_harian/mesin_a_2026-09-29.csv
  • pos_harian/mesin_a_2026-09-30.csv
  • pos_harian/mesin_b_2026-09-01.csv
  • pos_harian/mesin_b_2026-09-02.csv
  • pos_harian/mesin_b_2026-09-03.csv
  • pos_harian/mesin_b_2026-09-04.csv
  • pos_harian/mesin_b_2026-09-05.csv
  • pos_harian/mesin_b_2026-09-06.csv
  • pos_harian/mesin_b_2026-09-07.csv
  • pos_harian/mesin_b_2026-09-08.csv
  • pos_harian/mesin_b_2026-09-09.csv
  • pos_harian/mesin_b_2026-09-10.csv
  • pos_harian/mesin_b_2026-09-10_ulang.csv
  • pos_harian/mesin_b_2026-09-11.csv
  • pos_harian/mesin_b_2026-09-12.csv
  • pos_harian/mesin_b_2026-09-13.csv
  • pos_harian/mesin_b_2026-09-14.csv
  • pos_harian/mesin_b_2026-09-15.csv
  • pos_harian/mesin_b_2026-09-16.csv
  • pos_harian/mesin_b_2026-09-17.csv
  • pos_harian/mesin_b_2026-09-18.csv
  • pos_harian/mesin_b_2026-09-19.csv
  • pos_harian/mesin_b_2026-09-20.csv
  • pos_harian/mesin_b_2026-09-21.csv
  • pos_harian/mesin_b_2026-09-22.csv
  • pos_harian/mesin_b_2026-09-23.csv
  • pos_harian/mesin_b_2026-09-24.csv
  • pos_harian/mesin_b_2026-09-25.csv
  • pos_harian/mesin_b_2026-09-26.csv
  • pos_harian/mesin_b_2026-09-27.csv
  • pos_harian/mesin_b_2026-09-28.csv
  • pos_harian/mesin_b_2026-09-29.csv
  • pos_harian/mesin_b_2026-09-30.csv
  • pos_harian/mesin_b_2026-10-01.csv
  • requirements.txt