Hive字符串转为复杂格式数据

80 篇文章 2 订阅
1、字符串转为map
str_to_map(text[, delimiter1, delimiter2])
使用两个分隔符将文本拆分为键值对。 Delimiter1将文本分成K-V对,Delimiter2分割每个K-V对。对于delimiter1默认分隔符是',',对于delimiter2默认分隔符是'='。
示例:
select str_to_map('aaa:11&bbb:22', '&', ':');
select str_to_map('aaa:11&bbb:22', '&', ':')['aaa'];

select str_to_map('device_ds:2&uid_cnt:1','&',',')  --键值分割不到,值会出现Null
综合使用示范:
select a1.appkey,a1.appsource,index_key,index_value
from tab_sum a1 
lateral view explode(str_to_map(concat('device_ds:',a1.device_ds_cnt,'&','uid_cnt:',a1.uid_cnt),'&',':')) mid_list_tab as index_key,index_value;
2、字符串转为array
分割字符串函数: split
语法:  split(string str, stringpat)
返回值:  array
说明:
按照pat字符串分割str,会返回分割后的字符串数组
举例:
select split('aaa:11:bbb:22',':');
["aaa","11","bbb","22"]
select split('aaa:11:bbb:22',':')[0];
aaa
3、字符字段去重汇总转成array
collect_set函数:该函数的作用是将某字段的值进行去重汇总,产生Array类型字段。
drop table if exists xxxxx_tabletest;
CREATE TABLE xxxxx_tabletest(
  id string, 
  name string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'=',', 
  'line.delim'='\n', 
  'serialization.format'=',');
insert into xxxxx_tabletest(id,name)
values
('1','A'),
('1','C'),
('1','B'),
('2','B'),
('2','C'),
('2','D'),
('3','B'),
('3','C'),
('3','D');
select id,collect_set(name) from xxxxx_tabletest group by id;
OK
1       ["A","C","B"]
2       ["B","C","D"]
3       ["B","C","D"]
Time taken: 36.966 seconds, Fetched: 3 row(s)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Hive 中使用 substring 截取字符串的语法如下: substring(string, start, length) string:需要截取的字符串 start:开始截取的位置,从0开始 length:截取的长度 示例:substring('hello world', 0, 5),将返回"hello" Hive 中还支持其他字符串函数,如 concat、length、trim、upper、lower 等,可以根据需要使用。 ### 回答2: Hive是一种基于Hadoop的数据仓库解决方案,它支持结构化数据和半结构化数据的处理,在Hive中,我们可以使用substring函数截取一个字符串的一段部分。 使用substring函数的语法如下: substring(string str, int startPos, int length) 其中,str表示要截取的字符串,startPos表示截取的起始位置,length表示截取的长度。注意,substr从0开始索引。 例如,如果我们有一个字符串'hello world',我们想截取'world'这个单词,可以使用如下语句: SELECT substring('hello world', 6, 5); 这个查询结果是'world'。 Hive中的substring函数还有一种用法,可以只输入单个参数: substring(string str, int startPos) 这个用法表示从str的startPos位置开始,截取到字符串的末尾。例如,如果我们有一个字符串'hello world',我们想截取'world'这个单词,可以使用如下语句: SELECT substring('hello world', 6); 这个查询结果同样是'world'。 总之,Hive中的substring函数非常方便,可以用于截取字符串的指定部分。同时,我们还可以结合其他字符串函数来处理字符串,例如concat、split等,实现更加复杂字符串处理功能。 ### 回答3: Hive是一个基于Hadoop的数据仓库工具,支持结构化数据的处理和查询。而substring则是Hive中的一个函数,用于截取字符串。 substring函数的使用方法如下: substring(string str, int startIndex, int length) 其中,str表示要截取的原始字符串,startIndex表示截取的起始位置(从0开始计算),length表示要截取的长度。 例如,有一个名为“employees”的表,其中有一列“name”,我们想要截取“name”中前三个字符,可以使用以下语句实现: SELECT substring(name,0,3) FROM employees; 这将返回“name”列中前三个字符组成的字符串。 除此之外,substring函数还可以用于在字符串中匹配子字符串,并返回子字符串在原始字符串中的位置。 例如,如果我们想要查找“name”列中包含“john”的记录,并返回“john”在“name”中的起始位置: SELECT substring(name,locate('john',name),4) as name FROM employees WHERE name LIKE '%john%'; 这将返回“name”列中包含“john”子字符串的记录,并返回“john”在原始字符串中的起始位置(默认长度为4)。 总之,Hive的substring函数是一个非常实用的字符串处理工具,可用于截取、匹配和操作字符串。在查询和处理结构化数据时,经常用到substring函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BabyFish13

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值