【发布时间】:2017-05-03 06:15:22
【问题描述】:
是否有人在没有 Avro 架构的情况下完成了 Json 到 Avro 的转换。这里的问题是 json 在名称字段中有特殊字符,因此 avr04s 失败。为了动态性,我需要直接从 JSON 创建 avro 文件。如果这不可能,我可以创建一个带有特殊字符的案例类或 pojo。但是所有名称字段都将具有一种或另一种特殊字符。
【问题讨论】:
是否有人在没有 Avro 架构的情况下完成了 Json 到 Avro 的转换。这里的问题是 json 在名称字段中有特殊字符,因此 avr04s 失败。为了动态性,我需要直接从 JSON 创建 avro 文件。如果这不可能,我可以创建一个带有特殊字符的案例类或 pojo。但是所有名称字段都将具有一种或另一种特殊字符。
【问题讨论】:
接近一号
创建一列的简单表格。
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
或 方法二
使用 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
【讨论】: