2011-01-28 13 views
6

mam ula stół jakOkreślanie kodek kompresji dla INSERT OVERWRITE SELECT w Ulu

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

Aby wypełnić, robię coś takiego:

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

To buduje nową partycję z jednostki produkty skompresowane przez deflate, ale idealnym rozwiązaniem byłoby przechodzenie przez kodek kompresji LZO.

Niestety nie jestem do końca pewien, jak to osiągnąć, ale zakładam, że jest to jedno z wielu ustawień środowiska wykonawczego lub może po prostu dodatkowa linia w CREATE TABLE DDL.

Odpowiedz

13

Przed prepend INSERT zastąpione podczas następujących wartości konfiguracyjnych Czas:

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

również upewnić się, masz wymagany kodek kompresji sprawdzając:

io.compression.codecs 

Więcej informacji o io.seqfile.compression .type można znaleźć tutaj http://wiki.apache.org/hadoop/Hive/CompressedStorage

Być może się pomyliłem, ale wydawało się, że typ BLOCK zapewni większe pliki skompresowany przy wyższym współczynniku vs. mniejszy zestaw niższych skompresowanych plików.