BLOGS

BigQuery Costs Control คุมง่าย งบไม่บานปลาย ด้วย 5 เทคนิคลับ ฉบับมือโปร

Suwat.T • 28/05/2024
Google Cloud Solutions Specialist

ในยุคดิจิทัลที่ข้อมูลมีบทบาทสำคัญต่อธุรกิจ BigQuery กลายเป็นเครื่องมือวิเคราะห์ข้อมูลยอดนิยม ด้วยความสามารถในการประมวลผลข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว แต่อย่างไรก็ตามการควบคุมค่าใช้จ่ายก็เป็นสิ่งสำคัญไม่แพ้กัน ในบทความนี้จึงขอนำเสนอ 5 เทคนิคลับ ฉบับมือโปร ช่วยให้คุณควบคุม BigQuery คุมงบ คุมง่าย ไม่ต้องกังวลเรื่องงบเกินอีกต่อไป

1. กำหนดโควตาในระดับผู้ใช้ (User-level) และระดับโครงการ (Project-level)

การตั้งค่า Quotas Limit ในระดับ User และระดับ Project จะช่วยให้เราควบคุมค่าใช้จ่ายการใช้งานของ BigQuery ได้ ในกรณีที่เรามีหลาย Project และผู้ใช้หลายคนเราสามารถจัดการค่าใช้จ่ายได้โดยการกำหนด Quotas Limit ซึ่งจะระบุขีดจำกัดของจำนวนข้อมูลได้ที่ประมวลผลต่อวัน 

  • Quotas Limit ที่กำหนดเองระดับโครงการ (Project-level Custom) จะจำกัดการใช้งานรวมของ User ทั้งหมดในโครงการนั้น
  • Quotas Limit ที่กำหนดเองระดับผู้ใช้ (User-level Custom) จะถูกนำไปใช้กับแต่ละ User และ Service Account ทั้งหมดภายในโครงการ

หมายเหตุ : ในการกำหนด Quotas Limit ไม่สามารถกำหนดแบบเฉพาะเจาะจงให้แต่ละ User หรือ Service Account ได้

Best Practice : เราจะกำหนด Quotas Limit โดยอิงจากปริมาณข้อมูลสูงสุดที่ประมวลผลในหนึ่งวัน โดยเริ่มต้นจากกำหนดขนาดเล็กเพียงไม่กี่ GBs และค่อย ๆ เพิ่มตามความต้องการ

ขั้นตอนการตั้งค่า Quotas Limit

  1. ไปที่หน้าโควตาบน Google Cloud Console https://console.cloud.google.com/iam-admin/quotas
  2. เลือก BigQuery API 
  3. เลือก Query usage per day per user และ Query usage per day และคลิก EDIT QUOTAS
  4. เปลี่ยนการใช้งาน Query usage per day per user และ Query usage per day จาก Unlimited เป็น Quotas Limit ที่ต้องการ

2. จำกัดค่าใช้จ่าย Query Costs ด้วยจำนวน Bytes Billed

เราสามารถควบคุมค่าใช้จ่ายของ BigQuery ด้วยการจำกัดจำนวน Bytes Billed สำหรับการ Query ในแต่ละครั้งได้ โดยการกำหนด Maximum ของ Bytes Billed และเมื่อเราได้ทำการกำหนด Bytes Billed เรียบร้อยแล้ว จำนวน Bytes ที่ Query จะถูกประมาณก่อน Query จริง หากจำนวน Bytes ที่มีการประมาณค่าไว้เกินขีดจำกัด Query จะล้มเหลวโดยจะไม่ถูกเรียกเก็บเงิน

ตัวอย่าง ในกรณีที่ไม่สามารถ Query ได้เนื่องจากมีการ Query เกิน Maximum Bytes Billed จะพบ Error Message ดังนี้

Error : Query exceeded the limit for bytes billed: 1000000. 10485760 or higher required.

Best Practice : ใช้การ Maximum Bytes Billed เพื่อควบคุมค่าใช้จ่ายในการ Query โดยเริ่มต้นจากกำหนดขนาดเล็ก ๆ เพียงไม่กี่ GB และค่อย ๆ เพิ่มตามความต้องการ

ขั้นตอนการตั้งค่า Bytes Billed

  1. ไปที่ BigQuery Console : https://console.cloud.google.com/bigquery
  2. ไปที่ Query editor > คลิก Query settings > Advanced options
  3. กำหนด Maximum bytes billed ตามที่ต้องการ
  4. คลิก Save
ตั้งค่า Bytes Billed ใน Google BigQuery

3. สร้าง Budget Alert บน GCP เพื่อติดตาม Costs ที่เพิ่มขึ้น

สามารถควบคุมและติดตามค่าใช้จ่ายทั้งหมดของ Google Cloud ได้ในที่เดียว โดยทำการกำหนด Budget ก่อนเพื่อให้สามารถติดตามค่าใช้จ่ายจริงของ Google Cloud เทียบกับค่าใช้จ่ายที่วางแผนไว้ได้ หลังจากที่กำหนด Budget แล้ว จะทำการตั้งค่าขีดจำกัดเพื่อไว้สำหรับแจ้งเตือน Budget ที่มีการใช้งานเกิน ซึ่งจะใช้เพื่อทริกเกอร์แจ้งเตือนทางอีเมล โดยอีเมลแจ้งเตือน Budget จะช่วยให้สามารถรับทราบข้อมูลเกี่ยวกับการติดตามค่าใช้จ่ายของคุณได้โดยอัตโนมัติ

Budget Alert on Google Cloud Platform
ตัวอย่างการเซต Limit บน Google Cloud Platform

Best Practice : ขอแนะนำให้ตั้งค่า Budget เพื่อติดตามค่าใช้จ่าย ตั้งค่าขีดจำกัดเพื่อทริกเกอร์การแจ้งเตือนทางอีเมล เมื่อค่าใช้จ่ายของคุณหรือค่าใช้จ่ายที่คาดการณ์ไว้เกินเปอร์เซ็นต์ของงบประมาณที่คุณตั้งค่าคุณจะได้รับอีเมลแจ้งเตือน

ขั้นตอนการตั้งค่า Budget Alert

  1. สร้างและตั้งชื่องบประมาณ (Create and name the budget)
  2. กำหนดขอบเขตงบประมาณ (Set the budget scope)
  3. ตั้งจำนวนงบประมาณ (Set the budget amount)
  4. ตั้งค่าขีดจำกัดงบประมาณ (Set the budget threshold rules and actions)
  5. คลิกเสร็จสิ้นเพื่อบันทึกงบประมาณใหม่ (Click finish to save the new budget)

4. เขียน SQL Query ให้ดี

4.1 ในการประหยัดค่าใช้จ่ายสำหรับการใช้งานของ BigQuery

สามารถทำได้ง่าย ๆ โดยเริ่มจากเทคนิคเล็ก ๆ เหล่านี้ได้ ในการ Query บน BigQuery นั้น ไม่ควรใช้ Select * เนื่องจาก BigQuery มีการเก็บข้อมูลแบบ Columnar ถ้าไม่เลือก Column ที่ไม่ได้ใช้ก็จะสามารถช่วยประหยัดค่า Query ได้ (ในกรณีที่ Query ข้อมูลและใช้คำสั่ง Limit จะส่งผลแค่การแสดงผลเท่านั้นไม่ได้ส่งผลกับจำนวน Data ที่สแกน อาจจะทำให้เกิดค่าใช้จ่ายได้)

เขียน SQL Query ให้ดี
4.2 ระหว่างการ Explore Data ถ้าต้องการดู Data ทั้งหมด

เช่น Schema และ Data Structure เพื่อเป็นโครงหรือทำอะไรบางอย่าง ควรใช้ Preview Tab แทนการ Run select statement เนื่องจากไม่มีค่าใช้จ่ายในการ Preview

Google BigQuery - Explore Data
4.3 สามารถ Dry Run ในแต่ละ Query ก่อนรัน Query จริงเพื่อประเมินค่าใช้จ่ายได้
Dry Run ในแต่ละ Query
4.4 ในการ Query เลือกเฉพาะ Columns ที่ต้องการเท่านั้นเพื่อลดการสแกน Data
Google BigQuery - ลดการสแกน Data
  • ในกรณีที่เราต้องการเก็บข้อมูลระยะยาว BigQuery สามารถเลือกใช้รูปแบบการเก็บข้อมูลแบบ Long Term Storage แทน Active Storage ได้ เพื่อลดค่าใช้จ่าย (ในกรณีที่ข้อมูลเราไม่ได้ใช้งานมากกว่า 3 เดือนขึ้นไปใน Partition หรือ Table นั้น ๆ BigQuery มีกระบวนการ Auto เปลี่ยนรูปแบบการเก็บข้อมูลจาก Active เป็น Long term ให้อัตโนมัติทำให้ค่าใช้จ่ายลดลง 50%)
เก็บข้อมูลแบบ Long Term Storage เพื่อลดค่าใช้จ่าย
  • ทำการกำหนด Table Expiration สำหรับ Table ที่มีการใช้งานชั่วคราวได้ table จะถูกลบให้อัตโนมัติหลังจากผ่านวันที่กำหนด
Google BigQuery - Table Expiration

Best practice : ในกรณีที่มีผู้ใช้งาน BigQuery ใหม่ ควรแจ้งแนวทางในการปฏิบัติการใช้ BigQuery ให้ถูกต้องอยู่เสมอ และควรปฏิบัติตามข้อกำหนด Documentation ดังนี้


5. ควรมี Partition เพื่อลดการสแกน Data ที่ไม่จำเป็น

Partitioned table เป็นตารางพิเศษที่แบ่งออกเป็นส่วน ๆ เรียกว่า Partition ซึ่งทำให้ง่ายต่อการจัดการและการ Query โดยการแบ่งตารางขนาดใหญ่ออกเป็นตาราง Partition ขนาดเล็ก จะช่วยเพิ่มประสิทธิภาพในการ Query ได้ และสามารถควบคุมค่าใช้จ่ายได้ โดย Partition จะช่วยลดการสแกน Data ซึ่งตารางที่แบ่ง Partition ผู้ใช้จะถูกบังคับให้ระบุ WHERE clause ดังนั้นทำให้การ Query ก็จะมีค่าใช้จ่ายที่ถูกลง เนื่องจากเป็นการ Query จาก ตาราง Partition นั่นเอง ตัวอย่างเช่น ถ้าเราทำ Partition กับ column Create_date

การทำ Partition กับ column

หากเรามีการใช้ WHERE clause เพื่อ filter Create_date ใน BigQuery สามารถสแกน Partition ที่ตรงกับ Filter ได้ และข้าม Partition ที่เหลือ ซึ่งกระบวนการนี้เรียกว่าการ Partition pruning ซึ่งการทำ Partition pruning เป็นกลไกที่ BigQuery ใช้ เพื่อกำจัด Partition ที่ไม่จำเป็นออกจากการสแกน Data ซึ่งจะช่วยลดค่าใช้จ่ายในการ Query แต่ละครั้งได้

Best Practice : ใช้การแบ่ง Partition ทุกครั้งเมื่อเป็นไปได้ สิ่งนี้ไม่เพียงแต่ปรับปรุงประสิทธิภาพ แต่ยังนำไปสู่การ Query ที่มีประสิทธิภาพ และขอแนะนำให้อ่าน Document ต่อไปนี้

ถ้าอยากรู้จัก BigQuery ให้มากกว่านี้ อย่ารอช้าที่จะติดต่อผู้เชี่ยวชาญจากแทนเจอรีน
ไม่ว่าจะด้าน Data Analytics, Machine Learning & AI หรือแม้แต่ DevOps
ได้ที่อีเมล marketing@tangerine.co.th หรือโทร 094-999-4263 ได้ทันที

Get a Free Consultation
Contact Form_EN Sources (#25)