2016-04-22 50 views
9

Come posso inserire la directory di sovrascrittura con lo schema json?HIVE inserisce la directory di sovrascrittura con il formato json

C'è un avro table raw raw; (questo è in realtà ha molti campi)

tb_test-------- 
name string 
kickname string 
----------------- 

poi voglio salvare risultato di una query in qualche directory in HDFS per jsonserde.

Ho provato questo.

insert overwrite directory '/json/' 
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
WITH SERDEPROPERTIES (
"stat_name"="$._col0", 
"stat_interval"="$._col1" 
) 
STORED AS TEXTFILE 
select name, nickname 
from tb_test limit 100 

ma scritto in JSON/JSON/ha _colXX nome del campo al posto del nome del campo di origine.

{"_col0":"basic_qv"," _col1":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 
{"_col0":"basic_qv"," _col1":"h"} 
{"_col0":"basic_qv","_col1 ":"h"} 

mi aspettavo

{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 
{"name":"basic_qv","nickname":"h"} 

Cosa aiutare questo?

Grazie !!

+0

Sono di fronte a un problema simile con il formato AVRO. Hai trovato la soluzione? Per favore fatemi sapere se conoscete qualche soluzione alternativa. – Munesh

+0

è in formato avro output o formato tabella? Non sono riuscito a trovare soluzioni alternative per l'alveare. Invece l'ho fatto per scintilla. Eseguire spark sql quindi esportare dataframe come json. scintilla supporto vari formati di esportazione in una natura. –

+0

AVRO è il formato file di output richiesto. Sì, Spark è una buona soluzione. – Munesh

risposta

1

Sembra che il tuo problema con una soluzione alternativa (usando JsonUDF con named_struct) è descritto qui: https://github.com/rcongiu/Hive-JSON-Serde/issues/151

extract.hql: 
add jar /home/myuser/lib/json-udf-1.3.8-SNAPSHOT-jar-with-dependencies.jar; 
create temporary function tjson as 'org.openx.data.udf.JsonUDF'; 

insert overwrite local directory '/json/' 
select 
tjson(named_struct("name", t.name,"nickname", t.nickname)) 
from tb_test t 
; 

Inoltre è possibile creare la tabella JsonSerDe-based con colonne definite, insert overwrite e utilizzare posizione tavolo invece di directory .