是否有人在没有Avro架构的情况下完成了Json到Avro的转换。这里的问题是json在名称字段中有特殊字符,因此avr04s失败。为了动态,我需要直接从JSON创建avro文件。如果那是不可能的,我可以用特殊字符创建一个case类或pojo。但是所有名称字段都将具有一种或另一种特殊字符。
答案 0 :(得分:0)
接近一个
使用One column创建简单表。
CREATE TABLE jsonTbl(line String)
将json数据加载到表
中LOAD DATA INPATH '/user/demo/pg54505.txt' INTO TABLE jsonTbl;
在Hive中创建AVRO表
CREATE TABLE as_avro(ID String, ename String, esal Int) STORED AS AVRO;
使用get_json_object()
将数据插入AVRO表INSERT OVERWRITE TABLE as_avro SELECT get_json_object(fieldname, '$.emp.ID'), get_json_object(fieldname, '$.emp.ename'), get_json_object(fieldname, '$.ename.esal') FROM jsonTbl
OR 接近两个
使用JsonSerDe和放置Json文件的位置创建外部表。
CREATE EXTERNAL TABLE jsonTbl(id string, ename string, esal int) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION '/user/demo/';
在Hive中创建AVRO表
CREATE TABLE as_avro(ID String, ename String, esal Int) STORED AS AVRO;
将数据插入AVRO表。
INSERT OVERWRITE TABLE as_avro SELECT ID, ename, esal) FROM jsonTbl