2011-09-25 39 views
16

Tôi đang chạy hive 071, xử lý dữ liệu hiện có là có cách bố trí thư mục sau:
-TableName
- d = (ví dụ 2011/08/01)
- d = 2011-08-02
- d = 2011-08-03

... vv
dưới mỗi ngày tôi có tệp ngày.
nay đến nạp dữ liệu Tôi đang sử dụngHive: phân vùng động thêm vào bảng bên ngoài

CREATE EXTERNAL TABLE table_name (i int) 
PARTITIONED BY (date String) 
LOCATION '${hiveconf:basepath}/TableName';** 

Tôi muốn kịch bản hive của tôi để có thể tải các phân vùng có liên quan theo một số ngày đầu vào, và số ngày. vì vậy nếu tôi vượt qua date = '2011/08/03'ngày = '7'
Các kịch bản nên tải các phân vùng sau - d = 2011/08/03
- d = 2011-08 -04
- d = 2011/08/05
- d = 2011/08/06
- d = 2011/08/07
- d = 2011/08/08
- d = 2011-08 -09

Tôi không tìm thấy bất kỳ cách phân biệt nào để thực hiện CEPT explicitlly chạy:

ALTER TABLE table_name ADD PARTITION (d='2011-08-03'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-04'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-05'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-06'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-07'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-08'); 
ALTER TABLE table_name ADD PARTITION (d='2011-08-09'); 

và sau đó chạy truy vấn của tôi

select count(1) from table_name; 

tuy nhiên điều này là dĩ nhiên không tự động theo ngày và những ngày đầu vào

Có cách nào tôi có thể xác định để bên ngoài bảng để tải phân vùng theo phạm vi ngày, hoặc ngày arithmetics?

+0

Xin chào! Bạn có thể giải quyết vấn đề này không? Nếu có, bạn có thể chia sẻ giải pháp của mình không? Cảm ơn!! – eli

+0

Khi tôi đang làm việc với Amazon EMR. nó apears rằng Amazon thực hiện lệnh sau: "thay đổi bảng X phục hồi phân vùng" mà thêm tất cả các thư mục con như phân vùng. điều này giải quyết một phần vấn đề bằng cách sử dụng "nơi d> bắt đầu và d <đến" nhưng có thể mất chút thời gian nếu bạn có vài nghìn phân vùng – Tomer

+0

Cảm ơn. Tôi đã hy vọng tránh phải khôi phục phân vùng, vì nó mất khá nhiều thời gian. – eli

Trả lời

0

Phân vùng là phân đoạn vật lý của dữ liệu - nơi phân vùng được duy trì bởi hệ thống thư mục và truy vấn sử dụng siêu dữ liệu để xác định vị trí của phân vùng. vì vậy nếu bạn có thể làm cho cấu trúc thư mục phù hợp với truy vấn, nó sẽ tìm thấy dữ liệu bạn muốn. ví dụ:

select count(*) from table_name where (d >= '2011-08-03) and (d <= '2011-08-09'); 

nhưng tôi không biết bất kỳ hoạt động phạm vi ngày nào khác, bạn sẽ phải làm toán để tạo mẫu truy vấn trước.

bạn cũng có thể tạo các bảng bên ngoài và thêm phân vùng vào chúng để xác định vị trí. Điều này cho phép bạn băm nhỏ dữ liệu theo ý muốn và vẫn sử dụng lược đồ phân vùng để tối ưu hóa các truy vấn.

-1

tôi đã giới thiệu kịch bản tương tự như trong bài đăng blog của tôi:

1) Bạn cần phải thiết lập thuộc tính:

SET hive.exec.dynamic.partition=true; 
SET hive.exec.dynamic.partition.mode=nonstrict; 

2) Tạo một bảng dàn bên ngoài để tải các file dữ liệu đầu vào trong này bàn.

3) Tạo bảng ngoài sản xuất chính "production_order" với trường ngày làm một trong các cột được phân đoạn.

4) Nạp bảng sản xuất từ ​​bảng dàn để dữ liệu được phân phối tự động trong phân vùng.

Giải thích khái niệm tương tự trong bài đăng trên blog bên dưới. Nếu bạn muốn xem mã.

http://exploredatascience.blogspot.in/2014/06/dynamic-partitioning-with-hive.html

+0

Đây có thể là triển khai tồi tệ nhất khi sử dụng dàn dựng cho trường hợp sử dụng sản xuất. Họ đang có cho một mục đích. Đừng làm lộn xộn với infras –

0

Tôi không tin có bất kỳ built-in chức năng cho điều này trong Hive. Bạn có thể viết một plugin.

Có lẽ không cần phải đề cập đến điều này, nhưng bạn đã xem xét một tập lệnh bash đơn giản có thể lấy thông số của bạn và đặt lệnh cho các lệnh để hive?

Quy trình làm việc của Oozie sẽ là một tùy chọn khác, tuy nhiên đó có thể là quá mức cần thiết. Oozie Hive Extension - Sau khi suy nghĩ, tôi không nghĩ Oozie sẽ làm việc cho việc này.

6

Tôi gặp vấn đề rất giống nhau, sau khi di chuyển, tôi phải tạo lại một bảng mà tôi có dữ liệu chứ không phải siêu dữ liệu. Giải pháp có vẻ như sau khi tạo lại bảng:

MSCK REPAIR TABLE table_name;

Explained here

này cũng đề cập đến "alter table X recover partitions" rằng OP nhận xét về bài đăng của mình. MSCK REPAIR TABLE table_name; hoạt động trên các triển khai không phải Amazon-EMR (Cloudera trong trường hợp của tôi).

+0

Cảm ơn bạn đã thấu hiểu. :) –

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