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