ใช้ Tableau ดึงข้อมูลบน S3 ผ่าน Amazon Athena

ใช้ Tableau ดึงข้อมูลบน S3 ผ่าน Amazon Athena

Amazon Athena เป็น query service ที่เราสามารถเชื่อมต่อกับข้อมูลที่เราเก็บอยู่ใน S3 และเขียน SQL เพื่อดึงข้อมูลออกมาวิเคราะห์ได้ ความดีงามของ service นี้คือ service นี้เป็น serverless ครับ เราไม่ต้องนั่งจัดการ infrastructure ให้เปลืองเงินเล่น เราจ่ายแค่เฉพาะตอนเรา query ข้อมูลเท่านั้น ราคาก็แค่ $5 ต่อ 1 TB ความดีงามอีกอย่างที่จะมากล่าวถึงในบทความนี้ นั่นก็คือ Athena มีตัว connector ที่ทำให้เราสามารถใช้ Tableau (ตั้งแต่เวอร์ชั่น 10.3 ขึ้นไป) ดึงข้อมูลจาก Athena ได้!

แน่นอนว่าเราต้องมีข้อมูลอยู่ใน S3 ก่อน จะเป็นไฟล์ CSV ก็ได้ บทความนี้ขอลองเอาข้อมูลจาก Data.go.th มาลองเล่นกัน เป็นข้อมูลปริมาณรถที่วิ่งผ่านจุดสำรวจต่อวัน เราก็ดาวน์โหลดไฟล์ CSV มาไว้บนเครื่องเรา หน้าตาของไฟล์ก็จะประมาณนี้

ไฟล์ข้อมูลปริมาณการเดินทาง (CSV) จาก data.go.th

ไฟล์ข้อมูลปริมาณการเดินทาง (CSV) จาก data.go.th

หมายเหตุ เนื่องจากเราสามารถกำหนด column ของ table ที่จะสร้างใน Athena ได้ ดังนั้นเราควรตัดส่วน column ในไฟล์ CSV ทิ้งไปก่อนนะครับ

หลังจากนั้นก็อัพโหลดเข้า S3 ได้เลย ในบทความนี้ผมสร้าง S3 bucket ไว้ที่ s3://prontodata/ ที่ไอร์แลนด์ และในนั้นมีไฟล์ CSV อยู่ตามนี้

ข้อมูลปริมาณการเดินทางบน S3

ข้อมูลปริมาณการเดินทางบน S3

เริ่มใช้ Amazon Athena

ให้เราไปสร้าง IAM เพื่อสร้าง Access Key ID กับ Secret Access Key สำหรับ Tableau มาก่อน พอได้มาแล้วก็เข้าไปที่ Athena แล้วเข้าไปในส่วนของ Catalog Manager กด Add table ทางซ้ายมือแล้วจะเห็น console ตามรูปด้านล่างนี้

Catalog Manager ใน Athena

Catalog Manager ใน Athena

เราก็กรอกชื่อ database กับ table ไป ส่วน Location of Input Data Set เราก็ใส่ URL ของ S3 bucket เราลงไป ในที่นี้ผมตั้งชื่อ database ว่า opendata ชื่อ table ว่า traffic ส่วนตรง S3 ผมใส่ s3://prontodata/ กด Next ก็จะเห็นหน้าถัดไปตามนี้

Data Format ใน Athena

Data Format ใน Athena

เห็นได้ว่าเราสามารถใช้ไฟล์ได้หลาย format เลยทีเดียว ในที่นี้ผมจะเลือก CSV เนื่องจากไฟล์ข้อมูลผมเป็นไฟล์ CSV เนอะ กด Next จะเห็นส่วนถัดไป โดยส่วนถัดไปนี้จะเป็นการกำหนด column ของข้อมูล

Column Definition ใน Athena

Column Definition ใน Athena

พอกำหนดเสร็จกด Next จะเป็นส่วนของการสร้าง Partitions ซึ่งบทความนี้จะขอข้ามส่วนนี้ไป ให้กด Create table เลย ถ้าสร้างสำเร็จก็จะเห็น console ตามรูปข้างล่างนี้

Create table successfully ใน Athena

Create table successfully ใน Athena

ลองทดลอง query ดู

Test Query ใน Athena

Test Query ใน Athena

จะใช้ Tableau ต่อ Athena ได้ จะต้องมี connector ไปโหลดได้ที่ Accessing Amazon Athena with JDBC ได้เลยครับ อย่าลืมติดตั้ง Tableau ก่อนนะครับ เวอร์ชั่นที่เป็น Professional Edition (ไม่ใช่แบบ Public นะ) ส่วนเลขเวอร์ชั่นก็ตั้งแต่ 10.3 ขึ้นไป พอโหลดมาแล้วจะเป็นไฟล์ jar แล้วให้เอาไฟล์นี้ไปวางไว้ตามนี้

  • ถ้าใช้ Windows ให้วางไว้ที่ C:\Program Files\Tableau\Drivers
  • ถ้าใช้ Mac ให้วางไว้ที่ ~/Library/Tableau/Drivers

เสร็จแล้วก็ restart โปรแกรม Tableau ของเรา

หมายเหตุ จะใช้ JDBC ได้ เราก็ต้องติดตั้ง Java บนเครื่องด้วยนะครับ >> Free Java Download <<

เชื่อมต่อ Tableau กับ Amazon Athena

เปิด Tableau ขึ้นมา ดูตรงส่วน To a Server ตรงเมนู Connect ทางซ้ายมือ แล้วกด More จะเห็น Amazon Athena อยู่

เลือก Amazon Athena เพื่อเชื่อมต่อใน Tableau

เลือก Amazon Athena เพื่อเชื่อมต่อใน Tableau

เสร็จแล้วก็จะมีให้กรอกรายละเอียดเกี่ยวกับ Athena

Amazon Athena Information ใน Tableau

Amazon Athena Information ใน Tableau

  • ตรง Server ให้เราใส่เป็น athena.eu-west-1.amazonaws.com เพราะผมสร้าง Athena ที่ไอร์แลนด์นะครับ ถ้าใครสร้างที่สิงค์โปร์ก็ต้องใส่ Server เป็น athena.ap-southeast-1.amazonaws.com เป็นต้น
  • ส่วน S3 Staging Directory เราเอามาจากในส่วนของ Settings ของ Athena ครับ บนนั้นจะใช้ชื่อว่า Query result location โดยจะมี URL ประมาณนี้ s3://aws-athena-query-results-133506xxxxxx-eu-west-1/
  • Access Key ID กับ Secret Access Key ที่ใช้เชื่อมต่อไปยัง service บน AWS เราก็กรอกไปครับ ซึ่งเราจะได้มาจากที่เราเข้าไปสร้าง IAM ในตอนแรก

กด Sign In แล้วลองลากๆ ดูข้อมูล ก็น่าจะได้ผลตามรูปด้านล่างนี้ครับ

ดึงข้อมูลจาก Athena ใน Tableau

ดึงข้อมูลจาก Athena ใน Tableau

เท่านี้เราก็สามารถเอาข้อมูลใน S3 มาวิเคราะห์ใน Tableau ได้แล้วล่ะครับ 🙂

Use Case ที่ Pronto

การโหลด CSV เข้า Tableau ดูจะง่ายกว่านะ? ทำไมถึงใช้ Athena? จริงครับ ง่ายกว่าเยอะ ที่เราทำแบบนี้เพราะว่าเราต้องการสร้าง data lake โดยใช้ S3 เป็นหลักครับ ข้อมูลทั้งหมดจะไหลลง data lake นี้ ดังนั้นข้อมูลจะมีการอัพเดทตลอดเวลา การที่ทำแบบนี้ก็ทำให้ Tableau ได้ข้อมูลที่อัพเดทตลอดครับ

อีกเรื่องหนึ่งคือเราต้องการที่จะลดค่าใช้จ่ายบน AWS ของเรา ซึ่ง ณ ตอนนี้ที่เราทำคือเราสร้าง replica ของ database ออกมาให้ Tableau ต่อเข้าไป ถ้าเทียบค่าใช้จ่ายระหว่าง Athena กับ RDS แล้ว ตัว Athena นี่ถูกกว่าประมาณ 10 เท่าหรือมากกว่า 😀


Kan Ouivirach

Kan Ouivirach

Lead Software Architect

Being interested in Agile software development, I joined an Agile team at Pronto Tools as a Research & Development Architect (as Lead Software Architect now). I am an enthusiastic architect who not only has a scientific mindset, but also a practical approach to software solutions.