PipeCraft

Roadmap Progress

ข้อมูลเบื้องต้นเกี่ยวกับวิศวกรรมข้อมูล (Introduction to Data Engineering) Python สำหรับ Data Engineering พื้นฐาน Linux & CLI สำหรับวิศวกรข้อมูล Git สำหรับระบบงานข้อมูลและทีมพัฒนา พื้นฐานเครือข่าย เว็บเทคโนโลยี และระบบกระจายศูนย์ (Web Fundamentals, Networking & Distributed Systems) SQL ขั้นสูง (Window Functions & Optimization) ฐานข้อมูลไม่ใช่เชิงสัมพันธ์ (NoSQL Databases & Modern Stores) การออกแบบโครงสร้างข้อมูล (Star/Snowflake & SCD) โครงสร้างพื้นฐานเครือข่ายระบบคลาวด์ (Cloud-based Networking) สถาปัตยกรรม Data Lakehouse (Apache Iceberg & MinIO) Local-first Data Engineering ด้วย DuckDB โครงสร้างพื้นฐานในรูปแบบโค้ด (IaC ด้วย Terraform) การแปลงข้อมูลระดับโปรด้วย dbt-core ข้อตกลงร่วมด้านข้อมูล (Data Contracts) การบริการและการส่งต่อข้อมูลวิเคราะห์ (Data Serving & Reverse ETL) การประมวลผลข้อมูลขนาดใหญ่แบบกระจายด้วย Apache Spark ระบบจัดการเวิร์กโฟลว์ข้อมูล (Airflow, Dagster & Prefect) การประมวลผลข้อมูลแบบเรียลไทม์ด้วย Kafka & Redpanda การจัดการคอนเทนเนอร์และคลัสเตอร์ (Containers & Kubernetes) ระบบ CI/CD และการเฝ้าระวังคุณภาพข้อมูล (CI/CD, Monitoring & Testing) ระบบความปลอดภัยและการควบคุมข้อมูล (Security, Governance & Privacy) ระบบปฏิบัติการและประมวลผลโมเดล (Machine Learning & MLOps) รากฐานของ AWS VPC การจัดการเส้นทางขั้นสูงและ NAT Gateway การเชื่อมต่อหลาย VPC และ Hybrid Cloud VPC Endpoints (PrivateLink) ระบบรักษาความปลอดภัยขอบเขตเครือข่าย สถาปัตยกรรมเครือข่ายสำหรับ EKS IPv6 และการจัดการ IP Address สถาปัตยกรรมเครือข่ายระดับโลก แก่นแท้ของสถาปัตยกรรม Kubernetes สถาปัตยกรรมเครื่องและคอมโพเนนต์ เลเยอร์ที่เชื่อมต่อได้ (Pluggable Layers) การรันบนโปรดักชันระดับองค์กร Apache Flink Stateful Stream Processing Real-Time CDC & Event Sourcing at Scale Low-Latency Stream-Table Joins & Windowing Data Lineage & Metadata Graph Engineering Statistical Anomaly Detection & Data Drift Data Incident Management & Automated DLQ Remediation Cloud Data FinOps & Cost Optimization Mechanics Data Mesh & Multi-Tenant Platform Architecture Vector Databases & AI-Ready Data Infrastructure API Fundamentals, Architectures & Core Components API Versioning, Docs, Real-Time & Microservices Production Reliability, Security & Resiliency World-Class Master Architecture & Traffic Management
บทที่ 1: รากฐานวิศวกรรมซอฟต์แวร์และระบบ (Foundations of Software & Systems)

พื้นฐาน Linux & CLI สำหรับวิศวกรข้อมูล

1.3 การประมวลผลข้อความและสตรีมในระบบปฏิบัติการ Linux

สถาปัตยกรรม Linux ทำงานบนหลักการจัดส่งข้อมูลในรูปสตรีมผ่านตัวบ่งชี้ไฟล์ (File Descriptors) ซึ่งช่วยให้นักวิศวกรรมข้อมูลประมวลผลล็อกไฟล์ขนาดใหญ่ได้รวดเร็วโดยใช้หน่วยความจำจำกัด

1. ทฤษฎีและกลไกสตรีมอินพุต/เอาท์พุต (File Descriptors & Linux Standard Streams)

Learning Progression

  • [BASIC] ปูพื้นฐานภาษาเข้าใจง่าย - เข้าใจคอนเซปต์ภาพรวมและการแก้ปัญหาเบื้องต้น
  • [INTERMEDIATE] โค้ด/คอนฟิกไวยากรณ์จริง - การเขียนโค้ดเพื่อใช้งานจริงในระบบ
  • [PROFESSIONAL] Under-the-hood & Performance/FinOps - กลไกเบื้องลึกและการรีดประสิทธิภาพ

Real-World Enterprise Scenario

เคสระบบการเงิน/Big Tech: การรองรับ Transaction จำนวนมหาศาลต่อวินาทีพร้อมประกัน Data Integrity สูงสุด โดยใช้สถาปัตยกรรมที่ยืดหยุ่นและการมอนิเตอร์ระดับสูง

ทฤษฎีและกลไกการทำงาน (How it works): ในเคอร์เนลของ Linux โปรเซสต่าง ๆ จะติดต่อกับทรัพยากร (เช่น ไฟล์ หรือเน็ตเวิร์กซ็อกเก็ต) ผ่านจำนวนตัวเลขจำนวนเต็มบวกที่เรียกว่า **File Descriptors (FD)** โดยมีสัญญาสตรีมมาตรฐาน 3 ตัวหลัก: - `0` (stdin): สตรีมรับข้อมูลเข้าแบบมาตรฐาน - `1` (stdout): สตรีมแสดงผลข้อมูลออก - `2` (stderr): สตรีมแสดงผลข้อผิดพลาดของระบบ เมื่อใช้คำสั่งท่อส่งข้อมูล (**Pipe |**) ระบบปฏิบัติการจะจัดสรรบัฟเฟอร์ขนาดเล็กในระดับเคอร์เนล (Kernel Ring Buffer ขนาด 64KB) เพื่อส่งผ่านข้อมูลจาก stdout ของโปรเซสแรกไปยัง stdin ของโปรเซสถัดไปทันที ช่วยให้รันงานคู่ขนานได้โดยไม่ต้องพักข้อมูลลงฮาร์ดดิสก์

# Redirecting standard output (1) and error (2) streams in Linux CLI
# Save stdout to out.log and redirect stderr to the same place (2>&1)
python3 process_data.py > out.log 2>&1
                    

Use Case ในชีวิตจริง (Real-world Scenario): เมื่อวิศวกรข้อมูลต้องการกรองข้อมูลจากไฟล์ล็อกของเว็บเซิร์ฟเวอร์ขนาด 100GB การกรองโดยใช้ท่อระบายข้อมูล CLI จะใช้แรมเพียง 64KB ตลอดเวลา ทำให้เราวิเคราะห์ระบบได้บนเซิร์ฟเวอร์ขนาดเล็กโดยไม่ต้องเสียทรัพยากรเครื่องหลัก

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): หากโปรเซสทางซ้ายเขียนข้อมูลเร็วกว่าโปรเซสทางขวาอ่านมาก บัฟเฟอร์ 64KB จะเต็ม ส่งผลให้โปรเซสทางซ้ายถูกเคอร์เนลสั่งบล็อกชั่วคราว (Block Write) ซึ่งเป็นเรื่องปกติของกลไก **Backpressure** แต่หากเกิดการตายของโปรเซสปลายทางกลางคัน เคอร์เนลจะส่งสัญญาณ `SIGPIPE` ไปฆ่าตัวเขียน แก้ไขโดยทำระบบดักจับ Error/Exit Code ในสคริปต์

2. การค้นหาและนิพจน์ขั้นสูงด้วย grep (Pattern Matching with grep)

ทฤษฎีและกลไกการทำงาน (How it works): คำสั่ง `grep` สแกนหาคำและรูปแบบข้อความในสตรีมด้วยอัลกอริทึมค้นหาประสิทธิภาพสูง หากป้อนสวิตช์ `-F` (Fixed Strings) ระบบจะรันผ่านอัลกอริทึม **Boyer-Moore** สแกนหาข้อความตรงตัวโดยไม่ต้องเสียเวลาคอมไพล์และประมวลผลตารางนิพจน์ปกติ (Regex state machines) ส่งผลให้ประมวลผลเร็วกว่าการสแกนหาแบบทั่วไปเกือบ 10 เท่า

# Advanced grep patterns: search case-insensitive, show 3 lines of context around errors
grep -i -F "connection failed" /var/log/syslog -C 3
                    

Use Case ในชีวิตจริง (Real-world Scenario): ในระหว่างเหตุการณ์ระบบคลังข้อมูลเชื่อมโยงคลาวด์ล้มเหลว ทีมวิศวกรใช้คำสั่ง `grep -F "ACCESS_DENIED" -r /var/log/pipecraft/` เพื่อกวาดค้นหาไฟล์สิทธิ์การเชื่อมต่อที่เสียหายในทุกโฟลเดอร์ย่อยได้อย่างรวดเร็วในไม่กี่วินาที

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): การรัน Regular Expression ซับซ้อนด้วยคำสั่ง `grep -E` (Extended Regex) บนไฟล์ระดับหลายกิกะไบต์ อาจส่งผลให้ซีพียูรันเต็ม 100% จากสภาวะ backtracking แก้ไขโดยหลีกเลี่ยงการใช้นิพจน์ปกติที่กำกวม หรือหันมาใช้เครื่องมืออย่าง `ripgrep` (`rg`) ซึ่งบิวด์ด้วย Rust และมีความเร็วสูงกว่ามาก

3. การประมวลผลข้อข้อความสตรีมด้วย sed (Stream Editor Mechanics)

ทฤษฎีและกลไกการทำงาน (How it works): `sed` เป็นตัวแก้ไขข้อความแบบสตรีม ทำงานแบบทีละบรรทัดโดยมีบัฟเฟอร์ในแรม 2 ตัวหลัก: 1. **Pattern Space**: บัฟเฟอร์ชั่วคราวเก็บข้อความของบรรทัดปัจจุบันที่อ่านมาจากดิสก์ เพื่อนำมารันตามคำสั่งกรองแปลงที่ป้อน 2. **Hold Space**: บัฟเฟอร์สำรองพิเศษสำหรับฝากข้อความชั่วคราว ใช้เมื่อเราต้องการสลับบรรทัด สลับหัวข้อ หรือนำประวัติบรรทัดก่อนหน้ามาวิเคราะห์ร่วมด้วย

# Replacing connection strings in-place within a config file
sed -i 's/db_port=5432/db_port=6432/g' config.env
                    

Use Case ในชีวิตจริง (Real-world Scenario): ระบบอัปเกรดข้อมูลย้ายพอร์ตฐานข้อมูลจาก Postgres ปกติไปรันผ่าน PgBouncer สคริปต์แก้ไขด่วนจะเรียกใช้ `sed` เพื่อลุยเปลี่ยนค่าตัวแปรในไฟล์คอนฟิกระบบงานทั้งหมดบนเซิร์ฟเวอร์โดยอัตโนมัติ

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): คำสั่ง `sed -i` แก้ไขทับไฟล์จริงทันที หากเขียนนิพจน์ผิดไปนิดเดียวจะส่งผลให้ไฟล์พังถาวร แก้ไขโดยต้องสร้างไฟล์สำรองควบคู่เสมอเมื่อสั่งแก้ไขสด เช่น `sed -i.bak 's/old/new/g' file.txt` ซึ่งจะบันทึกไฟล์เดิมเก็บไว้เป็นความปลอดภัย

4. การวิเคราะห์ข้อมูลและโครงสร้างระเบียนด้วย awk (Column Processing & Logic Parsing)

ทฤษฎีและกลไกการทำงาน (How it works): `awk` คือภาษาสคริปต์เฉพาะทางที่ออกแบบมาเพื่อการประมวลผลข้อความเชิงระเบียน ทำงานโดยอัตโนมัติในการแยกข้อมูลออกเป็นคอลัมน์โดยระบุผ่าน Field Separator (FS, ค่าปริยายคือช่องว่าง) อาร์กิวเมนต์คอลัมน์จะแทนด้วยเครื่องหมาย `$` ตามด้วยคีย์หลัก เช่น `$1` คอลัมน์แรก, `$NF` คอลัมน์สุดท้ายของแถว รันตามบล็อก `BEGIN {} { loop } END {}`

# Grouping web log by status code (column 9) and summing request counts
cat access.log | awk '{status[$9]++} END {for (s in status) print s, status[s]}'
                    

Use Case ในชีวิตจริง (Real-world Scenario): การทำความสะอาดด่วนคัดกรองไฟล์ CSV สรุปข้อมูลยอดขายรายเขต หากข้อมูลมีค่าว่างในคอลัมน์ยอดขาย ให้กรองทิ้งและบวกค่าเฉลี่ยของเขตเก็บลงในรายงานสรุปโดยตรงบน CLI

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): หากสัญลักษณ์แยกฟิลด์ภายในไฟล์ (FS) แตกต่างกันไป (เช่น บางบรรทัดใช้ comma บางบรรทัดใช้ semicolon) หรือมี comma อยู่ในข้อความ ดัชนีคอลัมน์ของ awk จะเพี้ยนทันที แก้ไขโดยสั่งระบุตัวแยกฟิลด์ให้รัดกุมด้วย `awk -F','` หรือเลือกใช้เอนจิ้นที่มีตัว Validate อย่าง DuckDB แทนในกรณีที่ไฟล์มีความซับซ้อนสูง

5. การสั่งการแบบขนานด้วย xargs (Parallel Command Execution)

ทฤษฎีและกลไกการทำงาน (How it works): คำสั่ง `xargs` ทำหน้าที่แปลงข้อมูลที่ส่งผ่าน stdin มาจัดทำรายการอาร์กิวเมนต์เพื่อป้อนส่งต่อให้คำสั่งถัดไป ความสามารถระดับวิศวกรรมข้อมูลของมันคือ สวิตช์สัญญาสั่งการ `-P` (Parallel) ช่วยให้เราก้าวข้ามโพรเซสทำงานขนาน รันคำสั่งจำกัดชุดได้พร้อม ๆ กันบนซีพียูหลายแกน

# Compress 100 log files concurrently, running 8 parallel workers at a time
find /var/log/pipecraft/ -name "*.log" | xargs -P 8 -n 1 gzip
                    

Use Case ในชีวิตจริง (Real-world Scenario): งานล้างโฟลเดอร์ Data Lakehouse เก็บ log เก่าที่ต้องบีบอัดไฟล์ Parquet นับพันพาร์ทิชัน การเรียกใช้งาน xargs ควบคู่ความขนาน 8 งานช่วยลดเวลาทำ Compaction ไฟล์ลงได้เกิน 70% บนเซิร์ฟเวอร์

ข้อควรระวังและวิธีแก้ (Pitfalls & Mitigations): การป้อนคำสั่งแบบขนานโดยไม่จำกัดความจุ CPU อาจสร้างภาระ I/O จนดิสก์และระบบเครือข่ายล็อกค้างชั่วคราว แก้ไขโดยคำนวณจำนวนโพรเซสให้ตรงกับ Core ของระบบหลัก เช่น ตั้งค่า `-P` เท่ากับจำนวนคอร์ประมวลผลจริง และจำกัดจำนวนข้อมูลต่อรอบผ่านพารามิเตอร์ `-n`

6. sysctl Kernel Tuning & Memory Leak Debugging

ทฤษฎีและกลไกการทำงาน:
Linux มีพารามิเตอร์ของระบบระดับ Kernel ที่ปรับแต่งได้ผ่านคำสั่ง sysctl (เช่น เครือข่าย, หน่วยความจำ) หากแอปพลิเคชันมีปัญหา Memory Leak (จอง RAM แล้วไม่ยอมคืน) เราสามารถใช้เครื่องมือโปรไฟล์หน่วยความจำ และตรวจสอบ OOM (Out Of Memory) Killer ผ่าน Syslog เพื่อวิเคราะห์ปัญหาการใช้ความจำผิดปกติได้

# ดูการตั้งค่า vm.swappiness (ค่ายิ่งน้อยยิ่งหลีกเลี่ยงการใช้ Swap)
sysctl vm.swappiness

# ค้นหาแอปที่ถูก OOM Killer ฆ่าทิ้งใน Log
dmesg -T | grep -i oom-killer
                    

Use Case ในชีวิตจริง:
เซิร์ฟเวอร์ Database ทำงานช้าลงเรื่อยๆ จนพังทุกสุดสัปดาห์ ทีม Data Engineer เช็ค dmesg พบว่า OOM Killer ทำงาน จากนั้นตรวจสอบด้วย top และ Valgrind พบว่ามีสคริปต์ Python ตัวหนึ่งโหลดไฟล์ขนาดใหญ่ค้างไว้ในตัวแปรไม่ยอมลบ (Memory Leak) จึงแก้โค้ดให้ทำ Garbage Collection และปรับแต่ง sysctl vm.overcommit_memory ป้องกันไม่ให้แอปดึงหน่วยความจำเกินลิมิต

ข้อควรระวังและวิธีแก้:
* Pitfall: ปรับ sysctl ผิดพลาด เช่นตั้ง swappiness=0 อย่างดุดันบนเครื่องที่มี RAM น้อย อาจทำให้ OS ล่มทันทีที่ RAM เต็ม
* Mitigation: ควรทดสอบค่าพารามิเตอร์บนเครื่อง Staging ก่อน และเมื่อมั่นใจแล้วจึงนำไปเขียนใน /etc/sysctl.conf เพื่อให้มีผลถาวร

Weekend Sandbox Challenge: Advanced Text Transformation using Bash Pipes

โจทย์ปฏิบัติการ: จงเขียนชุดคำสั่ง Bash หนึ่งบรรทัด (One-Liner) เชื่อมต่อด้วยท่อส่งข้อมูล (Pipes) เพื่อทำการดึงวิเคราะห์ไฟล์สถิติ โดยคัดกรองเฉพาะบรรทัดที่เป็นเออเร่อ (`ERROR`) และใช้ `awk` ในการนับยอดความยาวคำเพื่อรายงานยอดสรุป

# Create a simulated log file
cat << 'EOF' > test.log
2026-07-15 INFO system_up
2026-07-15 ERROR timeout_db
2026-07-15 ERROR access_denied
EOF

# Find all ERROR lines, extract the third column, and count occurrences
grep "ERROR" test.log | awk '{print $3}' | sort | uniq -c
                    

Senior Technical Interview Q&A

Q1: จงอธิบายการทำงานของระบบ Input/Output Redirection และการส่งท่อข้อมูล (Pipes) ในเคอร์เนลของ Linux?

A1: Linux มองทุกอย่างเป็นไฟล์รวมถึง Input/Output โดยใช้ File Descriptors: stdin (0), stdout (1), stderr (2) การทำ redirection (`>` หรือ `2>`) เป็นการสลับปลายทางชี้ตำแหน่ง File Descriptor ส่วนการเชื่อมท่อข้อมูล (Pipe `|`) เคอร์เนลจะจำลองหน่วยความจำส่วนกลางชั่วคราวเพื่อต่อเชื่อม stdout ของคำสั่งแรกไปเข้า stdin ของคำสั่งถัดไปโดยตรงโดยไม่มีการเขียนพักข้อมูลลงดิสก์

Q2: ความแตกต่างระหว่างการรันปิดจ๊อบข้อมูลด้วยคำสั่ง SIGTERM (15) และ SIGKILL (9) คืออะไร และส่งผลต่อความคงอยู่ของข้อมูลในท่อส่งอย่างไร?

A2: `SIGTERM` ส่งคำขอเพื่อยกเลิกอย่างสุภาพ (Graceful Shutdown) อนุญาตให้แอปพลิเคชันล้างหน่วยความจำ ปิดการเชื่อมต่อฐานข้อมูล และล้างไฟล์ชั่วคราวก่อนปิดตัว ในขณะที่ `SIGKILL` คือคำสั่งปิดทันทีระดับเคอร์เนลโดยไม่ยินยอมให้แอปพลิเคชันเคลียร์แรม มีความเสี่ยงสูงที่จะทำให้ข้อมูลค้างครึ่งๆ กลางๆ จนไฟล์เสียหาย (Data Corruption)

Interactive Linux Terminal Simulator

Interactive CLI

เป้าหมาย: ใช้คำสั่ง grep ค้นหาแถวที่มีคำว่า ERROR ในไฟล์ล็อก data/logs/server.log หรือใช้ ls ค้นหารูปแบบไฟล์

bash - user@pipecraft:~ Active
Welcome to PipeCraft Terminal v1.0.0. Type 'help' for commands.
user@pipecraft:~$ Try running 'ls' or 'cat data/logs/server.log'
user@pipecraft:~$

ข้อดี / จุดเด่น & ข้อเสีย / ข้อควรระวัง

ข้อดี / จุดเด่น

  • ใช้หน่วยความจำน้อยมากและมีความเร็วสูงสุดในการประมวลผลสคริปต์ขนาดเล็ก
  • เหมาะสำหรับเขียนเป็นสคริปต์ควบคุมการทำงานรอบรับสิทธิ์ในเครื่องเซิร์ฟเวอร์

ข้อเสีย / ข้อควรระวัง

  • พิมพ์คำสั่งผิดพลาดเพียงจุดเดียวอาจทำให้ลบฐานข้อมูลจริงทั้งหมดได้ทันที
  • ไวยากรณ์ซับซ้อนและอ่านทำความเข้าใจยากขึ้นเมื่อเขียนสคริปต์ที่มีเงื่อนไขยุ่งยาก

ปฏิบัติการจริง (Lab Practice)

Bilingual Guide

แล็บ: พัฒนา Shell Script ตรวจเช็คล็อกไฟล์ผิดปกติ

วิธีรันแล็บปฏิบัติการบนเครื่องจริง (Local Terminal Execution Blueprint)

เนื่องจากปฏิบัติการ Data Engineering / DevOps ระดับสูงต้องรันบน Environment จริง ขั้นตอนด้านล่างนี้คือคำสั่งสำหรับนำไปรันบน Terminal / Docker ในเครื่องของคุณ:

1. สร้างโฟลเดอร์ปฏิบัติการและเตรียมไฟล์ Environment
mkdir -p pipecraft-lab && cd pipecraft-lab
python3 -m venv venv && source venv/bin/activate
pip install --upgrade pip pandas polars pytest requests
2. จำลองการสร้างและรันระบบประมวลผล (Run Pipeline Command)
# Run execution pipeline test
python3 -c "
import polars as pl
print(' [PipeCraft Lab] Running local pipeline engine...')
df = pl.DataFrame({'id': [1, 2, 3], 'status': ['SUCCESS', 'SUCCESS', 'AUDITED']})
print(df)
" 
3. ตรวจสอบการผ่านเกณฑ์และการทำงาน (Data Quality Assertions)
# Verify clean execution exit status
echo " PipeCraft Local Lab Execution Completed Successfully!"

💡 คำแนะนำ & ทริกเด็ด

ใช้คำสั่ง grep -r 'ERROR' /path/to/logs/ เพื่อค้นหาคำว่า ERROR ภายในทุกไฟล์ในโฟลเดอร์ย่อยทั้งหมดได้อย่างรวดเร็วโดยไม่ต้องไล่ดูทีละไฟล์