2017-04-05 3 views
2

IS Est-il possible d'utiliser un serice JSON avec des formats de fichier RC ou ORC? J'essaie d'insérer dans une table Hive avec le format de fichier ORC et de stocker sur blob azur dans JSON sérialisé.Hive Json SerDE pour ORC ou RC Format

Répondre

1

Apparemment pas

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", "Bonjour"}

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
a échoué avec exception java.io.IOException: java.lang.ClassCastException:
org.apache.hadoop.hive.ql.io.orc.OrcStruct ne peut pas être jeté à org.apache.hadoop.io.Text

JsonSerDe.java:

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

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

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

Vous pouvez le faire en utilisant une sorte d'étape de conversion, comme une étape de stockage qui produira des fichiers ORC dans un répertoire cible et montera une table hive avec le même schéma après le stockage. Comme ci-dessous.

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;