มาวิเคราะห์ข้อมูลผ่าน AWS Athena + S3 กัน
มารู้จัก เจ้าตัว Athena กันก่อนมัน คือ ตัวจัดการฐานข้อมูลแบบไร้ Server โดยมันจะแปลงข้อมูลเป็น SQL เพื่อให้เราวิเคราะห์ ข้อมูลขนาดใหญ่มากๆได้ภายในไม่กี่วินาที แถมถูกแสนถูกโดยราคาอยู่ที่เรา Query จะอยู่ที่ 1TB/5$ และเรายังสามารถนำข้อมูลไปใช้ประโยชน์ต่อได้ ไม่ว่าจะ Connect BI Tools ต่างๆ และยังสามารถนำไปพลิกแพลงได้อีกมากมาย
โดยครั้งนี้ผมจะยกตัวอย่างข้อมูลที่เป็น Members ในระบบที่ถูกส่งมากจากลูกค้า และข้อมูลอีกระบบที่ทำ Campaign ผ่าน Line โดยจะหาว่าคนที่เล่น Campaign เป็น Members มากน้อยแค่ไหน
ขั้นตอนหลักในการทำ Athena
1. เราต้องมีการจัดการเตรียมข้อมูลเข้า โดยการจัดเตรียมข้อมูลเข้า S3 ทำได้หลายทางไม่ว่าจะเป็นการเขียน Code เชื่อมฐานข้อมูลของเราแล้วประมวลผลข้อมูลแล้วสร้างเป็น File เข้า S3 หรือ การได้ File จากลูกค้าแล้วเรามาจัด Format ข้อมูลแล้วแปลง File เป็น .CSV .JSON เป็นต้น แล้ว Upload เข้า S3
2. สร้าง Athena เพื่อแปลง File ที่เข้า S3 เปลี่ยนเป็นโครงสร้าง SQL
มาดูขั้นตอนจริงๆกันเลยครับ
มาถึงขั้นแรกผมก็สร้าง S3 เตรียมไว้ โดยสร้างภายใต้ S3 nextbest-store และสร้าง Folder demo โดยจะให้เจ้า demo เป็นเหมือนชื่อ Database หลังจากนั้น มาสร้าง member,user_campaigns โดยผมจะให้ 2 Folder นี้เป็นเหมือนชื่อ Table
เราสร้าง Location S3 ไว้ตรงไหน เราต้องเลือก Athena Location ตามนั้นด้วยนะครับ อย่างอันนี้ผมสร้าง S3 ไว้ Singapore ก็ต้องเลือก Athena เป็น Singapore ด้วยครับ
หลังจากนั้นเข้ามาที่ Athena แล้ว กด Create Table แล้วเลือก From S3 Bucket Data
ต่อมาทำการกรอกรายละเอียด โดยผมจะสร้าง Database มาใหม่โดยชื่อว่า demo และ สร้าง Table ว่า members และชี้ไปที่อยู่ของ S3 ที่เราจะให้เป็นชื่อ Table
โดยมา Coppy URI จาก S3 ที่เราสร้างไว้หรือถ้าจำได้ก็พิมพ์เลยโดยที่ไม่ต้องมา Coppy จากตรงนี้
ถัดมา มาก็มาเลือก Data Format โดยผมจะใช้ CSV เป็นตัวอย่างในครั้งนี้
ถัดมาก็มาตั้งชื่อหัว Columns ตามต้องการเลย แต่ถ้าเลือกเป็น CSV เราต้องเรียงชื่อ Columns ให้สอดคล้องกับ CSV
โดยชุดข้อมูลผมจะใส่ประมาณนี้ ผมก็ทำการกด Bulk add columns
หน้าตาหลัง Bulk add ก็จะได้หน้าจะประมาณนี้
ถัดมาก็กด Create table ได้เลย
เราก็จะได้ DB ชื่อ demo แล้ว มี Table ชื่อ members แล้ว จริงเราสามารถสร้างผ่าน คำสั่ง SQL ดังรูปได้ แต่บทความนี้จะไม่พูดถึง Code จะทำมากลางๆให้สายอื่นใช้ได้ด้วย
หลังจาก นั้น ลองใส่คำสั่ง SQL ดู Table members ซึ่งผลลัพธ์จะไม่มีอะไรเกิดขึ้นถูกต้องแล้วเรายังไม่ได้ใส่อะไรไปใน S3 ของเรา
หลังจากนั้นลองโยน file .csv ที่เตรียมไว้ขึ้นไป
หลังจากโยน File ขึ้น S3 แล้ว ลอง Run Query เราอีกครั้ง ผลลัพธ์ที่ได้ข้อมูลหลายแสน rows ใช้เวลาประมวลผลแค่ 3.7 วินาที
หลังจากนั้นผมจะสร้าง Table ชื่อว่า user_campaigns เพิ่มอีก 1 Table
โดยทำวิธีตามขั้นต้นที่กล่าวไปทำเหมือนเดิมหมดแต่เปลี่ยน Database ที่มีอยู่แล้ว และ Path Location Store ตาม S3 ที่เราสร้างไว้เพื่อจะเป็น Table ชื่อว่า user_campaigns
โดยตัวอย่าง file campaign ที่จะโยนขึ้นไปก็จะมี data ประมาณนี้
ทำขั้นตอนเดิมที่สร้าง Table members ทั้งหมดแล้วก็ใส่ column ให้สอดคล้องกับ CSV ที่เราจะเอาเข้า
หลังจากสร้างเสร็จก็จะได้ Table user_campaigns เข้ามา
หลักจากนั้นกลับไปที่ S3 แล้วเพิ่ม File CSV ที่เตรียมไว้เข้า Folder ที่ Table นี้ชี้อยู่
หลังจากนั้นก็เหมือนเดิมลอง run ดูข้อมูลเป็นแสนกว่า rows ใช้เวลา 1.29 วินาที
ต่อไปจะมายกตัวอย่างทำการ Map 2 Table เพื่อดูว่าคนที่เข้าร่วม Campaign ใครเป็น Members บ้าง โดยเป็นเรื่อง SQL ล้วนๆ สามารถศึกษาได้ที่นี่
หลังจากลอง LEFT JOIN แล้วโดยผม Map จากคนที่มีเบอร์เหมือนกัน เท่านี้เราก็จะรู้แล้วว่าใครที่เล่น Campaign แล้วเป็น Member ซึ่งเราก็สามารถ Export ข้อมูลไปประมวลผลหรือทำ Dashboard ต่อไปได้ หรือนำไปทำ Segment ต่างๆ เพื่อส่งข้อมูลหาลูกค้าผ่านช่องทางต่างๆ เช่นส่ง line push message , sms , email
เป็นยังไงกันบ้างครับหวังว่าจะเป็นประโยชน์ไม่มากก็น้อยสำหรับคนที่ต้องทำงานเกี่ยวกับ Data เยอะๆ จริงๆมันทำผ่าน Excel ได้นะครับบางอันแต่หลักหลายล้าน ROWS ยังไง คอมก็ค้างแน่ๆครับ และไม่ได้เร็วเป็นหลักวินาทีแบบนี้แน่นอนครับ ส่วนสาย Dev ก็ยังเชื่อมต่อ API กับ Athena ได้ด้วยนะครับไม่ว่าจะเป็นการนำไปต่อยอดต่างๆ หรือจะเป็นการเอา File เข้า S3 ผ่าน Code อันนี้เป็นตัวอย่างการเอา File เข้า S3
ไว้ผมจะทำตัวอย่างการเชื่อม API กับ ตัว Athena นะครับ
( CR. ธำรงค์ ไชยวงค์ )