2011-01-28 182 views
6

指定壓縮編解碼器的INSERT OVERWRITE SELECT我有一個像在蜂巢

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"); 

蜂巢表填充,我做這樣的事情:

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"; 

這將構建一個新的分區與個人產品通過放氣壓縮,但理想的情況是通過LZO壓縮編碼解碼器。

不幸的是,我不完全確定如何實現,但我認爲這是許多運行時設置之一,或者可能只是CREATE TABLE DDL中的一行。

回答

13

的INSERT OVERWRITE在前面加上以下運行時配置值之前:

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

另外,還要確保你有所需的壓縮編解碼器通過檢查:

io.compression.codecs 

約io.seqfile.compression更多信息.type可以在這裏找到http://wiki.apache.org/hadoop/Hive/CompressedStorage

我也許錯了,但它似乎像塊類型將確保更大的文件壓縮比率較高,而壓縮文件較小。