Presto 101 x Docker
อะไรคือ Presto ?
Presto เป็น open source ที่ทำหน้าที่เป็น query engine ตัวนึง ที่ประมวลผลแบบ distributed หรือการกระจายตัว/ช่วยกันทำงาน
Presto จะไม่ได้ทำตัวเองเป็น Database นั่นก็คือ Presto จะไม่มี Data แต่ทำหน้าที่แค่ประมาณผลเท่านั้น
จุดเด่นของ Presto
- เป็นศูนย์กลางในการทำ query engine
- Presto จะใช้ ภาษา SQL ในการเขียน ทำให้ผู้ใช้งานง่ายต่อการใช้ แม้ datasouce จะมาในรูปแบบที่ไม่ใช่ Structured Data เช่น MongoDB (Query MongoDB ผ่าน SQL Command !!) , Kafka, Redis หรืออื่นๆ
- สามารถ Join Data ได้จากหลากหลาย Datasource / Database Type ได้ !!
เช่น ตัวอย่างคือนำ MongoDB ทำการ Join กับ PostgreSQL
SELECT * FROM
MongoDB.DatabaseA.CollectionB AS mongo
INNER JOIN PostgreSQL.SchemaB.TableX AS pg
ON mongo.fieldA = pg.fieldAA
รูปแบบการใช้งาน จะประกอบไปด้วย 2 ส่วนคือ Client (กรอบบน) และ Connector (กรอบล่าง)
- Client หมายถึง ผู้ใช้งาน ซึ่งปัจจุบันการใช้งาน Presto สามารถใช้งานได้หลายวิธี เช่น ผ่าน Presto CLI โดยตรง,
ผ่าน Client software application เช่น DBeaver,
ผ่าน BI Tools เช่น Tableau, Power BI,
ผ่าน Programming เช่น Python
หรืออื่นๆ ถ้า Tools นั้นมี Driver ให้สามารถเข้าใช้งานได้
- Connector หมายถึง การ Setup Connection เพื่อให้ Presto สามารถเข้าถึง Datasource นั้นๆ ได้ ซึ่งปัจจุบัน Presto มี Connector ที่เรียกว่าแทบมีครบทุกเจ้าที่เป็นนิยมในปัจจุบัน เช่น BigQuery, Cassandra, Elasticsearch, Hive, Kafka, Redis, RDBMS, HDFS, S3 Object Stores หรือแม้กระทั่ง Google Sheets ก็ยังมีมาด้วย !!
รายละเอียดเพิ่มเติมสามารถดูได้ที่ลิ้งค์นี้
https://prestosql.io/docs/current/connector.html
ว่ากันในส่วนของ Architecture
ตัว Presto จะประกอบด้วย 2 ส่วนหลัก คือ Coordinator และ Worker
- Coordinator จะทำหน้ารับคำสั่งจาก Client ที่มาในรูปแบบ SQL จากนั้นจะทำการวิเคราะห์/วางแผน และส่งต่อไปยัง Worker เพื่อทำงานต่อไป และเมื่อ Worker ทำงานเรียบร้อยแล้ว จะรวบรวมและส่งผลลัพธ์กลับไปยัง Client
- Worker รับคำสั่งจาก Coordinator เพื่อ Connect ไปยัง Datasource ต่างๆ และส่งผลลัพธ์กลับไปยัง Coordinator
Use Case
- Ad-Hoc Query : เหมาะกับการทำ analyze data แบบเร่งด่วน/เบื้องต้น โดยข้ามกระบวนการ ETL ไปก่อนได้
- Query engine gateway : ที่สามารถลดระยะเวลาการทำงาน และสามารถทำ HA (highly available)
ทดลองใช้ Presto ผ่าน Docker
เริ่มจากทำการ clone repo : https://github.com/l0ginp/presto-on-k8s
สร้าง connector ที่ต้องการโดยเลือกจากลิ้งค์ด้านล่าง
https://prestosql.io/docs/current/connector.html
ให้ทำการสร้างใน folder docker/etc/catalog/
ในตัวอย่างจะเป็น Connector ของ PostgreSQL
จากนั้นรัน build docker image เพื่อให้มี connector ใหม่
docker build — tag presto_test:1.0 .
และทำการ run docker จะได้ presto สำหรับทดสอบแล้วว !
docker run --name presto-test -d -p 8080:8080 presto_test:1.0
เข้าใช้งาน Presto ผ่าน กระรอกน้อย DBeaver
เริ่มจากกด Add new database connection ให้เลือก PrestoSQL
ใส่ connection ในที่นี้ docker เรา run localhost port 8080 ก็ไม่ต้องแก้อะไร
**ใส่ username เป็นอะไรก็ได้ อันนี้ไม่มีผลอะไรเพราะยังไม่มีการ config เรื่อง auth
แต่จำเป็นต้องใส่เพราะ dbeaver require ไว้
ลอง Expand ดูถ้าไม่แสดงแบบในภาพให้ refresh ซักที
ในโครงสร้างที่แสดงใน DBeaver จะแสดงเป็น
Database Name (CATALOGS)> Schema (SCHEMAS)> Table (TABLES)
ซึ่งรูปแบบ อาจลดน้อยตามโครงสร้างของ Datasoruce ที่แตกต่างกันออกไป