| Invalid Date
字数 0阅读时长 1 分钟
type
Post
status
Published
password
date
Jul 8, 2022
slug
summary
map、Array、json的常用方法与处理方式
category
数据库
tags
hive
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函数。
Loading...
目录