2017-11-06 37 views
6

Tôi đang cố gắng tối ưu hóa truy vấn impala rất dài và phức tạp chứa nhiều CTE. Mỗi CTE được sử dụng nhiều lần. Kỳ vọng của tôi là khi CTE được tạo, tôi sẽ có thể trực tiếp impala rằng kết quả của CTE này sẽ được sử dụng lại trong truy vấn chính như là thay vì SCAN HDFS hoạt động trên các bảng liên quan đến CTE một lần nữa với truy vấn chính. Điều này có thể không? nếu có thì sao?Đánh giá ngay lập tức CTE

Tôi đang sử dụng phiên bản impalad CHÍ 2.1.1-cdh5 (xây dựng 7901877736e29716147c4804b0841afc4ebc9037) phiên bản

+0

có thể là một câu hỏi ngu ngốc nhưng CTE – shainnif

+0

là những gì @shainnif Tôi giả định của nó Impala Common Table Expressions –

Trả lời

2

Tôi không nghĩ như vậy. Tôi tin rằng WITH khoản không tạo ra bất kỳ đối tượng cố định, nó chỉ cho bạn tránh lộn xộn không gian tên với bảng mới hoặc quan điểm và để làm cho nó dễ dàng hơn để tái cấu trúc các truy vấn phức tạp lớn bằng cách reor‐ dering và thay thế các bộ phận cá nhân của họ. Các truy vấn được sử dụng trong mệnh đề WITH là các ứng cử viên tốt để một ngày nào đó trở thành quan điểm hoặc được hiện thực hóa như các bảng tóm tắt trong quá trình ETL.

2

Điều này có khả thi không?

Mục đích rất của CTE là để tái sử dụng các kết quả thu được từ một truy vấn trước đó (có sử dụng mệnh đề with) bởi một truy vấn sau đây, nói rằng, SELECT. Vì vậy, tôi không thấy lý do tại sao nó không phải là có thể.

Sử dụng Explain trên truy vấn của bạn để tìm hiểu chi tiết SCAN thực tế HDFS.

Để biết thêm I/O hiểu biết liên quan sử dụng profile như trong tài liệu chính thức https://www.cloudera.com/documentation/enterprise/5-7-x/topics/impala_explain_plan.html#perf_profile

+1

Mục đích chính của một CTE được để sử dụng lại truy vấn, không phải để nắm bắt một tập hợp kết quả cụ thể được thu thập từ việc chạy truy vấn được cho biết. –

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