# การ execute query ของ hive

**URL:** <https://discuss.dataengineercafe.io/t/execute-query-hive/680>\
**Category:** General Discussion เรื่อง Data Engineering\
**Tags:** sql\
**Created:** [February 14, 2024, 1:23pm UTC](https://discuss.dataengineercafe.io/t/execute-query-hive/680 "2024-02-14T13:23:12Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![pp-bigz](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/pp-bigz/32/1101_2.png) [@pp-bigz](https://discuss.dataengineercafe.io/u/pp-bigz)\
**Post date:** [February 14, 2024, 1:23pm UTC](https://discuss.dataengineercafe.io/t/execute-query-hive/680/1 "2024-02-14T13:23:12Z")

</div>

สวัสดีครับพอดีผมได้มีปสก. ลองรัน data เยอะครั้งแรกครับประมาณ 5000 กว่าล้าน record  
แล้วคราวนี้ใน qry ที่ผมเขียนจะใช้พวก case when, sum, substring แล้วก็มี where ครับ  
สิ่งที่ผมเจอคือ  
ผมรัน qry ที่มันทั้งพวก case when, sum, substring และ where รันประมาณ 10ชม++ ครับ

แต่ผมลองเปลี่ยนมาเป็น create temp 2 ก้อน  
ก้อนแรกคือก้อนที่ where มาแล้ว  
ก้อนที่ 2 คือเอาก้อนแรกมาทำ transform ต่างๆ ใช้เวลารันประมาณ 1ชม.

แล้วผมก็มาดูว่าการทำงานของ qry ทั้ง 2 แบบไม่ต่างกันมาก  
ยกตัวอย่าง qry ทั้ง 2 แบบ  
แบบที่ 1  
CREATE TEMPORARY TABLE a (  
SELECT  
case when,  
sum,  
substring  
FROM x  
WHERE y=z)

แบบที่ 2  
CREATE TEMPORARY TABLE a (  
SELECT  
case when,  
sum,  
substring  
FROM x  
WHERE y=z  
)

CREATE TEMPORARY TABLE b (  
SELECT \*  
FROM a  
)  
ผมเลยอยากรู้ว่า logic ของ hive ในการอ่าน qry มันทำงานยังไงครับ  
ขอบคุณครับ

---

<div class="post-metadata">

**Author:** ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)\
**Post date:** [February 24, 2024, 6:15am UTC](https://discuss.dataengineercafe.io/t/execute-query-hive/680/2 "2024-02-24T06:15:33Z")

</div>

ผมไม่แน่ใจข้างในของ Hive ว่าทำงานอย่างไรนะครับ พี่ @Nengchakun หรือ @yothinix อาจจะสามารถช่วยเสริมส่วนตรงนี้ได้

ผมขอตอบแบบ Practice การ Query ข้อมูลโดยทั่วไปแทนนะครับผม ตรงนี้ใช้ได้กับทุก ๆ Data Warehouse เลยคือ ให้เรา Filter ตารางใหญ่ ๆ ให้เหลือน้อย ๆ ก่อน แล้วค่อยเอามาทำ Aggregation ต่อ ซึ่งแน่นอนว่าส่วน Computation จะเร็วกว่า เพราะว่าคำนวณจากข้อมูลที่น้อยกว่าครับผม

บทความในนี้อาจจะมีประโยชน์ครับ [สรุปบทความ Optimize your bigquery performance ของ Sagar Tiwari](https://discuss.dataengineercafe.io/t/optimize-your-bigquery-performance-sagar-tiwari/423)
