<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Data Engineering on yothinix</title><link>https://yothinix-com.pages.dev/tags/data-engineering/</link><description>Recent content in Data Engineering on yothinix</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 31 Dec 2024 12:04:49 +0700</lastBuildDate><atom:link href="https://yothinix-com.pages.dev/tags/data-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Review: DeepLearning.AI Data Engineering Professional Certificate</title><link>https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/</link><pubDate>Tue, 31 Dec 2024 12:04:49 +0700</pubDate><guid>https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/</guid><description>&lt;p&gt;วันที่ 29 ธันวาที่ผ่านมาผมเพิ่งเรียนจบ &lt;a href="https://www.coursera.org/professional-certificates/data-engineering"&gt;&lt;strong&gt;DeepLearning.AI Data Engineering Professional Certificate&lt;/strong&gt;&lt;/a&gt; มาครับ เป็น Coursera Specialization ตัวที่ 2 ในชีวิต หลังจากได้ตัวแรก &lt;a href="https://www.coursera.org/specializations/developing-apps-gcp"&gt;&lt;em&gt;Developing Application with Google Cloud&lt;/em&gt;&lt;/a&gt; เมื่อหลายปีมาแล้ว&lt;/p&gt;
&lt;p&gt;แต่เอาจริงๆ ผมก็ไม่ได้ตั้งใจว่าจะเก็บเป็น Specialization อะไรหรอกครับ จุดเริ่มต้นของเรื่องราวนี้คือ ผมรู้จัก Joe Reis จากหนังสือ &lt;a href="https://www.amazon.com/Fundamentals-Data-Engineering-Robust-Systems/dp/1098108302"&gt;&lt;em&gt;Fundamentals of Data Engineering&lt;/em&gt;&lt;/a&gt; มาก่อนหน้านี้แล้วกับ Subscribe &lt;a href="https://joereis.substack.com/"&gt;&lt;em&gt;newsletter&lt;/em&gt;&lt;/a&gt; ของเค้าด้วย พอช่วงประมาณเดือนสิงหาถ้าผมจำไม่ผิดนะ อาจารย์ Andrew Ng เปิดตัวเว็บ &lt;a href="https://www.deeplearning.ai/"&gt;&lt;em&gt;deeplearning.ai&lt;/em&gt;&lt;/a&gt; ขึ้นมา แล้วผมก็เหลือบไปเห็นคอร์ส Data Engineering ในนั้นมาว่าจะเปิดตัวเร็วๆ นี้ แถมสอนโดย Joe Reis อีก ผมรอจนถึงเวลาเปิดตัวแล้วเค้าก็เลื่อนเปิด จนช่วงปลายๆ เดือนกันยาถึงเปิด ผมก็เริ่มเรียนตั้งแต่วันแรกเลย&lt;/p&gt;
&lt;p&gt;&lt;img src="https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_ff3bd1488f0be7c9.webp"
srcset="https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_da0c139be77e5dc1.webp 480w, https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_24c67a4c3fc7e13.webp 960w, https://yothinix-com.pages.dev/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_ff3bd1488f0be7c9.webp 1440w"
sizes="(max-width: 960px) 100vw, 960px"
width="1440" height="744"
alt=""
loading="lazy" decoding="async"&gt;
&lt;em&gt;อาจารย์ Joe&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="course-format"&gt;Course Format&lt;/h2&gt;
&lt;p&gt;ตัวคอร์สนี้จั่วหัวว่า Specialization สำหรับคนที่ไม่เคยเรียน Coursera ตัว Specialization หมายความว่าจะเป็นชุดคอร์สที่จะประกอบไปด้วยคอร์สย่อยๆ หลายคอร์ส ถ้าเรียนจบครบทุกตัว นอกจากเราจะได้ Certificate ของแต่ละคอร์สแล้ว เราจะได้ตัว Cert Specialization เพิ่มอีกด้วยครับ ซึ่งโดยตัว Specialization เองสามารถมองเป็น Learning Path ได้ด้วย เพราะจากประสบการณ์ผมแต่ละคอร์สที่เรียงมาให้จะ support ความรู้ให้เราต่อยอดใน Course ถัดๆ ไปได้ครับ&lt;/p&gt;</description><content:encoded><![CDATA[<p>วันที่ 29 ธันวาที่ผ่านมาผมเพิ่งเรียนจบ <a href="https://www.coursera.org/professional-certificates/data-engineering"><strong>DeepLearning.AI Data Engineering Professional Certificate</strong></a> มาครับ เป็น Coursera Specialization ตัวที่ 2 ในชีวิต หลังจากได้ตัวแรก <a href="https://www.coursera.org/specializations/developing-apps-gcp"><em>Developing Application with Google Cloud</em></a> เมื่อหลายปีมาแล้ว</p>
<p>แต่เอาจริงๆ ผมก็ไม่ได้ตั้งใจว่าจะเก็บเป็น Specialization อะไรหรอกครับ จุดเริ่มต้นของเรื่องราวนี้คือ ผมรู้จัก Joe Reis จากหนังสือ <a href="https://www.amazon.com/Fundamentals-Data-Engineering-Robust-Systems/dp/1098108302"><em>Fundamentals of Data Engineering</em></a> มาก่อนหน้านี้แล้วกับ Subscribe <a href="https://joereis.substack.com/"><em>newsletter</em></a> ของเค้าด้วย พอช่วงประมาณเดือนสิงหาถ้าผมจำไม่ผิดนะ อาจารย์ Andrew Ng เปิดตัวเว็บ <a href="https://www.deeplearning.ai/"><em>deeplearning.ai</em></a> ขึ้นมา แล้วผมก็เหลือบไปเห็นคอร์ส Data Engineering ในนั้นมาว่าจะเปิดตัวเร็วๆ นี้ แถมสอนโดย Joe Reis อีก ผมรอจนถึงเวลาเปิดตัวแล้วเค้าก็เลื่อนเปิด จนช่วงปลายๆ เดือนกันยาถึงเปิด ผมก็เริ่มเรียนตั้งแต่วันแรกเลย</p>
<p><img src="/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_ff3bd1488f0be7c9.webp"
       srcset="/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_da0c139be77e5dc1.webp 480w, /deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_24c67a4c3fc7e13.webp 960w, /deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.59.41_hu_ff3bd1488f0be7c9.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="744"
       alt=""
       loading="lazy" decoding="async">
<em>อาจารย์ Joe</em></p>
<h2 id="course-format">Course Format</h2>
<p>ตัวคอร์สนี้จั่วหัวว่า Specialization สำหรับคนที่ไม่เคยเรียน Coursera ตัว Specialization หมายความว่าจะเป็นชุดคอร์สที่จะประกอบไปด้วยคอร์สย่อยๆ หลายคอร์ส ถ้าเรียนจบครบทุกตัว นอกจากเราจะได้ Certificate ของแต่ละคอร์สแล้ว เราจะได้ตัว Cert Specialization เพิ่มอีกด้วยครับ ซึ่งโดยตัว Specialization เองสามารถมองเป็น Learning Path ได้ด้วย เพราะจากประสบการณ์ผมแต่ละคอร์สที่เรียงมาให้จะ support ความรู้ให้เราต่อยอดใน Course ถัดๆ ไปได้ครับ</p>
<p>ซึ่งใน Specialization นี้จะแบ่งเป็น Course ย่อย 4 คอร์สคือ</p>
<p><img src="/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.58.03_hu_96b4265168383280.webp"
       srcset="/deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.58.03_hu_7d4234c683d753f0.webp 480w, /deeplearning-ai-data-engineering/Screenshot-2567-12-31-at-11.58.03_hu_96b4265168383280.webp 960w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="960" height="588"
       alt=""
       loading="lazy" decoding="async"></p>
<p>ในแต่ละคอร์สย่อยจะใช้เวลาประมาณ 3-4 สัปดาห์แล้วแต่คอร์ส (แต่ส่วนใหญ่ 4 ยกเว้นคอร์ส 3) โดยในแต่ละสัปดาห์นั้น จะแบ่งเป็น Video Lecture ประมาณ 1.30 - 2 hrs ตามมาด้วย Lab Assignments 2-4 ตัว อันนี้แล้วแต่สัปดาห์เลย แล้วปิดท้ายด้วย Weekly Quiz 10 ข้อทุกสัปดาห์ โดยตัว Lab Assignment บางตัวกับ Weekly Quiz จะเป็นตัวตัด Grade ว่าเราจะเรียนผ่านหรือไม่ผ่านในตอนจบแต่ละคอร์สโดยต้องผ่าน 80% ขึ้นไปถึงจะผ่านในหัวข้อนั้นๆ</p>
<p>ด้วยความที่ตัวคอร์สวางตารางเป็นสัปดาห์ให้ทำให้แต่ละอาทิตย์จะมี Deadline ของแต่ละ Assignment, Quiz ที่ต้องเรียนให้จบภายในอาทิตย์นั้น แต่จริงๆ จะเกินก็ได้ แต่ส่วนตัวผมแนะนำว่าให้พยายามเรียนของแต่ละอาทิตย์ให้จบภายในอาทิตย์นั้น เพราะพอมันสะสมไปเรื่อยๆ มันเหนื่อยมากครับ (แค่พยายามเรียนให้จบแต่ละอาทิตย์ก็เหนื่อยละ)</p>
<p>สุดท้ายครับ ถ้าจะได้ Certificate กับทำ Lab ต้อง Subscribe Coursera ด้วยซึ่งอยู่ที่ $49 ต่อเดือนครับ ตั้งแต่เริ่มจนจบคอร์สใช้เวลาประมาณ 3 เดือนหรือ 15 สัปดาห์ ผมแนะนำมากๆ ว่าให้จัดสรรเวลาเรียนกับชีวิตดีๆ ครับเพราะมันกินเวลาประมาณ 3-6 ชม. ต่อสัปดาห์เลย แต่ไม่แนะนำให้เรียนอัดรวดเดียวครับ เพราะเนื้อหามันเยอะจริงๆ แล้วอาจจะไม่ค่อยได้อะไรกลับไป</p>
<h2 id="who-should-taking-this-course">Who should taking this course</h2>
<p>ส่วนตัวผมที่เป็น Role Data Engineer มาเกือบๆ 3 ปีกับประสบการณ์ Software Engineer รวม 10 ปี ผมขอแบ่งคำแนะนำหัวข้อนี้ออกเป็น 2 กลุ่มใหญ่ๆ ละกันครับ</p>
<h3 id="beginner--freshly-graduated">Beginner / Freshly Graduated</h3>
<p>สำหรับมือใหม่ Specialization นี้ผมมองว่าเก็บภาพกว้างได้หมด ตั้งแต่ต้นน้ำ ไปจนถึงปลายน้ำในกลุ่มงาน Data Engineering ครับไล่ตั้งแต่เก็บ Business objective แปลงมาเป็น Technical Requirements มาจนถึงการเลือกใช้เทคโนโลยีแต่ละส่วน ไปจนถึงรูปแบบ data model ที่ส่งมอบตัวข้อมูลเพื่อไปใช้ประโยชน์ต่อไปครับ</p>
<p>แต่ด้วยความที่มันไม่ใช่ Lecture นั่งฟังอย่างเดียวแต่มี Lab ด้วยทำให้ได้มีโอกาสได้ลองใช้เทคโนโลยีหลายๆ อย่างเพื่อประกอบเป็น data pipeline ทั้ง Batch, Streaming เพื่อเพิ่มความมั่นใจและความพร้อมในการจะไปทำงานต่อจริงๆ ด้วย</p>
<p><img src="/deeplearning-ai-data-engineering/Screenshot-2567-12-26-at-18.02.37_hu_497dec6a3a9b3b9a.webp"
       srcset="/deeplearning-ai-data-engineering/Screenshot-2567-12-26-at-18.02.37_hu_bc80c8f63591d2f8.webp 480w, /deeplearning-ai-data-engineering/Screenshot-2567-12-26-at-18.02.37_hu_d76fb4fed693e104.webp 960w, /deeplearning-ai-data-engineering/Screenshot-2567-12-26-at-18.02.37_hu_497dec6a3a9b3b9a.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="882"
       alt=""
       loading="lazy" decoding="async">
<em>Lab Course นี้สนุกมากครับ</em></p>
<h3 id="experienced--seasoned-engineer">Experienced / Seasoned Engineer</h3>
<p>ในส่วนของคนที่มือเปื้อนมาบ้าง ผมว่ามันเป็นการเติมเต็มส่วนที่ขาดมากกว่า เพราะในงานจริงๆ แต่ละบริษัทอาจจะเป็นได้ทั้ง Green field, Brown field แตกต่างกันไป ทำให้โอกาสที่เราจะได้ลอง Tooling / Pattern / Practice ต่างๆ อาจจะไม่ได้ครบทั้งหมดเช่น งานส่วนใหญ่อาจจะทำแต่ Batch processing pipeline ไม่ได้ทำ Streaming pipeline บ่อยๆ หรืออย่างเช่น การทำ Data modeling ให้แต่ละ data user ก็อาจจะตกเป็นงานของ Role อื่นอย่าง Analytic Engineer หรือ Data Analyst แทน ตัวคอร์สนี้เลยเข้ามาเติมเต็มในส่วนที่ขาดหลายๆ ส่วนให้เราได้กลับมารื้อฟื้นปัดฝุ่นความรู้เรา ว่าของพวกนี้ควรจะออกแบบยังไง ส่งมอบยังไงครับ</p>
<p>ต่อไปเป็นรายละเอียดแต่ละคอร์สจากประสบการณ์ผมเองครับ</p>
<h2 id="course-1-introduction-to-data-engineering">Course 1: Introduction to Data Engineering</h2>
<p>สำหรับคอร์สแรกนี้พอมามองย้อนกลับไป ก็ยังคงใช้คำเดิมว่ามันคือความ Overview และ Definition ครับ เพราะคอร์สแรกจะพาเราไปรู้จักนิยามต่างๆ ของคำที่เกี่ยวข้องใน Data Engineering Field แล้วต่อด้วยพระเอกอย่าง Data Engineering Life Cycle ครับ</p>
<p>ตัว Life Cycle พยายามจะวางกรอบงานและเครื่องมือให้อยู่ในรูปแบบเดียวกัน แต่ก็ยังไม่ละองค์ประกอบที่จำเป็นอื่นๆ ในการทำงานเพราะ Data Engineering ก็เป็น kind of Software Engineering แบบนึง ในส่วนของ Undercurrent เลยเป็นส่วนที่ อาจจะไม่อยู่ในรูป flow หลัก แต่เป็นองค์ประกอบที่ขาดไม่ได้ที่เติมเต็มให้ flow หลักทำงานได้ดี</p>
<p><img src="/deeplearning-ai-data-engineering/course1-2_hu_437becb1796e49d4.webp"
       srcset="/deeplearning-ai-data-engineering/course1-2_hu_6a1328b875436f39.webp 480w, /deeplearning-ai-data-engineering/course1-2_hu_732ccda91def12c9.webp 960w, /deeplearning-ai-data-engineering/course1-2_hu_437becb1796e49d4.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="780"
       alt=""
       loading="lazy" decoding="async">
<em>Data Engineering Lifecycle</em></p>
<p>ด้วยความที่คอร์สนี้มีความ Partner กับ AWS ด้วย ส่วนหนึ่งของคอร์สแรกคือการ Intro ให้รู้จัก AWS ด้วยครับ ซึ่งพาให้เราไปรู้จักกับ Well-architected Framework ที่เป็นเซ็ตของคำถามให้เราคิดเวลาเราจะ implement อะไรบน Cloud แต่ที่เสริมขึ้นมาด้วยความเป็นคอร์ส Data Engineering คือการแนะนำให้เรารู้จักสิ่งที่เรียกว่า Principles of Good Data Architecture ครับ ส่วนตัวผมชอบ Section นี้มาก เพราะจากประสบการณ์มันคือเรื่องสำคัญแต่ไม่ใช่ Hard work แต่เป็น Soft work ที่ต้องทำคู่ไปด้วยเพื่อจะทำให้งานหลักออกมาดี</p>
<p><img src="/deeplearning-ai-data-engineering/course1-3_hu_525f5d364a881f45.webp"
       srcset="/deeplearning-ai-data-engineering/course1-3_hu_f7863773b0fcbaff.webp 480w, /deeplearning-ai-data-engineering/course1-3_hu_4094f87e8c911ab1.webp 960w, /deeplearning-ai-data-engineering/course1-3_hu_525f5d364a881f45.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="775"
       alt=""
       loading="lazy" decoding="async">
<em>Principles of Good Data Architecture</em></p>
<p>ในส่วนสุดท้ายของคอร์ส 1 จะพาเราไปแมพความรู้ของ Data Engineering Life Cycle กับวิธีคิดของ Data Engineer ออกมาเป็น Requirements ที่เราจะเอาไปทำงานต่อครับ ซึ่งดีมากๆ ใครยังรับงาน Data Engineer แต่ไม่รู้จะเก็บ requirements ออกมาให้เป็นรูป เป็นร่างยังไง ผมแนะนำในส่วนของสัปดาห์ที่ 4 คอร์สนี้เลย</p>
<p><img src="/deeplearning-ai-data-engineering/course1-1_hu_5c2b02d794a3063c.webp"
       srcset="/deeplearning-ai-data-engineering/course1-1_hu_81c7f7f4d73538cd.webp 480w, /deeplearning-ai-data-engineering/course1-1_hu_a32fb6f16a54dd0e.webp 960w, /deeplearning-ai-data-engineering/course1-1_hu_5c2b02d794a3063c.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="756"
       alt=""
       loading="lazy" decoding="async">
<em>Think like a Data Engineer</em></p>
<h2 id="course-2-source-systems-data-ingestion-and-pipelines">Course 2: Source Systems, Data Ingestion, and Pipelines</h2>
<p>พอเรารู้จักภาพกว้างในคอร์สแรกแล้ว คอร์สสองตัวนี้จะพาเราไปลงลึกใน 2 ก้อนแรกของ Data Engineering Life Cycle คือ Data Generation, Ingestion แล้วเสริมด้วย Undercurrent ทั้ง Security, DataOps, Orchestration ครับ</p>
<p>ส่วนของ Source System ก็คือ Data ต้นน้ำที่เราต้องไปทำงานด้วยในคอร์สนี้พาไปรู้จักทั้งในแกน Structured, Semi-Structured, Unstructured Data และลงลึกไปแต่ละประเภทอีกทั้ง Database (Relational, NoSQL) ที่เล่าไปจนถึง ACID Compliance หรือประเภทอย่าง Object storage, REST API, Logs เรื่อยมาจนถึง Streaming System</p>
<p><img src="/deeplearning-ai-data-engineering/course2-1_hu_8345696ae7683d1a.webp"
       srcset="/deeplearning-ai-data-engineering/course2-1_hu_4bb51f76e635e33d.webp 480w, /deeplearning-ai-data-engineering/course2-1_hu_68ab1403cb4bd293.webp 960w, /deeplearning-ai-data-engineering/course2-1_hu_8345696ae7683d1a.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="785"
       alt=""
       loading="lazy" decoding="async">
<em>Batch Ingestion Patterns</em></p>
<p>ส่วนของ Data Integration นี่จะลงใน Pattern ที่จะอยู่ในกรอบของ frequency ไล่ตั้งแต่ Batch, Micro-batch ไปจนถึง Streaming หรือจะมองในมิติ ETL vs ELT ว่ามีข้อดี ข้อเสียต่างกันยังไง แล้วด้วยความที่คอร์สนี้พื้นฐานอยู่บน AWS เราจะได้ใช้ components อย่าง AWS Glue Job, AWS Kinesis ในการทำแล็บ Data Integration ด้วยครับ</p>
<p>ส่วนของ Undercurrent ในมุมของ Security คือพาไปรู้จัก IAM Security กับ AWS Networking ว่าจะ control ยังไงรวมไปถึงหัด debugging ปัญหา ACL ใน AWS ด้วย ส่วนของ DataOps ในส่วนของทฤษฏีจะแบ่งเป็น 3 pillars: Automation, Observability &amp; Monitoring, Incident Response</p>
<p><img src="/deeplearning-ai-data-engineering/course2-2_hu_7e3cda244961867a.webp"
       srcset="/deeplearning-ai-data-engineering/course2-2_hu_45ec95a3d5aea7df.webp 480w, /deeplearning-ai-data-engineering/course2-2_hu_e780c303ce5296f7.webp 960w, /deeplearning-ai-data-engineering/course2-2_hu_7e3cda244961867a.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="771"
       alt=""
       loading="lazy" decoding="async">
<em>DataOps Pillars</em></p>
<p>โดย Automation จะเน้นไปที่การใช้ Terraform มาช่วย Provision component ต่างๆ ใน AWS แบบ Infrastructure as a Code (IaaS) และ Observability &amp; Monitoring จะเน้นไปที่การใช้ Great Expectation มาช่วยทำ Data Quality กับ AWS Cloudwatch ในการทำ Monitoring ครับ</p>
<p>ในส่วนสุดท้ายของคอร์สนี้คือ Data Orchestration / Pipelines จะสรุปง่ายๆ ว่าไปเรียน Airflow ก็ได้ครับ แต่จะลงไปตั้งแต่ Cron, DAGs, และพาไปรู้จักองค์ประกอบของ Airflow server เรื่อยไปจนถึง API ของ Airflow เช่น Operators, XCom, Variables หรือ TaskFlow API</p>
<p><img src="/deeplearning-ai-data-engineering/course2-3_hu_615683f0e43a37b9.webp"
       srcset="/deeplearning-ai-data-engineering/course2-3_hu_69812b66b6852093.webp 480w, /deeplearning-ai-data-engineering/course2-3_hu_af085327444d25be.webp 960w, /deeplearning-ai-data-engineering/course2-3_hu_615683f0e43a37b9.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="809"
       alt=""
       loading="lazy" decoding="async">
<em>Managed Apache Airflow on AWS</em></p>
<p>พอมามองย้อนกลับไป Course 2 นี่มันเนื้อหาเยอะจนร้องขอชีวิตจริงๆ แหะ</p>
<h2 id="course-3-data-storage-and-queries">Course 3: Data Storage and Queries</h2>
<p>ถ้าคอร์ส 1 กับคอร์ส 2 คืองานที่เราจะได้ทำจริงๆ เป็นการวางองค์ประกอบให้แต่ะละส่วนประสานงานกัน Course 3 นี่ผมเปรียบว่าเป็นรากฐานที่ทำให้ 1+2 ทำงานได้ครับ โดยในคอร์สนี้จะเน้นไปที่การทำงานและการเลือกใช้ Storage ของ data ที่เราดึงมาจาก Source Systems แล้วครับ</p>
<p><img src="/deeplearning-ai-data-engineering/course3-1_hu_ec284f5dd9cc4be0.webp"
       srcset="/deeplearning-ai-data-engineering/course3-1_hu_c0b75c210c6dcce5.webp 480w, /deeplearning-ai-data-engineering/course3-1_hu_c77029eb26e9e371.webp 960w, /deeplearning-ai-data-engineering/course3-1_hu_ec284f5dd9cc4be0.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="793"
       alt=""
       loading="lazy" decoding="async">
<em>Data Storage System &amp; Abstraction</em></p>
<p>โดยเนื้อหานี่ไล่ตั้งแต่ Physical storage อย่าง Magnetic Disk, SSD, RAM, CPU Cache ขึ้นมาเป็น Logical storage อย่าง File Hierarchy, Block Storage, Object Storage มาจนชั้น Application storage อย่าง Key-value in-memory, Rows, Columnar, Graph, Vector</p>
<p>พอ components แน่นแล้วก็ยกระดับขึ้นมาเป็น Abstraction อย่าง Data Warehouse, Data Lake, Data Lakehouse ซึ่งไม่ใช่แค่ Abstraction ที่พูดถึง แต่ยังลงไปที่ tooling ที่ช่วยให้มันเกิดขึ้นได้อย่าง MPP (Redshift), Open table format (Iceberg) ด้วยครับ</p>
<p><img src="/deeplearning-ai-data-engineering/course3-3_hu_33e80d1182878bdf.webp"
       srcset="/deeplearning-ai-data-engineering/course3-3_hu_4cb00780febe5153.webp 480w, /deeplearning-ai-data-engineering/course3-3_hu_19411d7af8112db6.webp 960w, /deeplearning-ai-data-engineering/course3-3_hu_33e80d1182878bdf.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="795"
       alt=""
       loading="lazy" decoding="async">
<em>Data Lakehouse on AWS</em></p>
<p>และแน่นอนว่าเราจะพูดถึง Application Storage โดยไม่พูดถึง Queries ไม่ได้ครับ ใน ส่วนนี้นั้นเรียกได้ว่าเขียน Queries จนต้องร้องขอชีวิตตั้งแต่ basic อย่าง select, from, where, join, aggregation เรื่อยไปจน advance statement อย่าง SQL Functions, CTEs, condition expression, sub-queries, และ Sliding windows ครับ นอกจากนี้ยังพาเราไปรู้จักกับเทคนิคการ Optimize queries บน database อย่างการ Index บน RDBMS หรือ Sort key บน Columnar DB และปิดท้ายด้วยการเขียน Queries บน Streaming System โดยอาศัย Window pattern หลายๆ แบบครับ</p>
<h2 id="course-4-data-modeling-transformation-and-serving">Course 4: Data Modeling, Transformation, and Serving</h2>
<p>พอผ่านคอร์ส 1-3 มาเราจะเริ่มมีไอเดีย, เครื่องมือและเทคนิคแล้วว่าจะพา Data จากจุด A → B ยังไง ในส่วนของคอร์ส 4 จะเป็นเรื่องของการวาง Model ของ Data เพื่อให้ Downstream system หรือ Data User เอา Data ไปใช้งานได้ง่ายและเกิดประโยชน์สูงสุดครับ</p>
<p>พาร์ท Data Modeling นี่ส่วนหนึ่งเหมือนกลับไปเรียนวิชา Database สมัยมหาลัยมาก ไล่ตั้งแต่ Normalization (1NF → 3NF), Star Schema แต่ก็เพิ่งรู้ว่าในโลก Data Warehouse เค้าแบ่งกันเป็น 2 ค่ายคือ ค่าย Inmon ที่เน้น Join ทำ 3NF กับค่าย Kimball ที่เน้นการวาง Star Schema ซึ่งในคอร์สนี้ไล่ให้เห็นแต่ละแบบเลยว่ามีข้อดี ข้อเสียยังไงบ้าง นอกจากนี้ยังมีค่ายที่ 3 อย่าง Data Vault ที่แบ่ง Model เป็น Hub, Link, Satellite ด้วย รวมไปถึงเทคนิคที่ง่ายที่สุดอย่าง One Big Table (OBT) ด้วย ซึ่งเราจะได้ฝึกการวาง Data modeling เหล่านี้ผ่านเครื่องมืออย่าง dbt ด้วยครับ</p>
<p><img src="/deeplearning-ai-data-engineering/course4-1_hu_bfae6860512012af.webp"
       srcset="/deeplearning-ai-data-engineering/course4-1_hu_c2a2282ff3e30ff7.webp 480w, /deeplearning-ai-data-engineering/course4-1_hu_f83c0cb99bf22ed6.webp 960w, /deeplearning-ai-data-engineering/course4-1_hu_bfae6860512012af.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="798"
       alt=""
       loading="lazy" decoding="async">
<em>Data Modeling Approaches</em></p>
<p>ในส่วนของ Data Modeling ยังมีอีกส่วนคือการเตรียม Data ของเราเพื่อสนับสนุนการทำ Feature Engineering ใน ML Project Lifecycle Framework ครับ ทั้งในส่วนที่เป็น Numerical data อย่าง Handling missing, Scaling Numerical, Encoding หรือส่วนของ Text data อย่าง Cleaning, Normalization, Tokenization, Remove stop words, Lemmatization ซึ่งในแล็บได้เขียน Pandas กับ Scikit-learn เตรียม data อย่างเมามันครับ</p>
<p>พอเข้าเนื้อหา Data Transformation จะเป็น Transformation ในส่วนของปลายน้ำมากกว่าตอนที่เราทำ Data Ingestion ครับ โดยจะพูดถึงเทคนิคอย่าง Truncate &amp; Reload, Capture update, Capture delete มีแวะมาเล่าเรื่อง Hadoop ให้เราเข้าใจก่อนจะยกระดับไปถึง Spark แล้วเน้นไปที่การเลือกใช้ระหว่าง Spark UDF, DataFrame API, Spark SQL และ Spark Streaming</p>
<p><img src="/deeplearning-ai-data-engineering/course4-3_hu_9116831f26f02c2f.webp"
       srcset="/deeplearning-ai-data-engineering/course4-3_hu_cb5ee883ad9d5629.webp 480w, /deeplearning-ai-data-engineering/course4-3_hu_abf236e1431c60e1.webp 960w, /deeplearning-ai-data-engineering/course4-3_hu_9116831f26f02c2f.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="790"
       alt=""
       loading="lazy" decoding="async">
<em>Spark DataFrame API</em></p>
<p>ในส่วนสุดท้ายของคอร์ส Serving จะย้ำเราถึงรูปแบบของการส่งมอบครับว่าจะทำยังไงถึงจะส่งมอบ Data แต่ยัง Compliance กับ Data Management อยู่ ซึ่งแต่ละ Use case ทั้ง Analytics, ML ก็จะมีความต้องการรวมถึงรูปแบบที่แตกต่างกัน เลยต้องเกิดสิ่งที่เรียกว่า Semantic Layer ขึ้นมาขั้นอีกชั้นนึง ซึ่งตัว Semantic Layer นี้จะ Implement ในรูปแบบของ View / Materialize View / Dataset ใน Superset แตกต่างกันไปแต่ละ Use case ครับ</p>
<p><img src="/deeplearning-ai-data-engineering/course4-4_hu_e50f42faf6387671.webp"
       srcset="/deeplearning-ai-data-engineering/course4-4_hu_4d90def033e1a1a5.webp 480w, /deeplearning-ai-data-engineering/course4-4_hu_a5fca149f351ec4e.webp 960w, /deeplearning-ai-data-engineering/course4-4_hu_e50f42faf6387671.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="811"
       alt=""
       loading="lazy" decoding="async">
<em>Semantic layer</em></p>
<p>ตัวคอร์ส 4 จะจบด้วย Capstone project ครับ เป็นเหมือนการทวนเราอีกรอบให้เราใช้ความรู้ตั้งแต่ต้นน้ำการเก็บ requirements เลือกเทคโนโลยีทำ data pipeline โดย Ingest และทำ Data Quality check ผ่าน component บน AWS อย่าง Glue, transforms เป็น Star Schema ผ่าน dbt แล้ว Serving ด้วย Superset โดยทั้งหมดถูก Orchestrate ผ่าน Airflow</p>
<p><img src="/deeplearning-ai-data-engineering/course4-5_hu_f753c73fc8b4fcdb.webp"
       srcset="/deeplearning-ai-data-engineering/course4-5_hu_c3966b0bb1c8698b.webp 480w, /deeplearning-ai-data-engineering/course4-5_hu_2c145e8d14ec55ab.webp 960w, /deeplearning-ai-data-engineering/course4-5_hu_f753c73fc8b4fcdb.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="640"
       alt=""
       loading="lazy" decoding="async">
<em>Capstone Lab</em></p>
<p>จบแล้วครับ ขอบคุณทุกคนที่อ่านจนจบ ถ้าเขียนไม่ค่อยรู้เรื่องกราบขออภัยเพราะเนื้อหามันเยอะจริงๆ อยากบอกว่าเป็น 3 เดือนที่ได้ความรู้เยอะมาก ล้นมาก แล้วผมมั่นใจมาก ว่าที่ผมเขียนไว้ข้างบนก็ยังเก็บมาไม่หมดกับความรู้ที่ผมได้มาในคอร์สนี้ครับ ถ้าใครตัดสินใจเรียนแล้วขอให้เรียนให้จบครับ มันคุ้มมากกับเวลาที่เสียไป แล้วถ้าใครเรียนจบแล้วเหมือนกัน ขอแสดงความยินดีด้วยคนครับ ถึงใครจะไม่รู้ แต่รู้ไว้ว่าผมคนนึงที่เข้าใจความตั้งใจและเหนื่อยยากในการผ่าน 3 เดือนนี้มาได้ สวัสดีครับ</p>
<p><img src="/deeplearning-ai-data-engineering/Screenshot-2567-12-29-at-10.26.35_hu_3c95abbad7030a06.webp"
       srcset="/deeplearning-ai-data-engineering/Screenshot-2567-12-29-at-10.26.35_hu_48b966ae73768396.webp 480w, /deeplearning-ai-data-engineering/Screenshot-2567-12-29-at-10.26.35_hu_8c048c9c001932cb.webp 960w, /deeplearning-ai-data-engineering/Screenshot-2567-12-29-at-10.26.35_hu_3c95abbad7030a06.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="1114"
       alt=""
       loading="lazy" decoding="async">
<em>จบครบ 4 Course ได้ Certificate Specialization มาเท่ๆ อีกใบ</em></p>
]]></content:encoded></item><item><title>👷📚 เล่าให้ฟัง: ย้ายสายจาก Software Engineer มาเป็น Data Engineer สามเดือนแรก</title><link>https://yothinix-com.pages.dev/first-three-month-as-data-eng/</link><pubDate>Fri, 01 Jul 2022 17:12:12 +0700</pubDate><guid>https://yothinix-com.pages.dev/first-three-month-as-data-eng/</guid><description>&lt;p&gt;โพสนี้เหมือนเป็นภาคต่อจาก &lt;a href="https://yothinix-com.pages.dev/how-to-resign/"&gt;ลาออกยังไงไม่ให้บ้านบึ้ม&lt;/a&gt; ครับคือกระบวนการต่างๆ มันเริ่มตั้งแต่เรายังทำงานในที่เก่าอยู่ โพสนี้เลยจะมาเล่าให้ฟังคร่าวๆ ว่าก่อนจะเริ่มงาน Data Engineer และที่ผ่านมาสามเดือนนี้ผมผ่านอะไรมาบ้าง พร้อมวิธีการเอาตัวรอดในแบบของผมเองละกัน&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 Disclaimer: ความเห็นต่างๆ ในโพสนี้เป็นความคิดเห็นส่วนตัว ไม่ได้เกี่ยวข้องกับบริษัทที่ผมทำงานอยู่ปัจจุบันแต่อย่างใดครับ&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="กอนเรมงาน-1-เดอน"&gt;ก่อนเริ่มงาน 1 เดือน&lt;/h2&gt;
&lt;p&gt;จากตอนที่แล้วผมบอกไว้ว่ามันจะมีช่วงที่เรา lower your light ซึ่งเป็นเวลาที่ดีที่สุดที่เราจะเตรียมตัวกับงานใหม่ จังหวะนี้เป็นช่วงที่ผมหาข้อมูลงานใหม่ให้มากที่สุดครับ ซึ่งจากเท่าที่คุยตอนสัมภาษณ์ผมรู้แค่ว่า Tooling หลักคือ Dagster ช่วงแรกๆ ผมเลยดู Dagster เป็นหลักเลยซึ่ง ณ จุดนี้ถ้ามองย้อนไปผมบอกเลยว่า &lt;a href="https://docs.dagster.io/tutorial"&gt;Tutorial&lt;/a&gt; ของ Dagster มันเป็นกับดักครับ 555 คือมันดูเหมือนจะเข้าใจง่าย job, ops, เขียนเทสได้ อะไรก็ว่าไป แต่ของจริงมันอยู่ใน Concept กับตัวอย่างใน GitHub ของ Dagster เองครับ อันนั้นคือถ้ากระโดดต่อมาจาก Tutorial ก็จะมีความช็อคน้ำหน่อยๆ แต่เดี๋ยว Dagster ผมมาเล่าต่อในอนาคต มีอีกหลายเรื่องเลยให้เล่าครับ&lt;/p&gt;
&lt;p&gt;&lt;img src="https://yothinix-com.pages.dev/first-three-month-as-data-eng/Screen-20Shot-202565-06-30-20at-2007.04.41_hu_3a43fd7e47e1b1c5.webp"
srcset="https://yothinix-com.pages.dev/first-three-month-as-data-eng/Screen-20Shot-202565-06-30-20at-2007.04.41_hu_3a43fd7e47e1b1c5.webp 480w"
sizes="(max-width: 960px) 100vw, 960px"
width="480" height="228"
alt=""
loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;นอกจาก Dagster แล้วผมต้องขุดความทรงจำว่าเพื่อนร่วมงานผมในอนาคต (ซึ่งเป็นเพื่อนร่วมงานในปัจจุบัน) เค้าทำอะไรมาบ้าง ซึ่งโชคดีมากที่เค้าเคยเล่าไว้ใน &lt;a href="https://www.youtube.com/c/LINEDevelopersThailand"&gt;LINE Developers Podcast&lt;/a&gt; ไว้ถึง 2 ตอนเลย เพราะใน Podcast นี้แนะนำไว้ชัดเจนเลยว่า เราควรจะรู้จัก Hadoop ecosystem นะ ซึ่งผมไต่ไปหลายบล็อกมาก ช่วงนั้นเพื่อจะอัพเดทความรู้ Hadoop ตัวเองที่ถูกแช่ไว้ตั้งแต่ปี 2013 ซึ่งในบรรดาบล็อกทั้งหมดที่ผมไล่อ่านมา ผมประทับใจบล็อก &lt;a href="https://tharid.com/posts/good-old-days-hadoop/"&gt;Good Old Days Hadoop&lt;/a&gt; นี้มากครับซึ่งเล่าประวัติ Hadoop ได้เห็นภาพมาก รวมถึงพูดถึง YARN, Spark ไว้นิดหน่อยด้วย ซึ่งตอนนั้นผมยังจับภาพไม่ได้เลยว่ามันเกี่ยวกันยังไง&lt;/p&gt;</description><content:encoded><![CDATA[<p>โพสนี้เหมือนเป็นภาคต่อจาก <a href="/how-to-resign/">ลาออกยังไงไม่ให้บ้านบึ้ม</a> ครับคือกระบวนการต่างๆ มันเริ่มตั้งแต่เรายังทำงานในที่เก่าอยู่ โพสนี้เลยจะมาเล่าให้ฟังคร่าวๆ ว่าก่อนจะเริ่มงาน Data Engineer และที่ผ่านมาสามเดือนนี้ผมผ่านอะไรมาบ้าง พร้อมวิธีการเอาตัวรอดในแบบของผมเองละกัน</p>
<blockquote>
<p>💡 Disclaimer: ความเห็นต่างๆ ในโพสนี้เป็นความคิดเห็นส่วนตัว ไม่ได้เกี่ยวข้องกับบริษัทที่ผมทำงานอยู่ปัจจุบันแต่อย่างใดครับ</p>
</blockquote>
<h2 id="กอนเรมงาน-1-เดอน">ก่อนเริ่มงาน 1 เดือน</h2>
<p>จากตอนที่แล้วผมบอกไว้ว่ามันจะมีช่วงที่เรา lower your light ซึ่งเป็นเวลาที่ดีที่สุดที่เราจะเตรียมตัวกับงานใหม่ จังหวะนี้เป็นช่วงที่ผมหาข้อมูลงานใหม่ให้มากที่สุดครับ ซึ่งจากเท่าที่คุยตอนสัมภาษณ์ผมรู้แค่ว่า Tooling หลักคือ Dagster ช่วงแรกๆ ผมเลยดู Dagster เป็นหลักเลยซึ่ง ณ จุดนี้ถ้ามองย้อนไปผมบอกเลยว่า <a href="https://docs.dagster.io/tutorial">Tutorial</a> ของ Dagster มันเป็นกับดักครับ 555 คือมันดูเหมือนจะเข้าใจง่าย job, ops, เขียนเทสได้ อะไรก็ว่าไป แต่ของจริงมันอยู่ใน Concept กับตัวอย่างใน GitHub ของ Dagster เองครับ อันนั้นคือถ้ากระโดดต่อมาจาก Tutorial ก็จะมีความช็อคน้ำหน่อยๆ แต่เดี๋ยว Dagster ผมมาเล่าต่อในอนาคต มีอีกหลายเรื่องเลยให้เล่าครับ</p>
<p><img src="/first-three-month-as-data-eng/Screen-20Shot-202565-06-30-20at-2007.04.41_hu_3a43fd7e47e1b1c5.webp"
       srcset="/first-three-month-as-data-eng/Screen-20Shot-202565-06-30-20at-2007.04.41_hu_3a43fd7e47e1b1c5.webp 480w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="480" height="228"
       alt=""
       loading="lazy" decoding="async"></p>
<p>นอกจาก Dagster แล้วผมต้องขุดความทรงจำว่าเพื่อนร่วมงานผมในอนาคต (ซึ่งเป็นเพื่อนร่วมงานในปัจจุบัน) เค้าทำอะไรมาบ้าง ซึ่งโชคดีมากที่เค้าเคยเล่าไว้ใน <a href="https://www.youtube.com/c/LINEDevelopersThailand">LINE Developers Podcast</a> ไว้ถึง 2 ตอนเลย เพราะใน Podcast นี้แนะนำไว้ชัดเจนเลยว่า เราควรจะรู้จัก Hadoop ecosystem นะ ซึ่งผมไต่ไปหลายบล็อกมาก ช่วงนั้นเพื่อจะอัพเดทความรู้ Hadoop ตัวเองที่ถูกแช่ไว้ตั้งแต่ปี 2013 ซึ่งในบรรดาบล็อกทั้งหมดที่ผมไล่อ่านมา ผมประทับใจบล็อก <a href="https://tharid.com/posts/good-old-days-hadoop/">Good Old Days Hadoop</a> นี้มากครับซึ่งเล่าประวัติ Hadoop ได้เห็นภาพมาก รวมถึงพูดถึง YARN, Spark ไว้นิดหน่อยด้วย ซึ่งตอนนั้นผมยังจับภาพไม่ได้เลยว่ามันเกี่ยวกันยังไง</p>
<blockquote>
<p>💡 “<em>Software Engineer ทุกคนเราอ่ะเป็น Data Engineer อยู่แล้ว</em> เพียงแค่ความเข้มข้นในการเข้าไปจัดการข้อมูลของเรามันต่างกัน”<br>
- ผมชอบประโยคนี้ของเพื่อนร่วมงานในอนาคตผมมาก</p>
</blockquote>
<p>นอกจาก Podcast ข้างบนผมโชคดีอย่างนึงที่ผมพอจะรู้จักเพื่อนร่วมงานในอนาคตผมอีกคน ซึ่งผมก็ถามไปตรงๆ เลยว่าผมควรดูอะไรก่อนบ้างก็ได้รู้จัก <a href="https://spark.apache.org/">Apache Spark</a> มาซึ่งพอได้ยินแบบนั้นปั๊ป ผมกดเรียนคอร์ส <a href="https://www.manning.com/liveprojectseries/batch-data-pipeline-with-spark">Batch Data Pipeline with Spark</a> แบบไม่ลังเลเลย แล้ว Live Project ของ Manning ดีอย่างนึงคือไม่ใช่แค่ก็อปโค้ดแปะแล้วรันได้ แต่จะคล้ายทำงานจริงๆ มากที่บอกว่า เราอยากได้แบบนี้แหละ แล้วก็มี resource guide ให้คร่าวๆ แต่เราต้องไปเปิด Doc API ของ Spark เองว่าจะใช้ฟังก์ชั่นอะไร มาทำให้งาน Ingestion, Cleaning data เป็นไปแบบที่เราต้องการ แล้วนอกจากนั้นยังมีพวก Tips อะไรแทรกอยู่ด้วยเหมือนเรามีเพื่อนร่วมงานระดับโลกคอยคุยกับเราผ่านตัวหนังสือไปอีก</p>
<p>แต่ยังไม่ทันได้เรียนจนจบคอร์สข้างบนผมก็มีโอกาสเจอเพื่อนร่วมงานในอนาคตผมอีกคน ซึ่งผมก็ถามแบบตรงๆ เหมือนเดิม แต่คำตอบที่ได้มาต่างกันคือผมน่าจะลองไปดู <a href="https://hive.apache.org/">Apache Hive</a> กับ <a href="https://prestodb.io/">Presto</a> ดูซึ่งด้วยความที่เวลาเหลืออีกไม่กี่วันจะเริ่มงานละ ผมเลยลองดูหนังสือ <a href="https://www.amazon.com/Learn-Hive-Day-Complete-Master-ebook/dp/B01N68X9AL">Learn Hive in 1 Day</a> ดู ซึ่งสำหรับคนจะไปดูนะฮะ ข้ามหนังสือเล่มนี้ไปเลยครับ เพราะผมซึ่งไปดู Spark มาก่อนหน้านี้บอกเลยว่าเล่มนี้ไม่ได้ให้ Concept อะไรใหม่ๆ กับเราเลย (แถมพิมพ์ผิดเยอะมากแบบน่ารำคาญ (น่าจะอ่าน Amazon Review ก่อน TT)) แต่อย่างน้อยก็เสียเวลาไม่ถึงวัน</p>
<p><img src="/first-three-month-as-data-eng/Screen-Shot-2565-07-01-at-16.59.12_hu_1160917043245920.webp"
       srcset="/first-three-month-as-data-eng/Screen-Shot-2565-07-01-at-16.59.12_hu_c7a1714628da516a.webp 480w, /first-three-month-as-data-eng/Screen-Shot-2565-07-01-at-16.59.12_hu_1d7934777e59b51f.webp 960w, /first-three-month-as-data-eng/Screen-Shot-2565-07-01-at-16.59.12_hu_1160917043245920.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="325"
       alt=""
       loading="lazy" decoding="async"></p>
<p>ในส่วนของ Presto เราจะไม่สามารถเข้าใจมันได้เลย ถ้าเราไม่เข้าใจ Hive มาก่อนเพราะ Presto ยังต้องพึ่ง component สำคัญของ Hive อย่าง Metastore ในการทำความรู้จักกับข้อมูลที่เก็บอยู่ ซึ่งตอนเรารู้จัก Hive ใหม่ๆ เราคิดว่าว้าวแล้วนะ ที่มันมา Optimize ให้การทำ MPP บน HDFS มันง่ายขึ้นกว่าสมัย Map Reduce มากแล้วการเอา Compute ไปอยู่ใกล้ๆ Disk นี่ก็ว้าวแล้ว แต่พอรู้จัก Presto ก็จะว้าวไปอีกเพราะมัน Optimize ขึ้นมาอีกขั้นเพื่อ ad-hoc query โดยมาทำงานใน Memory แทน ซึ่งผมรู้ทั้งหมดนี่ผ่านลิ้งค์ต่อไปนี้ครับ [<a href="https://tharid.com/posts/mapreduce-hive-presto/">1</a>][<a href="https://www.youtube.com/watch?v=3OBAtUYjyz8">2</a>][<a href="https://www.youtube.com/watch?v=qZsfpK9bafY">3</a>][<a href="https://trino.io/Presto_SQL_on_Everything.pdf">4</a>]</p>
<p>จริงๆ ยังมี Source อีกหลายแหล่งไม่ว่าจะเป็น <a href="https://discuss.dataengineercafe.io/">Data Engineer Cafe</a>, <a href="https://github.com/DataTalksClub/data-engineering-zoomcamp">Data Engineer Zoomcamp</a> ฯลฯ ที่เป็นที่พึ่งให้ผมเตรียมตัวด้วย ซึ่งพอถึงจุดนี้เหลือเวลาไม่กี่วันหลังเริ่มงานผมบอกเลยว่าในหัวตอนนี้ทุกอย่างที่ผมเล่ามามันตีกันไปหมดมากๆ ซึ่งถ้าใครเคยมองมาวงการ Data Science/Engineering ก็น่าจะรู้สึกไม่ต่างจากผมว่าทุกอย่างมันถาโถม มันเยอะมากจนไม่รู้จะเริ่มจากตรงไหนดีแล้วในใจก็ยังรู้ว่ามันยังมี Unknow อีกมากที่ต้องไปเจอหน้างานถึงจะรู้ว่าอะไร</p>
<h2 id="เดอนแรก">เดือนแรก</h2>
<p>พอเข้ามาเดือนแรก ผมได้รับการบอกกล่าวเลยว่า Data Engineer ที่นี่น่าจะไม่เหมือนที่อื่นนะตาม Data Maturity ขององค์กร ซึ่งแรกๆ ผมก็ไม่ค่อยได้ยินใครพูดที่ไหนเรื่องนี้นอกจากกับเพื่อนร่วมงานผม จนกระทั่งเพิ่งเห็นพี่ทอยเขียน<a href="https://datarockie.com/blog/data-engineering-foundation/">บล็อกนี้</a> เลยรู้ซึ้งว่าวิธีการแยกแบบนี้มันมาจากหนังสือเล่มนี้ ซึ่งพอมามองย้อนกลับไป เอ่อจริง เพราะตั้งแต่เดือนแรกไม่ใช่ผมกระโดดไปทำ Data pipeline เลย แต่ไปทำความเข้าใจว่า pyhive มันทำงานยังไงกับ Hive, Spark, Presto จนไปรู้จัก Thrift server ที่ทำงานอยู่ข้างหลัง รวมถึงไปทำความรู้จักกับ Hadoop ecosystem อีกครั้ง (แบบมีคนคุยด้วย)</p>
<p>แต่ก็ใช่ว่าจะไม่มีงาน Data pipeline เลย ซึ่งงานหนึ่งที่ Data Engineer ทุกคนที่นี่ได้ทำคือการ Migrate Dagster abstraction ของ data pipeline ให้มาใช้ตัวใหม่ครับ ซึ่งผมบอกเลยว่า การไปดูกับการมานั่งทำงานกับ production ready pipeline มันต่างกันเยอะมากครับ นอกจากจะต้องไปค้น Docs ว่า Abstraction ใหม่มัน migrate ยังไงบ้างตั้งแต่ระดับ repository, schedule เรื่อยไปจนถึง resource แล้ว support system, tooling, หรือ workflow ต่างๆ ก็ต้องไปทำความรู้จักกับมันเช่น <a href="https://opengitops.dev/">GitOps</a>, <a href="https://earthly.dev/">Earthly</a>, หรือแม้กระทั่ง SQL ที่เหมือนจะรู้จักอยู่แล้ว แต่พอเห็นวิธีการเขียนแบบ <a href="https://towardsdatascience.com/the-ultimate-guide-to-sql-ctes-12a065187a15">CTEs</a> รวมถึง Dialect ของแต่ละ Query engine ที่ต้องทำงานด้วยก็ตระหนักได้ว่าเรายังไม่รู้อะไรเลย</p>
<p><img src="/first-three-month-as-data-eng/the-layers-of-a-cloud-data-platform_02_hu_4cfd56e2ba62f0ce.webp"
       srcset="/first-three-month-as-data-eng/the-layers-of-a-cloud-data-platform_02_hu_34e624f98b9e4d54.webp 480w, /first-three-month-as-data-eng/the-layers-of-a-cloud-data-platform_02_hu_4cfd56e2ba62f0ce.webp 960w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="960" height="560"
       alt=""
       loading="lazy" decoding="async"></p>
<p>โชคดีที่เดือนแรกผมมีวันหยุดยาวอยู่กลางเดือนหลังจากไปทำงานได้อาทิตย์เดียว เลยเป็นช่วงเวลาที่กลับมาตั้งสติได้ดีมาก ซึ่งตัวช่วยทำให้ผมกลับมาเห็นภาพหลายๆ อย่างชัดขึ้นเป็นภาพข้างบน ต้องขอบคุณหนังสือ <a href="https://www.manning.com/books/designing-cloud-data-platforms">Designing Cloud Data Platforms</a> เลยครับ เล่มนี้ช่วยดึงสติให้ผมกลับมาเห็น Data Platform ใน Mental model ได้ชัดเหมือนสมัยยังเป็น Software Engineer แล้วมองว่าแต่ละ components ของแอพมันคืออะไร มาทำหน้าที่อะไร ซึ่ง 3 บทแรกจะพาไป รู้จัก Data Platform ก่อน ส่วนบทที่เหลือในหนังสือจะพาไปเจาะลึกทั้ง tools, techniques ของแต่ละ component ตั้งแต่ Ingestion, Processing เรื่อยไปถึง Data Access ซึ่งส่วนตัวผมยังอ่านไม่จบ ถ้าจบแล้วก็น่าจะมีโอกาสมาเล่าให้ฟังกันในบล็อกนี้ครับ เรียกได้ว่าคัมภีร์คู่ใจผมเลยมาจนถึงทุกวันนี้</p>
<h2 id="เดอนทสอง">เดือนที่สอง</h2>
<p>งานในช่วงเดือนที่สองมีความแตกต่างขึ้นไปนิดนึง เพราะพอเริ่มเข้าโปรเจ็คจะมีงานในส่วนของ Data Modeling กับ Data Exploration เพิ่มเข้ามา ในส่วนของ Data Modeling เรียกได้ว่าอาศัยประสบการณ์ Backend Engineer มาเอาตัวรอดไปได้ครับในการออกแบบ Schema ของ Data ที่เรา Provide ให้ Consumer ใช้ยังไงให้ตอบโจทย์ requirements และ Maintain ได้สบายไปพร้อมๆ กัน แต่ส่วน Data Exploration นี่เรียกได้ว่าเป็นประสบการณ์ที่แปลกใหม่มาก เพราะเราต้องไปตามหา Data ที่เราต้องการมาตอบโจทย์ Business requirements ความยากนอกจากต้องไปตะลุยทุ่ง Documents, Wiki เพื่อหา Data ที่ต้องการแล้ว ก็ต้องมา Verify ต่อว่าตอบโจทย์ที่เราต้องการจริงๆ มั้ยนะ หรือติด limitation อะไรด้วยรึเปล่า ซึ่งกินพลังชีวิตหนักมากทั้ง 2 ส่วนที่ผมว่าเลยครับ</p>
<p>ในส่วนของ Data pipeline ที่ยังต้องดูแลอยู่แต่พอเริ่มจะใช้ Dagster ได้อยู่มือขึ้น ก็เริ่มเห็นภาพว่าเห้ยการดูแล data pipeline อ่ะ มันไม่ต่างกับการดูแล Software อื่นๆ เลยนะ เพราะตัว pipeline มันมีอายุของมัน มีการ extend มีการ upgrade ฯลฯ เพราะฉะนั้น practices ต่างๆ ของ Software Engineering ในการสร้าง Maintainable software เข้ามาช่วยเยอะมากตอนนี้ครับ</p>
<h2 id="เดอนทสาม">เดือนที่สาม</h2>
<p>พอเข้าเดือนที่สามมีโอกาสได้ไปแตะๆ งาน POC Platform บ้าง ผมมีโอกาสไปลอง POC ในส่วนเล็กๆ ที่ decoupling compute engine interface ออกมาโดยใช้ <a href="https://livy.incubator.apache.org/">Apache Livy</a> เป็นพื้นฐาน ซึ่งไองาน POC เล็กๆ ที่ว่าพาผมไปรู้จัก Hadoop, YARN, Spark เยอะขึ้นมากกว่าตอนที่ดูเองก่อนหน้านี้เยอะมากว่ามันคุยกันยังไงกว่าจะได้ processing, storage layer ใน Data Platform ขึ้นมาซักตัว</p>
<p>อีกสิ่งหนึ่งที่ค่อยๆ เห็นภาพชัดขึ้นแล้วค่อนข้างเป็น Pitfall หนึ่งของคนใช้งาน Dagster คือ <em>Ops ไม่ใช่ function</em> ซึ่งตอนแรกที่ได้ยินมาผมยังไม่เข้าใจ Dagster มากประโยคนี้เลยยังอยู่ในใจอยู่ แต่พอขึ้น data pipeline เส้นที่สองแล้วเริ่มรู้สึกว่าทำไมต้องมาทำซ้ำด้วยนะ เท่านั้นแหละเหมือนคนตรัสรู้เลย แล้วเส้นแบ่งมันนิดเดียวมากคือ Ops เราต้อง general ระดับนึงแล้วใช้ abstraction ของ Dagster ในการจัดการ input, output หรือ behavior ของ Ops นั้นแทน แล้วพอมองโลก Dagster ผ่านเลนส์นี้เท่านั้นแหละ ผมเห็นโอกาสเต็มไปหมดเลยครับและผมมั่นใจว่าพวกที่ทำ Tooling ในวงการ data ก็เห็นสิ่งนี้เหมือนกันมานานก่อนผมมาก เราเลยได้เห็น ความร่วมมือของ tool หลายๆ อย่างกับ Dagster เช่น <a href="https://dagster.io/blog/dagster-dbt">Dagster x dbt</a>, <a href="https://dagster.io/blog/dagster-0-14-0-airbyte">Dagster x Airbyte</a> อะไรแบบนี้เป็นต้นครับ</p>
<h2 id="คำแนะนำจากประสบการณตอกตอยน">คำแนะนำจากประสบการณ์ต๊อกต๋อยนี้</h2>
<p>ประมาณนี้ครับประสบการณ์สามเดือนผม ยังคิดว่าตัวเองประสบการณ์น้อยมากในงาน Data Engineering และยังมีอะไรให้เรียนรู้เพิ่มอยู่เรื่อยๆ อีกในทุกๆ วัน แต่ถ้าพอมามองย้อนกลับไปถ้าจะมีอะไรแนะนำคนที่อยากจะย้ายมาทำงานสาย Data Engineering ผมพอจะแนะนำจากประสบการณ์น้อยนิดของผมได้ตามนี้เลยครับ</p>
<ul>
<li>อย่างแรกเลย มันมีความต่างเยอะมากระหว่างคนที่เป็น Consumer ของ Platform กับคนที่สร้าง Platform ผมเข้าใจภาพนี้ชัดมากถ้ามองย้อนไปตอนผมรู้จัก Spark ใหม่ๆ แล้วก็รู้สึกว่าเอ่อ มันก็ไม่ต่างจาก Pandas ที่เราคุ้นเคยมากนี่หว่า แต่พอต้องประกอบมันขึ้นมาจริงๆ แล้วโลกของ Spark นี่มันกว้างใหญ่โคตรๆ เลยครับ แค่เปลี่ยน Resource manager นี่โลกก็เปลี่ยนแล้ว เพราะฉะนั้นย้ำอีกครั้งว่า <em>มันสำคัญมากที่เราจะต้องเข้าใจ Tooling ที่เราต้องทำงานหรือดูแลด้วยไม่ใช่แค่ใช้เป็น แต่เข้าใจเลยว่ามันทำงาน (ด้วยกัน) ได้ยังไง</em></li>
<li>อย่างที่สองผมมาตกผลึกตอนต้องไปทำ Data Exploration นี่แหละครับ ด้วยความที่มันมีสิ่งที่เกิดขึ้นใหม่ๆ ในโลกของ Data ตลอดเวลา ไม่นับ Data Domain ที่เราต้องไปความเข้าใจด้วย สิ่งที่จะเกิดขึ้นตามมาคือ สิ่งที่เรารับรู้มันจะเยอะมาก จนหลายครั้งมันถาโถม วิธีการเอาตัวรอดจากตรงนี้ให้ได้คือ <em>เราต้องจัดการความรู้ของเราเองให้เป็นครับ สามารถกลั่นความรู้ออกมาจากสิ่งที่รับรู้และต่อยอดเพื่อที่จะเข้าใจสิ่งใหม่ๆ ต่อได้</em> ซึ่งวิธีการที่ผมใช้หลักๆ คือจดครับและแน่นอนว่าเครื่องมือคู่ใจผมยังคงเป็น <a href="https://www.notion.so/">Notion</a> ไม่ว่าใครจะชวนไปใช้ tooling ตัวไหนก็ตาม 555</li>
<li>อย่างสุดท้าย ผมไปดู Live ของบอย <a href="https://www.facebook.com/bigdatarpg">BigData RPG</a> หลายอาทิตย์ก่อนตอนกำลังดูประกาศรับสมัครงานสาย Data แล้วผมไปสะดุดใจกับคุณสมบัตินึงในประกาศคือ Self-Driven ซึ่งตอนที่ฟังแล้วมามองย้อนกลับไป มันจริงมาก เพราะพอถึงจุดหนึ่งหลังจากเราเริ่มเห็นภาพอะไรชัดขึ้นแล้ว ด้วยความที่ทะเลของงานในสาย Data Engineering มันเยอะมาก <em>เราต้องเป็นคนตัดสินใจเองว่าอยากจะโฟกัสเรื่องอะไร</em> โดยที่ยัง Align กับ Goal ของงานที่ทำอยู่ <em>ต้องรู้ว่าไม่รู้อะไร</em> จะได้ไปเติมสิ่งที่ขาดให้มันเต็ม และต้อง <em>สั่งตัวเองเป็นด้วย</em> เพราะอิสระมาพร้อมกับความรับผิดชอบสูงมาก</li>
</ul>
<p>สุดท้ายถึงแม้ผมจะเพิ่งพูดเรื่อง Self-Driven ไป แต่ผมบอกเลยว่าผมผ่านมาถึงจุดนี้ไม่ได้เลย ถ้าผมไม่มีเพื่อนร่วมงานที่สุดยอดมากๆ ทุกคน ทุกบทสนทนา ทุกมุมมองต่างๆ ที่ผมได้รับการแบ่งปันมา ผมไม่รู้จะตอบแทนยังไงเลยนอกจากตั้งใจทำงานออกมาให้ดีที่สุดและหวังว่าซักวัน ผมจะได้แบ่งปันสิ่งที่ผมรู้กลับไปบ้าง</p>
<p><img src="/first-three-month-as-data-eng/182001_hu_95d88ece970e7e92.webp"
       srcset="/first-three-month-as-data-eng/182001_hu_335b095ee7aa8df8.webp 480w, /first-three-month-as-data-eng/182001_hu_e0d52dc2e037e739.webp 960w, /first-three-month-as-data-eng/182001_hu_95d88ece970e7e92.webp 1440w"
       sizes="(max-width: 960px) 100vw, 960px"
       width="1440" height="1081"
       alt=""
       loading="lazy" decoding="async"></p>
<p>ปล.ผมชอบคำว่าต๊อกต๋อยมากเวลาได้ยินจากเพื่อนร่วมงานผม เวลาได้ยินแล้วรู้สึก Stand on the shoulder of giant มาก​ ฮ่าๆ</p>
]]></content:encoded></item></channel></rss>