ในโลกที่ขับเคลื่อนไปด้วยข้อมูลในยุคปัจจุบัน องค์กรต่าง ๆ ก็เริ่มมองหา solution ที่ตอบโจทย์ และคล่องตัวในการนำข้อมูลไปใช้อย่างมีประสิทธิภาพ ช่วยในการตัดสินใจ และคุ้มค่ามากที่สุด เพื่อสนองต่อความต้องการทางธุรกิจ
Snowflake เป็นเทคโนโลยีด้าน Data Warehouse ที่ได้รับความนิยมในระดับโลก และยิ่งใหญ่จนสามารถเข้าตลาดหุ้น NYSE (New York Stock Exchange) มีลูกค้ามากมายทั่วโลก เช่น Adobe, Exxonmobil หรือแม้แต่ KFC
บทความนี้เราจะมาทำความรู้จักกับเครื่องมือ Modern Data Stack ที่เรียกว่า Snowflake กัน
Snowflake คืออะไร
Snowflake เป็น Platform แบบ Cloud Computing ที่สามารถเก็บข้อมูลไว้บนส่วนกลาง (Storage) ประมวลผล (Processing) และทำการวิเคราะห์ (Analytics) ได้ โดยจะแบ่ง layer เป็น 3 ชั้น ดังนี้
- ชั้นที่เก็บข้อมูล (Database Storage Layer)
- ชั้นการประมวลผล (Query Processing Layer)
- ชั้นบริการทางด้าน Cloud (Cloud Services Layer)
จะเห็นจากรูปด้านล่างได้ว่า Snowflake ประกอบไปด้วย 3 ชั้น ที่กล่าวไปข้างต้น
ชั้นที่เก็บข้อมูล (Database Storage Layer)
ชั้นที่เก็บข้อมูล หรือชั้น Database Storage นั้น จะเป็นชั้นไว้เก็บข้อมูล โดยสามารถตั้งค่าให้เก็บบน Cloud ตัวไหนก็ได้ตามที่เราต้องการ ตั้งแต่ Amazon S3 ของ AWS, Google Cloud ของ GCP และ Azure Blob Storage ของ Azure สามารถเก็บข้อมูลได้ทั้งแบบ Structured, แบบ Semi-structured และแบบ Unstructured
ข้อมูลที่โหลดเข้าไปเก็บไว้ใน Snowflake จะถูกจัดระเบียบให้อยู่ในรูปแบบ columnar มีการ optimize และ compress แล้วนำไปเก็บไว้ใน micropartition ในชั้นที่เก็บข้อมูล
Snowflake จะทำการจัดการทุกอย่างในการจัดเก็บข้อมูลตั้งแต่
- การจัดระเบียบข้อมูล
- ขนาดของไฟล์โครงสร้าง
- การบีบอัดข้อมูล meta data
- encryption
- และด้านอื่น ๆ
เราจะไม่สามารถมองเห็นหรือเข้าถึง Data object ได้โดยตรง แต่สามารถเข้าถึงข้อมูลผ่านการ Query โดยใช้ SQL บน Snowflake ได้
ชั้นการประมวลผล (Query Processing Layer/ Compute Layer)
ชั้นการประมวลผล หรือ Compute Layer หรือเรียกอีกอย่างว่า Query Processing Layer และ Processing Layer เป็นชั้นที่ทำหน้าที่ประมวลผลคำสั่งหรือ Query ทำการโหลดข้อมูลเข้ามาไว้บนชั้นที่เก็บข้อมูลหรือนำข้อมูลออกจากชั้นที่เก็บข้อมูล
นอกจากนี้ยังทำการแปลงข้อมูล (transformation) รัน Data Pipeline และเทรนโมเดล Machine Learning ซึ่งจะถูกดำเนินการโดย Virtual Warehouse ที่มี compute resources อยู่ข้างใน สามารถเลือกขนาด scale ขึ้นมาให้ตรงกับความต้องการ หรือ scale ลงเมื่อใช้งานน้อยลงได้ และจ่ายเงินตามที่ใช้จริง Virtual Warehouse แต่ละอันจะทำงานแบบ independent และรันแบบ parellel ทำให้ Performance แต่ละอันไม่ส่งผลต่อประสิทธิภาพของกันและกัน
ชั้นบริการทางด้าน Cloud (Cloud Services Layer)
ชั้นบริการทางด้าน Cloud เป็นกลุ่มบริการที่ประสานงานและเชื่อมต่อระหว่างส่วนประกอบต่าง ๆ ภายใน Snowflake เป็นเหมือนชั้นมันสมอง และก็เป็นอีกชั้นที่มี Virtual Warehouse ที่ถูกจัดมาโดย Snowflake เข้ามาช่วยทำงาน
บริการที่อยู่บนชั้นนี้ ก็จะมีตั้งแต่การยืนยันตัวตนเข้าใช้งาน (Authentication), การจัดการ Infrastructure (Infrastructure management), การจัดการ Metadata (Metadata management), Query parsing and optimization และ การควบคุมการเข้าถึงทรัพยากร (Access control)
Feature เด่น ๆ ของ Snowflake
Snowflake มี feature หลาย feature ที่น่าสนใจมาก เราจะมาดูตัวอย่าง feature ที่เด่น ๆ กัน
Zero copy clone
Zero copy clone เป็นหนึ่งใน feature ของ Snowflake ที่โดดเด่นมาก โดยทำการคัดลอก object บน Snowflake ออกมาเป็นอีก object หนี่งที่อ้างอิงหรือ reference ไปกับ object ต้นแบบ
คำว่า object ตรงนี้สามารถเป็นได้ตั้งแต่ Database, Schema หรือตารางก็ได้ ส่วนการคัดลอกนั้นสามารถทำกี่ครั้งก็ได้ และใช้เวลาภายในไม่กี่วินาที แต่ทั้งนี้ทั้งนั้นก็ขึ้นอยู่กับขนาดของ object นั้นด้วย
หลังจากทำการคัดลอกแล้ว object ที่เป็นตัวคัดลอกจะไม่มีความเกี่ยวข้องกับ object ต้นแบบ อีกต่อไป การเปลี่ยนแปลงข้อมูลบน object ต้นแบบจะไม่ส่งผลต่อ object ตัวคัดลอก และเมื่อมีการเปลี่ยนแปลงข้อมูลบน object ตัวคัดลอก ข้อมูลบน object ต้นแบบก็จะไม่ถูกเปลี่ยนตามไปด้วย
ยกตัวอย่างให้เห็นภาพง่าย ๆ เมื่อเราต้องการแก้ไขข้อมูลใน database แบบ traditional ที่อยู่บน Production เราจะต้องสร้าง environment อีกอันหนึ่งมารองรับข้อมูล สมมติเรียก environment นั้น สั้น ๆ ว่า Testing เราจะต้องเสีย
- เงินค่าสร้าง Testing environment
- ค่าที่เก็บข้อมูลของข้อมูลที่อยู่บนทั้ง Production และ Testing
รวมถึงเมื่อมีข้อมูลอัปเดตบน Production เพิ่มเข้ามา ก็ยากต่อการอัปเดตข้อมูลบน Testing ด้วย
Zero copy clone เข้ามาช่วยให้อะไร ๆ ง่ายขึ้น ทั้งทำการโคลน Production ไปยัง Testing ในไม่กี่วินาที โดยจ่ายแค่ค่าที่เก็บข้อมูลของ Production และเมื่อมีการอัปเดตข้อมูลบน Production เพิ่มเข้ามา เราก็สามารถทำการคัดลอกอีกรอบไปไว้บน Testing ได้ และเมื่อทำการทดสอบข้อมูลเรียบร้อยแล้วก็สามารถคัดลอกกลับไปไว้บน Production ได้ทันที
Time Travel และ Fail Safe
Time travel เป็นอีก feature หนึ่งของ Snowflake ที่อาจจะช่วยชีวิตใครหลาย ๆ คนได้ เพราะสามารถทำการเข้าถึงข้อมูลจากจุดใดจุดหนึ่งก็ได้ในอดีต โดยสามารถเข้าถึงข้อมูลนั้นได้ภายใน 24 ชั่วโมงบนเวอร์ชันปกติ หรือภายใน 90 วันบนเวอร์ชัน Enterprise
ยกตัวอย่างเช่น ถ้าใครบางคนในทีมเผลอไปลบตารางบน database โดยที่ไม่ได้ตั้งใจ Time Travel สามารถช่วยให้เราย้อนกลับไปยกเลิกคำสั่ง Drop หรือกู้ตารางกลับมาได้
สมมุติถ้าเพื่อนอีกคนในทีมเผลอ (อีกแล้ว) ไปลบข้อมูลบางส่วนบนตาราง เราก็สามารถย้อนเวลากลับกู้ข้อมูลก่อนที่จะลบได้
โดยปกติ traditional database ส่วนมากจะไม่มีวิธีการกู้ข้อมูล (recovery) กลับมา หรือถ้ามีก็จะมีทางเลือกตัวเลือกให้ไม่มากนัก และไม่สามารถย้อนกลับไปในช่วงเวลาที่เฉพาะเจาะจงได้ รวมถึงอาจจะต้องใช้เวลานานมากในการกู้ หรือใช้คนที่มีประสบการณ์ทางด้าน technical สูง
Time travel จะช่วยให้เราสามารถย้อนเวลากลับไปกู้ข้อมูลได้เลย ไม่จำเป็นต้องเปิดใช้งาน เพราะ feature นี้มากับ Snowflake อยู่แล้ว
อีก feature หนึ่งถัดจาก Time Travel ในรูปข้างบนคือ Fail safe
Fail safe เป็นอีก feature ที่ Snowflake สามารถทำการช่วยกู้ข้อมูลที่ขาดหายหรือเสียหายไปจากความล้มเหลวในการดำเนินการบน Snowflake ซึ่งทำได้ภายใน 7 วันหลังจากหมดช่วงเวลาในการทำ Time travel โดยเราไม่สามารถทำเองได้ต้องติดต่อทาง Snowflake ไปเท่านั้น
สามารถรองรับข้อมูลแบบ Semi Structured
ความสามารถในการรับรองข้อมูล แบบ semi-structured ได้ ก็เป็นอีก feature หนึ่งที่มีประโยชน์มาก เข้ามาช่วยให้เราโยกย้ายข้อมูลได้ง่ายขึ้น
Snowflake สามารถรองรับข้อมูล semi-structured ได้หลาย format ตั้งแต่ JSON, Avro, ORC (Optimised Row Columnar), Parquet และ XML
ข้อมูลแบบ semi-structured ที่ถูกโหลดเข้ามา จะเข้ามาในรูปแบบของ ARRAY, OBJECT หรือ VARIANT ซึ่งเป็นชนิดข้อมูลที่ใช้ภายใน Snowflake ซึ่งมีขนาดจำกัดอยู่ที่ 16 MB
นอกจากนี้ Snowflake จะทำการ optimise ข้อมูล พยายามทำให้ข้อมูลอยู่ในรูปแบบ columnar ให้มากที่สุดและจัดเก็บข้อมูลส่วนที่เหลือในคอลัมน์เดียว
ถ้าต้องการโหลดข้อมูลแบบ semi structured ที่มีขนาดใหญ่กว่าที่กำหนดไว้ (16MB) หรือมีโครงสร้างในรูปแบบซ้อนกัน (nested) ก็อาจจะต้องแบ่งข้อมูลออกเป็นหลายคอลัมน์ให้มีขนาดเล็กลง
ซึ่ง Snowflake ก็มีฟังก์ชันที่สามารถจัดการแปลงข้อมูล หรือ flatten ข้อมูล มาให้เราใช้งานเพื่อให้ได้ข้อมูลที่เป็นระเบียบและอยู่ภายในขนาดที่ต้องการ
การโหลดข้อมูลเข้า Snowflake – Data Pipeline
เราสามารถโหลดข้อมูลโดยอัตโนมัติเข้าสู่ตารางและแปลงข้อมูลเพื่อการวิเคราะห์เพิ่มเติมภายหลังได้ใน Snowflake ผ่านการใช้ Continuous Data Pipeline ซึ่งจะลดขั้นตอนที่ต้องทำด้วยตัวเองไปหลายขั้นตอน รวมถึง
- ทำให้สามารถนำเข้าข้อมูลได้อย่างต่อเนื่อง (continuous data loading)
- ติดตามการเปลี่ยนแปลงของข้อมูล (change data tracking)
- สร้าง process งานที่เกิดซ้ำบ่อย ๆ ใน workflow ได้อีกด้วย
การนำเข้าข้อมูลอย่างต่อเนื่องโดย Snowpipe
การนำข้อมูลเข้ามาใน Snowflake สามารถทำได้หลายวิธี หนึ่งในนั้นก็คือ Snowpipe ซึ่งเป็นบริการ การนำเข้าข้อมูลอย่างต่อเนื่อง (Continuous Data Loading) ที่โหลดข้อมูลเข้าโดยอัตโนมัติเมื่อมีข้อมูลใหม่ที่พร้อมใช้งาน
โดย Snowpipe สามารถโหลดไฟล์จากหลากหลาย Source เช่น AWS S3
ทันทีที่มีไฟล์อยู่ในนั้น Snowpipe จะทำการโหลดข้อมูลเข้ามาในตารางทันที ซึ่งก็หมายความว่าเราสามารถโหลดข้อมูลใหม่เป็น micro-batches โดยไม่ต้องทำด้วยตัวเอง
นอกจากนี้ยังมี Connector ที่สามารถเชื่อมต่อกับ Kafka ได้ในการโหลดข้อมูลโดยอัตโนมัติและเครื่องมือ Third-party อื่น ๆ
การติดตามการเปลี่ยนแปลงข้อมูลโดยใช้ Stream
การติดตามการเปลี่ยนแปลงข้อมูล (Change Data Tracking) บน Snowflake สามารถทำได้โดยการสร้าง Streams ซึ่งเป็น Object หนึ่งใน Snowflake ที่จะเก็บข้อมูลที่มีรายละเอียดการเปลี่ยนแปลงของตารางที่เป็น source ยกตัวอย่างการเปลี่ยนแปลงเช่นการ INSERT และข้อมูลเกี่ยวกับการเปลี่ยนแปลงของ DML ที่ทำกับตารางรวมถึงสถานะของแถวก่อนและหลังการเปลี่ยนแปลง
ข้อมูลการเปลี่ยนแปลงจะถูกเก็บอยู่ในอีกคอลัมน์หนึ่งในตารางที่เป็น source เพื่อรอการทำการแปลงข้อมูลหรือ transformation ให้เรียบร้อย แล้วแยกเก็บไว้ในรูปแบบอื่นหรือตารางหนึ่ง
การใช้งาน Recurring tasks
Tasks เป็นอีก Object หนึ่งใน Snowflake ที่ทำให้เรารันคำสั่ง SQL หรือ Stored Procedure ได้ตามเวลาที่กำหนดไว้ และยังสามารถนำ Task มาเชื่อมต่อกันได้เพื่อสร้างกระบวนการ หรือ workflow ที่ซับซ้อนตามเวลาที่กำหนดไว้
มักเหมาะกับการนำมาใช้สำหรับการสร้าง report ที่ต้องใช้เป็นประจำ หรือเป็นส่วนหนึ่งของ data pipeline ติดตามการเปลี่ยนแปลงล่าสุดของข้อมูลแต่ละแถวจาก Streams และแปลงข้อมูลนั้นต่อเพื่อนำไปใช้ในตารางอื่น
Data Sharing
Data Sharing หรือการแชร์ข้อมูลที่ปลอดภัย เป็นอีกหนึ่ง feature ของ Snowflake ที่ช่วยในการแชร์ข้อมูลของ Account ของตัวเองกับ Account ของคนอื่นได้โดยไม่ต้องคัดลอกข้อมูลซ้ำ ดังนั้นข้อมูลที่แชร์ก็ไม่จำเป็นต้องใช้พื้นที่ในการจัดเก็บเพิ่มเติม และไม่เสียค่าใช้จ่ายในการจัดเก็บข้อมูลบน account ของคนที่เราแชร์ไปให้ เพราะเป็นการแชร์ข้อมูลผ่าน metadata ทำให้การแชร์เป็นเรื่องง่ายและคนที่เราแชร์สามารถเข้าถึงข้อมูลได้ทันที
Feature นี้จะเข้ามาช่วยสร้าง connection ระหว่างผู้ที่ต้องการแชร์ข้อมูล และผู้ที่ต้องการรับข้อมูล ทำให้การแชร์ข้อมูลเป็นเรื่องง่ายและเข้าถึงได้สะดวกมากยิ่งขึ้น
พื้นที่หนึ่งที่ Snowflake เปิดให้ผู้ใช้งานเข้ามาแบ่งปันข้อมูลกันได้นั้นก็คือ Snowflake Market Place ซึ่งเชื่อมต่อคนที่มีข้อมูลอยู่ในมือ คนที่มองหาข้อมูล ให้สามารถแบ่งปันข้อมูลกันได้ ไม่ว่าจะเป็นแบบฟรีหรือมีค่าใช้จ่าย
ผู้ต้องการข้อมูลสามารถเข้าถึงข้อมูลที่แชร์ไว้ ได้โดยตรงในบัญชีตัวเองถ้าฟรี หรือก็สามารถสอบถามไปทางบัญชีที่มีข้อมูลที่กำลังมองหาได้ตามความต้องการ
อีกเคสหนึ่งคือ Data Exchange ซึ่งสามารถแชร์ข้อมูลให้กับกลุ่มคนที่เราเลือกไว้ได้ ยกตัวอย่างเช่นการแชร์ข้อมูลระหว่างลูกค้าทางธุรกิจ Supplier และ Partner เป็นเรื่องที่ง่ายยิ่งขึ้น
ข้อดีของ Snowflake
- ไม่มีต้นทุนในการดำเนินงาน: Snowflake เป็น Data solution ที่ใช้ระบบคลาวด์แบบ SaaS ที่ให้บริการตามความต้องการแบบซึ่งช่วยประหยัดเงินให้กับองค์กร โดยไม่มีค่าต้นทุนล่วงหน้า เช่นการซื้อฮาร์ดแวร์ที่แพง ไม่ต้องติดตั้งซอฟต์แวร์ และไม่มีค่าใช้จ่ายในการบำรุงรักษาและอัปเกรดฮาร์ดแวร์ ซึ่ง Snowflake จะดูแลให้
- Scalibility: Snowflake มี Scalibility สูง สามารถขยาย resource ได้ไม่จำกัด และมีประสิทธิภาพในการทำงาน ผ่านทางระบบของ Snowflake ที่มี Virtual Warehouse หลายอัน ที่มีข้อมูลที่ใช้ร่วมกัน ซึ่งมี Storage และ Compute ไม่เชื่อมต่อกัน ทำให้ผู้ใช้งานหลายคนสามารถ Querry ข้อมูลชุดเดียวกันได้โดยที่ Performance ไม่ตก แม้ว่าจะมี work load อื่น อย่างเช่นการนำข้อมูลเข้ามาในระบบไปพร้อม ๆ กัน
- สามารถใช้ SQL querry ข้อมูลได้ทุกประเภท: SQL เป็นภาษาโปรแกรมทั่วไปที่สามารถ querry ข้อมูลปริมาณมากในฐานข้อมูลหลายอันได้อย่างรวดเร็ว Snowflake ทำให้การเข้าถึงข้อมูลทั้ง strucutred, semi-structured ง่ายยิ่งขึ้น และใช้ทำทุกอย่าง
Use case ตัวอย่างการใช้งานจริง
การใช้ Cloud หลายเจ้า (Multi Cloud)
Western Union เป็นบริษัทหนึ่งที่เคยประสบปัญหา Data Silo เพราะว่ามี Data Warehouse ที่เป็น On-Premise อยู่หลายที่ ทำให้ยากต่อการเห็นข้อมูลของลูกค้าที่ครอบคลุม อีกทั้งข้อมูลในการโอนเงินบนระบบดิจิตอลได้เพิ่มขึ้นหลายเท่าตัวในหลายปีที่ผ่านมา ทำให้การจัดการข้อมูลเป็นเรื่องยากและมีข้อมูลที่ถูกคัดลอกไว้หลายชุด
Snowflake เข้ามาช่วยในการรวบรวมข้อมูลของลูกค้ามากกว่า 150 ล้านคน จากหลายช่องทางทั่วโลก โดยใช้ Cloud จากหลายเจ้า ไม่จำเป็นต้องยึดติดไปกับเจ้าใดเจ้าหนึ่ง และยังช่วยลด cost ลงไปมากอีกด้วย
การใช้ Marketplace – เปลี่ยน Data ให้เป็นเงิน
OpenX เป็นบริษัทที่มีแพลตฟอร์มขนาดใหญ่ในการซื้อขายโฆษณาออนไลน์ทั่วโลก ผ่านทาง Link โฆษณา ทั้งบนเว็บไซต์มือถือและ Smart TV มีลูกค้าเกือบ 1 พันล้านคนทั่วโลกดังนั้นจึงมีข้อมูลขนาดใหญ่มากและจัดเป็นข้อมูลที่ sensitive ด้วย และเนื่องจากลูกค้าของบริษัทมีความต้องการที่จะดูรายละเอียดของข้อมูลที่ละเอียดมากขึ้น เพื่อที่จะดูว่าแคมเปญให้ผลลัพธ์เป็นอย่างไร ด้วยข้อมูลมหาศาลที่มากขึ้น ก็ทำให้บริษัทส่งไปให้ลูกค้าได้ช้าลง และลูกค้าส่วนมากก็ใช้ Spreadsheet เท่านั้นเลยทำให้การบริการยาก
OpenX ได้เข้ามาใช้ Snowflake รวมถึง Marketplace ทำให้ลูกค้าได้ใช้เครื่องมือ BI OpenX สามารถแชร์ข้อมูลแบบ raw เพื่อนำไปทำ Analytics และหา insight ได้รวดเร็วและง่ายยิ่งขึ้น
ข้อจำกัดของ Snowflake
ทุก ๆ platform มีความท้าทาย (Challenges) และข้อจำกัด Snowflake ก็เช่นกัน
- Snowflake ทำหน้าที่ deploy infrastructure ทำให้องค์กรต้องพึ่งพาการพัฒนาหรือการ develop จาก Snowflake เพียงอย่างเดียว หรือที่เรียกกันว่า Vender Lock-in ถ้ามีอะไรฉุกเฉินเกิดขึ้นก็จะกลายเป็นงานที่ท้าทายในการจัดให้รวดเร็ว
- Cloud layer ของ Snowflake จะแชร์กันระหว่างลูกค้าจำนวนมากซึ่งหมายความว่าถ้ามีเหตุการณ์ด้าน Security เกิดขึ้น Data ทั้งหมดก็จะถูกเปิดเผย
- Snowflake ทำงานบนเครื่องมือคลาวด์เพียงไม่กี่ตัวเช่น AWS, Azure, และ Google Cloud
สรุป Snowflake Data Warehouse ดียังไง
Snowflake เป็น Modern Data Platform ที่อยู่บน Cloud ที่สามารถสเกลและเก็บข้อมูลรวมถึงทำ analytics ได้ นอกจากนี้ยังมีระบบที่สามารถเชื่อมต่อกับ Cloud ได้หลายเจ้า หลาย environment โดยที่ยังคงประสิทธิภาพ
มี features หลากหลายที่เข้ามาช่วยให้ชีวิตคนทำงานอย่างเราง่ายยิ่งขึ้น เช่น zero copy clone, time travel และ fail safe, การรับรองข้อมูลแบบ semi-structured, การโหลดข้อมูลอย่างต่อเนื่อง และการแชร์ข้อมูล นอกจากนี้ยังมี use case ตัวอย่างการใช้งานจากบริษัทจริง มีทั้งข้อดีและ ความท้าทายในการใช้งานให้ไว้ลองคิดกัน
หวังว่าบทความนี้จะช่วยให้เพื่อน ๆ รู้จักกับ Snowflake และเครื่องมือต่าง ๆ เพิ่มขึ้นนะคะ และหากบทความนี้มีประโยชน์ อยากรบกวนช่วยแชร์ เพื่อส่งต่อความรู้นี้ให้เพื่อน ๆ ด้วย
และถ้าชอบเนื้อหาแนวนี้ ติดตามบทความดี ๆ ด้าน Data และวีดิโอสนุก ๆ ดูชิล ๆ แล้วได้ความรู้กันได้ที่ Facebook Page: DataTH และ Youtube Channel: Data Science ชิลชิล นะคะ แล้วเจอกันค่ะ