将复杂的json数据导入配置单元

jmp7cifd  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(396)

需要一点填鸭式输入,如何将复杂的json导入到hive中。json文件格式为: {"some-headers":"", "dump":[{"item-id":"item-1"},{"item-id":"item-2"},...]} . Hive下有田地 dump . json文件的大小和现在一样,不超过200mb,但由于它是一个转储文件,很快就会达到gbs。任何其他可能的方法都值得赞赏。

nnt7mjpx

nnt7mjpx1#

发布端到端解决方案。将json转换为配置单元表的分步过程:
步骤1)如果还没有安装maven,请安装它 >$ sudo apt-get install maven 步骤2)如果还没有安装git,请安装git >sudo git clone https://github.com/rcongiu/Hive-JSON-Serde.git 步骤3)进入$home/hive-json\u serde文件夹
步骤4)构建serde包 >sudo mvn -Pcdh5 clean package 步骤5)serde文件将位于$home/hive json serde/json serde/target/json-serde-1.3.7-snapshot-jar-with-dependencies.jar中
步骤6)在配置单元中添加serde作为依赖项jar

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 b 1第3年
2 b 2年5

5ssjco0h

5ssjco0h2#

您可以通过实现hiveserde将json导入到配置单元中。
此链接用作示例实现。
https://github.com/rcongiu/hive-json-serde
你也可以参考这些链接
如何用json数据生成配置单元表?

相关问题