2016-04-22 20 views
9

Jak mogę wstawić katalog zastępczy ze schematem json?Ukryj katalog nadpisywania wstawiania w formacie json

Istnieje surowy stół avro ula; (jest to faktycznie ma wiele pól)

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

następnie chcę, aby zapisać wynik kwerendy do jakiegoś katalogu, w HDFS przez jsonserde.

Próbowałem tego.

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 

Ale napisane json w/json/ma nazwę pola _colXX zamiast nazwy pola początkowego.

{"_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"} 

Spodziewałem

{"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"} 

Co to pomoże?

Dzięki!

+0

Mam podobny problem z formatem AVRO. Znalazłeś rozwiązanie? Daj mi znać, jeśli znasz jakieś obejścia. – Munesh

+0

jest w formacie wyjściowym fotmar lub tabeli? Nie mogłem znaleźć żadnego obejścia w ulu. Zamiast tego zrobiłem to przez iskrę. Uruchom iskr sql, a następnie wyeksportuj ramkę danych jako json. iskra obsługuje różne formaty eksportu w naturze. –

+0

AVRO jest wymaganym formatem pliku wyjściowego. Tak, Spark jest dobrym rozwiązaniem. – Munesh

Odpowiedz

1

Wydaje problem z obejścia (korzystając JsonUDF z named_struct) opisany jest tutaj: 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 
; 

Ponadto można utworzyć tabelę JsonSerDe oparte o zdefiniowane kolumny insert overwrite i używać lokalizację tabeli zamiast katalogu .