Hive View và Lập chỉ mục: Tạo với Ví dụ
⚡ Tóm tắt thông minh
Trong Hive, Views là các truy vấn đã được lưu, hoạt động giống như các bảng chỉ đọc, trong khi Index là các con trỏ đến một cột giúp tăng tốc độ tìm kiếm, và cả hai đều được tạo bằng các câu lệnh HiveQL ngắn gọn như được hiển thị ở đây.

Chế độ xem là gì?
Các view tương tự như các bảng, và chúng được tạo ra dựa trên các yêu cầu. Một view là một đối tượng thuần túy logic, không có bộ nhớ riêng: Hive chỉ lưu giữ văn bản truy vấn trong metastore và đánh giá nó mỗi khi view được tham chiếu.
- Chúng tôi có thể lưu bất kỳ dữ liệu tập kết quả nào dưới dạng chế độ xem trong Hive
- Cách sử dụng tương tự như các view được sử dụng trong SQL
- View chỉ có thể đọc dữ liệu, do đó nó không thể là đối tượng của các câu lệnh LOAD, INSERT hoặc ALTER ghi dữ liệu.
Tạo chế độ xem:
Cú pháp:
Create VIEW <VIEWNAME> AS SELECT
Biểu mẫu đầy đủ được ghi lại cũng chấp nhận mệnh đề IF NOT EXISTS và danh sách cột tùy chọn, điều này hữu ích khi danh sách SELECT chứa các biểu thức thay vì chỉ là tên cột thông thường.
Ví dụ:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Trong ví dụ này, chúng ta tạo view Sample_View, hiển thị tất cả các giá trị hàng có trường lương lớn hơn 25000. Bộ lọc nằm bên trong view, vì vậy bất kỳ truy vấn nào chọn dữ liệu từ Sample_View chỉ thấy những hàng đó.
Chỉ mục là gì?
Chỉ mục là các con trỏ trỏ đến tên cột cụ thể của một bảng. Mục tiêu của chỉ mục là cải thiện tốc độ tìm kiếm: nếu không có chỉ mục, một truy vấn với mệnh đề điều kiện như... WHERE tab1.col1 = 10 Thao tác này tải toàn bộ bảng hoặc phân vùng và xử lý mọi hàng, trong khi chỉ mục trên cột 1 cho phép Hive chỉ đọc một phần của tập tin.
- Người dùng phải xác định chỉ mục theo cách thủ công
- Bất cứ khi nào chúng ta tạo chỉ mục, điều đó có nghĩa là chúng ta đang tạo một con trỏ đến tên cột cụ thể của bảng.
- Mọi thay đổi được thực hiện đối với cột trong bảng đều được lưu trữ bằng cách sử dụng giá trị chỉ mục được tạo trên tên cột.
Việc tăng tốc đó không phải là miễn phí. Việc xây dựng chỉ mục tốn thêm tài nguyên xử lý, và bản thân chỉ mục chiếm dung lượng ổ đĩa cần được duy trì song song với bảng dữ liệu.
Cú pháp:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Ví dụ:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Ở đây, chúng ta đang tạo một chỉ mục trên bảng guruhive_internaltable cho cột có tên là id. Lưu ý rằng một câu lệnh hoàn chỉnh trên phiên bản vẫn hỗ trợ lập chỉ mục cũng cần một mệnh đề xử lý chỉ mục, điều mà phần tiếp theo sẽ trình bày đầy đủ.
Sự khác biệt giữa View và Index trong Hive
Các view và index thường được giới thiệu cùng nhau vì cả hai đều nằm trên một bảng hiện có, nhưng chúng giải quyết các vấn đề khác nhau. View thay đổi những gì truy vấn nhìn thấy, trong khi index thay đổi tốc độ Hive tìm thấy nó. Bảng dưới đây so sánh chúng.
| Yếu tố | Xem | Chỉ số |
|---|---|---|
| Nó lưu trữ những gì | Chỉ có câu lệnh SELECT trong metastore. | Một bảng chỉ mục riêng biệt chứa các con trỏ đến dữ liệu. |
| Mục đích | Đơn giản hóa hoặc giới hạn những gì truy vấn trả về. | Giảm lượng dữ liệu được quét cho một vị ngữ |
| Chi phí đĩa | Không áp dụng | Thêm dung lượng lưu trữ cộng với việc khôi phục lại sau khi dữ liệu thay đổi. |
| Ghi truy cập | Chỉ đọc | Không được truy vấn trực tiếp; trình tối ưu hóa sử dụng nó. |
| Tình trạng hiện tại | Được hỗ trợ đầy đủ | Đã bị loại bỏ trong Hive 3.0 |
Trên thực tế, một view được tạo ra để dễ đọc và kiểm soát truy cập, còn một index được tạo ra hoàn toàn vì hiệu suất trên một cột được chọn lọc.
Các loại chỉ mục trong Hive kèm cú pháp
Các phiên bản Hive đến 2.x đều có hai trình xử lý chỉ mục, và trình xử lý này được nêu tên trong mệnh đề AS bắt buộc. Tính năng lập chỉ mục nhỏ gọn xuất hiện trong Hive 0.7.0 và lập chỉ mục bitmap trong Hive 0.8.0.
- Mục lục rút gọn: Phương pháp này lưu trữ giá trị cùng với địa chỉ của khối HDFS chứa giá trị đó, thay vì ghi lại vị trí của từng lần xuất hiện riêng lẻ. Nó phù hợp với các cột có nhiều giá trị khác nhau.
- Chỉ mục ảnh bitmap: Lưu trữ một bitmap cho mỗi giá trị khác nhau, đây là cách tiếp cận thông thường đối với một cột chỉ có một số lượng nhỏ các giá trị khác nhau, chẳng hạn như trạng thái hoặc giới tính.
Một chỉ mục thu gọn được tạo, liệt kê và xóa như sau:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Tùy chọn WITH DEFERRED REBUILD đăng ký chỉ mục mà không điền dữ liệu vào đó, do đó quá trình xây dựng có thể được lên lịch riêng bằng lệnh ALTER INDEX. Chỉ mục bitmap được tạo theo cách tương tự, với tên trình xử lý khác:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Chỉ mục không được làm mới tự động. Bất cứ khi nào bảng cơ sở nhận được dữ liệu mới, lệnh ALTER INDEX … REBUILD phải được chạy lại, và trên bảng được phân vùng, việc xây dựng lại có thể bị giới hạn ở một phân vùng duy nhất.
Vì sao tính năng lập chỉ mục bị loại bỏ trong Hive 3.0?
Chức năng lập chỉ mục đã bị loại bỏ khỏi Hive trong phiên bản 3.0 theo bản vá HIVE-18448, do đó các lệnh CREATE INDEX, SHOW INDEX và DROP INDEX không còn tồn tại trên cụm máy chủ hiện tại. Tính năng này hiếm khi đáng để xây dựng lại sau khi phương pháp lưu trữ theo cột và trình tối ưu hóa dựa trên chi phí đã được hoàn thiện. Ba lệnh thay thế này đều thực hiện cùng một nhiệm vụ.
- Các khung nhìn được vật chất hóa: được giới thiệu trong Hive 3.0.0, một quan điểm vật chất Nó lưu trữ kết quả đã được tính toán trước của một truy vấn và trình tối ưu hóa sẽ tự động viết lại các truy vấn đến dựa trên kết quả đó.
- Định dạng tệp dạng cột: ORC và Parquet có các chỉ mục nhẹ và thống kê min/max riêng, do đó trình đọc có thể bỏ qua toàn bộ các dải, khối hoặc tệp mà không cần chỉ mục do người dùng định nghĩa.
- Phân vùng và thùng chứa: phân vùng và nhóm Cắt tỉa dữ liệu ở cấp độ thư mục và tệp, điều này thường loại bỏ nhiều dữ liệu đầu vào hơn so với việc lập chỉ mục.
Trên Hive 2.x, chỉ mục vẫn hợp lệ, nhưng các công việc mới sẽ hiệu quả hơn nếu sử dụng một trong các tùy chọn nêu trên.
