Hive系列 (八):Hive中的explode 与 lateral view

本文是Hive系列教程的一部分,主要讲解Hive中的explode和lateral view操作,用于处理非第一范式数据,特别是解析JSON格式数据。通过实例展示了explode如何处理数组和映射数据,以及lateral view的语法和使用,包括数据提取和转换过程。
摘要由CSDN通过智能技术生成

Hive系列文章

Hadoop完全分布式搭建(腾讯云服务器+阿里云服务器)

Hive系列 (一):Hive搭建

Hive系列 (二):Hive基础知识

Hive系列 (三):Hive开窗函数详解

Hive系列 (四):自定义函数UDF UDTF UDAF

Hive系列 (五):Hive数据类型

Hive系列 (六):Hive数据类型转换

Hive系列 (七):Hive常用函数

Hive系列 (八):Hive中的explode 与 lateral view

Hive系列 (九):Hive数据存储

Hive系列 (十):Hive调优

概述

explode 和 lateral view经常放在一起用,它们的出现本身就是在操作不满足第一范式的数据,在大数据技术中,很多类似pv,uv的数据,在业务系统中是存贮在非关系型数据库中,用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身手。

explode用法

select explode(mapcol) as (keyname,valuename) from tablename;
  • explode():函数中的参数传入的是map数据类型的列名。
  • 由于map是kay-value结构的,所以它在转换的时候会转换成两列,一列是kay转换而成的,一列是value转换而成的。
  • keyname:表示key转换成的列名称,用于代表key转换之后的列名。
  • valuename:表示value转换成的列名称,用于代表value转换之后的列名称

注意事项

  1. 不能关联原有的表中的其他字段。
  2. 不能与group by、cluster by、distribute by、sort by联用。
  3. 不能进行UDTF嵌套。
  4. 不允许选择其他表达式

explode操作Array

0: jdbc:hive2://master:10000> select * from myhive.array_test;
OK
  +----------------+--------------------------+
| array_test.id  |     array_test.info      |
+----------------+--------------------------+
| [1,2,3,4]      | ["you","are","a","boy"]  |
| [5,6,7,8]      | ["she","is","a","girl"]  |
+----------------+--------------------------+
2 rows selected (6.983 seconds)
0: jdbc:hive2://master:10000> select explode(info) from myhive.array_test;
OK
+-------+
|  col  |
+-------+
| you   |
| are   |
| a     |
| boy   |
| she   |
| is    |
| a     |
| girl  |
+-------+
8 rows selected (3.432 seconds)

explode操作Map


0: jdbc:hive2://master:10000> select * from myhive.map_test;
OK
+--------------+-------------------+-------------------+
| map_test.id  | map_test.int_map  | map_test.str_map  |
+--------------+-------------------+-------------------+
| 12           | {
  "年龄":18,"性别":1}  | {
  "姓名":"张三"}       |
+--------------+-------------------+-------------------+
1 row selected (3.371 seconds)
0: jdbc:hive2://master:10000> select exp
explain      export       expression   
0: jdbc:hive2://master:10000> select explode(str_map) as (key_name,value_name) from myhive.map_test;
OK
+-----------+-------------+
| key_name  | value_name  |
+-----------+-------------+
| 姓名        | 张三        |
+-----------+-------------+
1 row selected (3.227 seconds)
0: jdbc:hive2://master:10000> 

explode配合解析Json

建表

创建表json_test, 建表脚本如下:

# 文件名crt_book_info_json.sql
create 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值