ใช้รีลีส 0.11.0 ฉันได้รับผลลัพธ์ที่ไม่ถูกต้องเมื่อพยายามดำเนินการค้นหานี้
select t1.symbol, max(t1.maxts - t1.orderts) as diff from
(select catid, symbol, max(cast(timestamp as double)*1000) as maxts, min(cast(timestamp as double)*1000) as orderts, count(*) as cnt
from cat where recordtype in (0,1) and customerid=srcrepid group by symbol, catid) t1
where t1.cnt > 1
group by t1.symbol;
อย่างที่คุณเห็น มีแบบสอบถามย่อยที่มีคำสั่งแบบกลุ่มตามคำสั่ง แบบสอบถามย่อยนี้จะคำนวณค่าสูงสุดและต่ำสุดของค่าการประทับเวลาต่อ MYID และ SYMBOL
ตอนนี้ฉันมี 24 สัญลักษณ์ ในแบบสอบถามภายนอก ฉันต้องการค้นหาความแตกต่างสูงสุดต่อ SYMBOL ดังนั้นฉันจึงจัดกลุ่มตาม SYMBOL
ปัญหาคือตอนนี้ส่งคืนแถวผลลัพธ์ 864 แถว ดูเหมือนว่า Hive จะล้มเหลวในการลดผลลัพธ์สุดท้ายให้เป็นสิ่งที่ฉันคาดหวังที่จะเห็น
นี่เป็นข้อผิดพลาดหรือไม่? มีใครสามารถทำซ้ำสิ่งนี้ได้หรือไม่? ฉันมี 6 โหนดที่ทำงานโดยมี 4 สัญลักษณ์ต่อโหนด
ตารางที่ใช้:
create table cat(CATID bigint, CUSTOMERID int, FILLPRICE double, FILLSIZE int, INSTRUMENTTYPE int, ORDERACTION int, ORDERSTATUS int, ORDERTYPE int, ORDID string, PRICE double, RECORDTYPE int, SIZE int, SRCORDID string, SRCREPID int, TIMESTAMP timestamp) PARTITIONED BY (SYMBOL string, REPID int) row format delimited fields terminated by ',' stored as ORC;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=1000;
hive.exec.max.dynamic.partitions.pernode=1000;
แก้ไข: แก้ไขเนื่องจากแบบสอบถามไม่สอดคล้องกับตารางจริงที่ใช้ ทำให้ยากต่อการให้ความช่วยเหลือ...