💡hive解析处理Map、Array、Json数据
2022-7-8
| 2022-7-15
0  |  阅读时长 0 分钟
type
status
password
date
slug
summary
category
URL
tags
icon

Map类型

map的结构

创建map的表

插入map数据

查询map中的数据

删除map数据

别搞笑了,hive不支持删除操作。可以使用insert overwrite。同理,也不支持修改

map的操作函数

key键查询

value值查询

键值对查询(键值对个数)

map类型数据的加工

将map列拆分为key、value列

把两个字段变成map:str_to_map

测试数据如下:
pcgid
mobilegid
value
p1
m1
0.6
p1
m2
0.9
p2
m1
1.0
需要的结果是:
对源表进行group by之后对另外两个字段变成map
gid
gids
count(1)
p1
{"m2":"0.9","m1":"0.6"}
2
p2
{"m1":"1.0"}
1

Array操作

Array的结构

创建Array表

插入数据

查询

Array的操作函数

array_contains()

是否包含某个值,Boolean型(true/false,where条件中比较合适)

explode()拆成单条多行记录

Hive中array嵌套map数据分离和处理

创建

插入数据

查询

Json的操作

json_tuple与get_json_object都是hive自带的UDF。json_tuple 相对于 get_json_object 的优势就是一次可以解析多个 Json 字段。有兴趣可以参考如何在 Apache Hive 中解析 Json 数组这篇文章,其中也说了通过自行开发UDF来实现相关的功能。

创建案例

json_tuple提取数据

  • 语法: json_tuple(json_string, k1, k2 ...)
  • 说明:解析json的字符串json_string,可指定多个json数据中的key,返回对应的value。如果输入的json字符串无效,那么返回NULL

get_json_object提取数据

  • 语法:get_json_object(json_string, '$.key')
  • 说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。这个函数每次只能返回一个数据项。

explode、regexp_replace函数

要解析这个json数组,仅用上面介绍的两个函数就解析不出来了,还需用到如下介绍的几个函数:

explode(Array OR Map)

explode()函数接收一个array或者map类型的数据作为输入,然后将array或map里面的元素按照每行的形式输出,即将hive一列中复杂的array或者map结构拆分成多行显示,也被称为列转行函数。
A
B
C
A
10
B
20
C
30

posexplode(Array OR Map)

posexplode相比在explode之上,将一列数据转为多行之后,还会输出数据的下标。
0
A
1
B
2
C
0
A
10
1
B
20
2
C
30

regexp_replace(string A, string B, string C)

将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
  • hive
  • lateral view 用法sql事务性
    Loading...
    目录