导入复杂的JSON数据蜂巢(import complex Json data to hive)

2019-07-20 10:43发布

一个小勺子喂养需要,如何导入复杂的JSON成蜂巢。 在格式JSON文件: {"some-headers":"", "dump":[{"item-id":"item-1"},{"item-id":"item-2"},...]} 。 蜂巢有下给出场dump 。 JSON文件的大小,和现在一样,是不超过200MB,但由于其转储,它很快会抵达金紫荆星章。 任何其他可能的实施办法,将不胜感激。

Answer 1:

您可以通过实现HiveSerDe导入JSON成蜂巢。

此链接作为样本实现。

https://github.com/rcongiu/Hive-JSON-Serde

您也可以参考这些链接

你如何做一个HIVE表了JSON数据?



Answer 2:

发布最终的端到端解决方案。 一步一步的过程转换JSON蜂巢表:

步骤1)如果不是有已经安装Maven

>$ sudo apt-get install maven

步骤2),如果已经不存在安装的git

>sudo git clone https://github.com/rcongiu/Hive-JSON-Serde.git

步骤3)进入$ HOME / HIVE-JSON_Serde文件夹

步骤4)构建SERDE包

>sudo mvn -Pcdh5 clean package

步骤5)SERDE文件将是$ HOME /蜂房JSON-SERDE / JSON-SERDE /目标/ JSON-SERDE-1.3.7-快照罐与- dependencies.jar

步骤6)添加作为SERDE在蜂房依赖性罐子

 hive> ADD JAR $HOME/Hive-JSON-Serde/json-serde/target/json-serde-1.3.7- SNAPSHOT-jar-with-dependencies.jar;

步骤7)创建$ HOME / books.json JSON文件(实施例)

{"value": [{"id": "1","bookname": "A","properties": {"subscription": "1year","unit": "3"}},{"id": "2","bookname":"B","properties":{"subscription": "2years","unit": "5"}}]}

步骤8)创建配置单元TMP1表

 hive>CREATE TABLE tmp1 (
      value ARRAY<struct<id:string,bookname:string,properties:struct<subscription:string,unit:string>>>   
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 
    'mapping.value' = 'value'   
) 
STORED AS TEXTFILE;

步骤9)从所述JSON数据加载到表TMP1

>LOAD DATA LOCAL INPATH '$HOME/books.json' INTO TABLE tmp1;

步骤10)创建一个TMP2表做爆炸操作形式TMP1,这个中间步骤是打破多级JSON结构为多行注意:如果你JSON结构简单,单级,避免此步骤

hive>create table tmp2 as 
 SELECT *
 FROM tmp1
 LATERAL VIEW explode(value) itemTable AS items;

步骤11)创建配置单元表并加载从TMP2表中的值

hive>create table books as 
select value[0].id as id, value[0].bookname as name, value[0].properties.subscription as subscription, value[0].properties.unit as unit from tmp2;

步骤12)下降TMP表

hive>drop table tmp1;
hive>drop table tmp2;

步骤13)测试配置单元表

hive>select * from books;

输出:

ID名称认购单位

1乙1年3

2个B2年5



文章来源: import complex Json data to hive