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函数。