2017-04-05 5 views
2

IS Es ist möglich, einen JSON-Serde mit RC- oder ORC-Dateiformaten zu verwenden? Ich versuche, in eine Hive-Tabelle mit dem Dateiformat ORC einzufügen und auf dem azurblauen Blob in serialisiertem JSON zu speichern.Hive Json SerDE für ORC- oder RC-Format

Antwort

1

Offenbar nicht

insert overwrite local directory '/home/cloudera/local/mytable' 
stored as orc 
select '{"mycol":123,"mystring","Hello"}' 
; 

create external table verify_data (rec string) 
stored as orc 
location 'file:////home/cloudera/local/mytable' 
; 

select * from verify_data 
; 

rec
{ "mycol": 123, "mystring", "Hallo"}

create external table mytable (myint int,mystring string) 
row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
stored as orc 
location 'file:///home/cloudera/local/mytable' 
; 

myint mystring
konnte nicht mit Ausnahme java.io.IOException: java.lang.ClassCastException:
org.apache.hadoop.hive.ql.io.orc.OrcStruct kann nicht auf org.apache.hadoop.io.Text

JsonSerDe.java gewirkt:

... 
import org.apache.hadoop.io.Text; 
... 

    @Override 
    public Object deserialize(Writable blob) throws SerDeException { 

    Text t = (Text) blob; 
    ... 
0

Sie können dies tun, indem eine Art Konvertierungsschritt, wie ein Bucketting-Schritt, der ORC-Dateien in einem Zielverzeichnis erzeugt und nach dem Bucketing eine Hive-Tabelle mit demselben Schema einfügt. Wie unten.

CREATE EXTERNAL TABLE my_fact_orc 
(
    mycol STRING, 
    mystring INT 
) 
PARTITIONED BY (dt string) 
CLUSTERED BY (some_id) INTO 64 BUCKETS 
STORED AS ORC 
LOCATION 's3://dev/my_fact_orc' 
TBLPROPERTIES ('orc.compress'='SNAPPY'); 

ALTER TABLE my_fact_orc ADD IF NOT EXISTS PARTITION (dt='2017-09-07') LOCATION 's3://dev/my_fact_orc/dt=2017-09-07'; 

ALTER TABLE my_fact_orc PARTITION (dt='2017-09-07') SET FILEFORMAT ORC; 

SELECT * FROM my_fact_orc WHERE dt='2017-09-07' LIMIT 5; 
Verwandte Themen