2013-10-11 14 views
14

Ngày Hive, tôi tin rằng đếm (khác biệt) sẽ có nhiều khả năng hơn so với nhóm theo kết quả trong một khối lượng công việc không cân bằng để giảm và kết thúc với một giảm đáng kể mài đi. Ví dụ truy vấn dưới đây.Tại sao tính (khác biệt) chậm hơn nhóm theo Hive?

Tại sao?

Ví dụ truy vấn:

select count(distinct user) 
from some_table 

Version với nhóm-by (đề xuất như là nhanh hơn):

select count(*) from 
(select user 
from some_table 
group by user) q 

Lưu ý: trượt 26 this presentation mô tả các vấn đề.

+0

Tôi không hiểu câu hỏi của bạn. Bạn có hỏi tại sao phiên bản 'by by' nhanh hơn không? Nếu có, thì tại sao bạn tin rằng nó nhanh hơn? Bạn đọc nó ở đâu đó hoặc bạn thấy nó hoạt động theo cách đó? –

+1

chỉ cần sử dụng GIẢI THÍCH – Bohdan

Trả lời

20
select count(distinct user) 
from some_table; 

Truy vấn này thực hiện đếm trên bản đồ. Mỗi người lập bản đồ phát ra một giá trị, số đếm. Sau đó, tất cả các giá trị phải được tổng hợp để tạo ra tổng số, và đó là công việc của một bộ giảm tốc duy nhất.

select count(*) from 
(select user 
from some_table 
group by user) q; 

Truy vấn này có hai giai đoạn. Ở giai đoạn 1, GROUP BY tổng hợp người dùng ở phía bản đồ và phát ra một giá trị cho mỗi người dùng. Đầu ra phải được tổng hợp sau đó trên mặt giảm, nhưng nó có thể sử dụng nhiều bộ giảm. Ở giai đoạn 2, COUNT được thực hiện, ở phía bản đồ, và sau đó kết quả cuối cùng được tổng hợp bằng một bộ giảm tốc duy nhất.

Vì vậy, nếu bạn có số lượng lớn các phần tách bên bản đồ thì truy vấn đầu tiên sẽ phải tổng hợp một số lượng rất lớn của một kết quả giá trị. Truy vấn thứ hai có thể sử dụng nhiều bộ giảm ở phía giảm của giai đoạn 1 và sau đó, ở giai đoạn 2, sẽ có một nhiệm vụ nhỏ hơn cho bộ giảm tốc đơn lẻ ở cuối.

Điều này thường không phải là tối ưu hóa. Bạn sẽ phải có một số lượng đáng kể các phần tách bản đồ cho bộ giảm truy vấn 1 để trở thành một vấn đề. Truy vấn thứ hai có hai giai đoạn và điều đó một mình sẽ chậm hơn truy vấn 1 (giai đoạn 2 không thể bắt đầu cho đến khi giai đoạn 1 được thực hiện hoàn toàn). Vì vậy, trong khi tôi có thể thấy một số lý do cho lời khuyên bạn nhận được, tôi sẽ hoài nghi trừ khi việc đo lường thích hợp được thực hiện và cho thấy sự cải thiện.

+1

trong Hive1.1, hai truy vấn này giải thích có cùng kết quả. Cả hai người trong số họ CHỈ CÓ MỘT GIAI ĐOẠN .. –

+0

upvote câu trả lời của bạn. Một ví dụ cho bảng lớn là: nếu có rất ít giá trị riêng biệt, thì tùy chọn đầu tiên có thể chạy nhanh hơn lần thứ hai vì hầu hết các nhóm được thực hiện ở phía bản đồ – Keith

Các vấn đề liên quan