2011-01-28 27 views
6

Tôi có một bảng tổ ong nhưXác định codec nén cho một INSERT OVERWRITE SELECT trong Hive

CREATE TABLE beacons 
(
    foo string, 
    bar string, 
    foonotbar string 
) 
COMMENT "Digest of daily beacons, by day" 
PARTITIONED BY (day string COMMENt "In YYYY-MM-DD format"); 

Để cư trú, tôi đang làm một cái gì đó như:

SET hive.exec.compress.output=True; 
SET io.seqfile.compression.type=BLOCK; 

INSERT OVERWRITE TABLE beacons PARTITION (day = "2011-01-26") SELECT 
    someFunc(query, "foo") as foo, 
    someFunc(query, "bar") as bar, 
    otherFunc(query, "foo||bar") as foonotbar 
    ) 
    FROM raw_logs 
WHERE day = "2011-01-26"; 

này xây dựng một phân vùng mới với cá nhân các sản phẩm được nén thông qua deflate, nhưng lý tưởng ở đây là phải trải qua codec nén LZO thay thế.

Thật không may là tôi không chắc chắn cách thực hiện điều đó, nhưng tôi cho rằng đó là một trong nhiều cài đặt thời gian chạy hoặc có thể chỉ là một dòng bổ sung trong CREATE TABLE DDL.

Trả lời

13

Trước khi thêm vào trước INSERT OVERWRITE với các giá trị cấu hình thời gian chạy sau:

SET hive.exec.compress.output=true; 
SET io.seqfile.compression.type=BLOCK; 
SET mapred.output.compression.codec = com.hadoop.compression.lzo.LzopCodec; 

Ngoài ra hãy chắc chắn rằng bạn có các codec nén mong muốn bằng cách kiểm tra:

io.compression.codecs 

Thông tin thêm về io.seqfile.compression .type có thể được tìm thấy ở đây http://wiki.apache.org/hadoop/Hive/CompressedStorage

Tôi có thể nhầm lẫn, nhưng có vẻ như loại BLOCK sẽ đảm bảo tệp lớn hơn được nén ở tỷ lệ cao hơn so với tập hợp các tệp nén thấp hơn.

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