Hive - Phân vùng
Hive tổ chức các bảng thành các phân vùng. Đó là một cách chia bảng thành các phần liên quan dựa trên giá trị của các cột được phân vùng như ngày, thành phố và phòng ban. Sử dụng phân vùng, có thể dễ dàng truy vấn một phần dữ liệu.
Bảng hoặc phân vùng được chia nhỏ thành buckets,để cung cấp cấu trúc bổ sung cho dữ liệu có thể được sử dụng để truy vấn hiệu quả hơn. Bucketing hoạt động dựa trên giá trị của hàm băm của một số cột trong bảng.
Ví dụ, một bảng có tên Tab1chứa dữ liệu của nhân viên như id, tên, dept và yoj (tức là năm gia nhập). Giả sử bạn cần truy xuất thông tin chi tiết của tất cả nhân viên đã tham gia vào năm 2012. Một truy vấn tìm kiếm toàn bộ bảng cho thông tin cần thiết. Tuy nhiên, nếu bạn phân vùng dữ liệu nhân viên với năm và lưu trữ trong một tệp riêng, nó sẽ giảm thời gian xử lý truy vấn. Ví dụ sau đây cho thấy cách phân vùng tệp và dữ liệu của nó:
Tệp sau đây chứa bảng dữ liệu việc làm.
/ tab1 / Employeedata / file1
id, name, dept, yoj
1, gopal, TP, 2012
2, kiran, HR, 2012
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
Dữ liệu trên được phân chia thành hai tệp sử dụng năm.
/ tab1 / Employeedata / 2012 / file2
1, gopal, TP, 2012
2, kiran, HR, 2012
/ tab1 / Employeedata / 2013 / file3
3, kaleel,SC, 2013
4, Prasanth, SC, 2013
Thêm phân vùng
Chúng ta có thể thêm phân vùng vào bảng bằng cách thay đổi bảng. Giả sử chúng ta có một bảng được gọi làemployee với các trường như Id, Tên, Lương, Chức vụ, Bộ phận và yoj.
Cú pháp:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec
[LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
partition_spec:
: (p_column = p_col_value, p_column = p_col_value, ...)
Truy vấn sau được sử dụng để thêm phân vùng vào bảng nhân viên.
hive> ALTER TABLE employee
> ADD PARTITION (year=’2012’)
> location '/2012/part2012';
Đổi tên phân vùng
Cú pháp của lệnh này như sau.
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
Truy vấn sau được sử dụng để đổi tên phân vùng:
hive> ALTER TABLE employee PARTITION (year=’1203’)
> RENAME TO PARTITION (Yoj=’1203’);
Bỏ phân vùng
Cú pháp sau được sử dụng để thả một phân vùng:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
Truy vấn sau được sử dụng để thả phân vùng:
hive> ALTER TABLE employee DROP [IF EXISTS]
> PARTITION (year=’1203’);