2012-03-08 40 views
6

Tôi đã chơi với Hive vài ngày nay nhưng tôi vẫn gặp khó khăn với phân vùng.Tôi có thể phân vùng một bảng bằng HIVE như thế nào?

Tôi đã ghi nhật ký Apache (Định dạng kết hợp) trong Hadoop trong vài tháng. Chúng được lưu trữ ở định dạng văn bản liên tiếp, phân chia theo ngày (thông qua máng): /logs/yyyy/mm/dd/hh/*

Ví dụ:

/logs/2012/02/10/00/Part01xx (02/10/2012 12:00 am) 
/logs/2012/02/10/00/Part02xx 
/logs/2012/02/10/13/Part0xxx (02/10/2012 01:00 pm) 

Ngày trong file combined log được sau định dạng này [10/Feb/2012: 00: 00: 00 -0800]

Làm cách nào để tạo bảng ngoài có phân vùng trong Hive sử dụng phân vùng vật lý của tôi. Tôi không thể tìm thấy bất kỳ tài liệu nào tốt về phân vùng Hive. Tôi tìm thấy câu hỏi có liên quan như:

Nếu tôi tải các bản ghi của tôi trong một bảng bên ngoài với Hive, tôi không thể phân vùng với thời gian, vì nó không phải là định dạng tốt (Feb < => 02). Ngay cả khi nó ở định dạng tốt thì làm cách nào để tôi chuyển đổi chuỗi "10/02/2012: 00: 00: 00 -0800" thành nhiều thư mục "/ 2012/02/10/00"?

Tôi cuối cùng có thể sử dụng tập lệnh lợn để chuyển đổi các bản ghi thô thành bảng hive nhưng tại thời điểm này tôi chỉ nên sử dụng lợn thay vì tổ để làm báo cáo của mình.

Trả lời

5

Nếu tôi hiểu chính xác, bạn có tệp ở cấp độ thư mục sâu 4 từ nhật ký thư mục. Trong trường hợp đó, bạn xác định bảng của bạn là bên ngoài với đường dẫn 'nhật ký' và được phân đoạn bởi 4 trường ảo: năm, tháng, day_of_month, hour_of_day.

Phân vùng cơ bản được thực hiện cho bạn bởi Flume.

CHỈNH SỬA 3/9: Rất nhiều chi tiết phụ thuộc vào cách chính xác Flume ghi tệp. Nhưng trong điều kiện chung, DDL của bạn sẽ giống như thế này:

CREATE TABLE table_name(fields...) 
PARTITIONED BY(log_year STRING, log_month STRING, 
    log_day_of_month STRING, log_hour_of_day STRING) 
format description 
STORED AS TEXTFILE 
LOCATION '/your user path/logs'; 

EDIT 3/15: Theo yêu cầu zzarbi, tôi thêm một lưu ý rằng sau khi bảng được tạo ra, Hive cần phải được thông báo về các phân vùng được tạo. Điều này cần phải được thực hiện liên tục miễn là Flume hoặc quá trình khác tạo ra các phân vùng mới. Xem câu trả lời của tôi cho câu hỏi Create external with Partition.

+0

Vì vậy, tôi sẽ tạo bảng trông như thế nào? và tôi sẽ làm một truy vấn để sử dụng những phân vùng? – zzarbi

+0

Xem các chỉnh sửa của tôi trong câu trả lời. – Olaf

+0

Tôi sẽ phải kiểm tra rằng tôi sẽ lấy lại cho bạn ngay khi tôi có thể – zzarbi

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