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];
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;
1 ["A","C","B"]
2 ["B","C","D"]
3 ["B","C","D"]
Time taken: 36.966 seconds, Fetched: 3 row(s)
1、字符串转为mapstr_to_map(text[, delimiter1, delimiter2])使用两个分隔符将文本拆分为键值对。 Delimiter1将文本分成K-V对,Delimiter2分割每个K-V对。对于delimiter1默认分隔符是',',对于delimiter2默认分隔符是'='。示例:select str_to_map('aaa:11&bbb:22', '&', ':')
with releases as (select '["us","ca","fr"]' as country)
select split(regexp_extract(country,'^\\["(.*)\\"]$',1),'","')
from releases;
["us","ca","fr"]
--------
with releases as (select '["us:[abc]","ca:[abc]","fr:[abc]"]' as country)
select split.
利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括:
01_自动批量加载数据到hive
02_Hive表批量加载数据的脚本实现(一)
03_Hive表批量加载数据的脚本实现(二)
04_HIve中的case when、cast及unix_timestamp的使用
05_复杂日志分析-需求分析
06_复杂日志分析-需求字段讲解及过滤
07_复杂日志分析-字段提取及临时表的创建
08_复杂日志分析-指标结果的分析实现
09_Hive中数据文件的存储格式介绍及对比
10_常见的压缩格式及MapReduce的压缩介绍
11_Hadoop中编译配置Snappy压缩
12_Hadoop及Hive配置支持snappy压缩
13_Hive中的常见调优
14_Hive中的数据倾斜及解决方案-三种join方式
15_Hive中的数据倾斜及解决方案-group by
16_Hive中使用正则加载数据
17_Hive中使用Python脚本进行预处理
工作中,大多数时候会需要把json数组中的数据解析出来,现在会经常和后端打交道,后端同学就希望把正常的行列数据用json的形式给他们,他们使用起来方便,我看有的文章会写用udtf函数实现,不过本着能用内置函数绝不用自定义函数的原则(主要是我不会写),用内置函数实现也不是很难。
原数据形式:
希望转换成一个标准的json数组,
下装款型: ...
字符串转为map
str_to_map(text[, delimiter1, delimiter2])
使用两个分隔符将文本拆分为键值对。 Delimiter1将文本分成K-V对,Delimiter2分割每个K-V对。对于delimiter1默认分隔符是',',对于delimiter2默认分隔符是'='。
select str_to_map('aaa:11&bbb:22', '&...
SELECT CAST(‘00321’ AS BIGINT) FROM table;
As a BIGINT it will show on the screen and in delimited text files as 321.
参考:Hive – Converting a string to bigint
补充知识:hive中bigint和varchar字段做关联,关联数据错误的解决方法
把bigint和varchar都隐式转换成String类型的就可以关联出正确的结果了
cast(t1.PARTY_NUM as str
1.将Mysql中的数据迁移到Hdfs文件系统中,然后通过Hive加载HDFS文件系统中的数据值
2.将Hive中的数据迁移到指定Mysql数据库中
1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者转换时需要注意,再数据迁移json模板中,"nullFormat": "\\N", 该配置信息就是解决了数据迁移是存在的Null值。
2.如果hive中没有数值DataX迁移时会出现异常
执行语句:python /opt/module/datax/bin/datax.py /opt/module/datax/job/xxx.json
collect_list(id) id_array,
concat_ws('',collect_list(id)) id_string, --array转string
origin_id
from(
select
concat('{',id,'}') id,
origin_id --付款通知书id
from ods.ods_awa_finance_income
where
hive提供了复合数据类型:
Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a
Maps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取
Arrays:array中的
在Hive中将字符串类型转换为JSON可以使用Hive内置的一些函数。以下是一个示例:
假设你有一个包含JSON字符串的Hive表,名为`json_str_table`,其中有一个名为`json_str_col`的字符串类型列,你可以使用`get_json_object()`函数将字符串转换为JSON格式:
SELECT get_json_object(json_str_col, '$') AS json_obj_col
FROM json_str_table;
其中,`get_json_object()`函数的第一个参数是包含JSON字符串的列名,第二个参数是JSON字符串中要提取的属性路径。在这个示例中,我们将`' $ '`传递为第二个参数,以提取整个JSON对象。你可以根据需要更改第二个参数。
如果你的JSON字符串中包含数组,你可以使用`json_tuple()`函数将其转换为元组(tuple),如下所示:
SELECT json_tuple(json_str_col, 'key1', 'key2', 'key3')
FROM json_str_table;
其中,`json_tuple()`函数的第一个参数是包含JSON字符串的列名,后面的参数是要提取的属性名称。这将返回一个元组,其中包含指定的属性值。
需要注意的是,Hive中的JSON函数不支持复杂的JSON数据操作,如果你需要更复杂的JSON处理,建议使用其他工具或编程语言来完成。