บทความนี้เขียนวิธี optimize BigQuery’s performance ไปส่องแล้ว เป็นทิปที่เข้าใจง่ายดี เลยขอมาสรุปให้อ่านกัน
เค้าเขียนไว้ 5 ข้อตามนี้
-
ถ้าข้อมูลใหญ่มาก ๆ ให้ใช้
top
แทนlimit
เช่น เราจะเลือก 100 แถวแรกมาแสดงผลselect top 100 * from blog_perf.rides
เพราะว่า
limit
จะเป็นการ filter จาก full table scan ถ้าใช้บ่อย ๆ ใช้เพลิน ๆ เงินปลิวแน่นอนครับ -
BigQuery มี feature ที่หน้า UI คือเวลาที่เราเขียน query เสร็จ มันจะคำนวณมาให้ก่อนว่า query นี้จะไปดึงข้อมูลมาประมาณขนาดเท่าไหร่ ก่อนที่เราจะรันจริง ๆ ก็ให้ใช้ feature นี้ก่อนนะ
-
อย่าใช้
select *
อันนี้ก็เป็น practice ที่เราควรใช้ ไม่ว่าจะเป็น BigQuery หรือ data warehouse ตัวอื่น -
ระวังเรื่อง order by เพราะว่า BigQuery มี architecture แบบ distributed ดังนั้นการที่เราจะใช้ order by ก็มีผลต่อ performance ด้วยนะ เพราะมันต้องไปดึงข้อมูลมาจาก node ต่าง ๆ มา sort ซึ่งถ้าเราจะใช้จริง ๆ ก็ให้ไปใช้ที่ outermost level ของ query ที่เราเขียน
-
ให้เริ่มเขียน SQL ที่ table ที่ใหญ่ที่สุดก่อน และ filter ออกให้มากที่สุดก่อนที่จะเอาไปใช้ต่อ จริง ๆ ตรงนี้จะช่วยตอน BigQuery ทำ shuffling ได้ เค้าบอกว่า BigQuery มีตัว optimizer ทำตรงนี้ให้อยู่แล้ว แต่เพื่อความชัวร์ เราก็ยึดแนว practice นี้ไว้ก่อนดีกว่า อิอิ
ใครมีทิปแนว ๆ optimizing data warehouse’s performance มาแชร์กันได้นะ