Hive 函数(实例操作版2)

数据脱敏函数

复制代码
-- 演示数据脱敏函数
-- mask_hash:  返回指定字符串的hash编码
select mask_hash('binzi');


-- 拓展
--将查询回的数据,大写字母转换为X,小写字母转换为x,数字转换为n。
select mask("abc123DEF"); -- xxxnnnXXX

--自定义替换的字母: 依次为大写小写数字
select mask("abc123DEF",'大','小','数');
select mask("abc123DEF",'/','.','%');

--mask_first_n(string str[, int n]
--对前n个进行脱敏替换 大写字母转换为X,小写字母转换为x,数字转换为n。
select mask_first_n("abc123DEF",6);

--mask_last_n(string str[, int n])
--对后n个进行脱敏替换 大写字母转换为X,小写字母转换为x,数字转换为n。
select mask_last_n("abc123DEF",6);

--mask_show_first_n(string str[, int n])
--除了前n个字符,其余进行掩码处理
select mask_show_first_n("abc123DEF",6);

--mask_show_last_n(string str[, int n])
select mask_show_last_n("abc123DEF",6);

加密函数

复制代码
--取哈希值函数:hash
select hash("binzi"); -- 93742710

--MD5加密: md5(string/binary)
select md5("binzi"); -- 32位   072853027b387fcf891a610137f8dc1b
select length('072853027b387fcf891a610137f8dc1b');


--SHA-1加密: sha1(string/binary)
select sha1("binzi"); -- 40位 66368c80ca9125f9a8a945aaf1e1ec3f8b21f7f9
select length('66368c80ca9125f9a8a945aaf1e1ec3f8b21f7f9');

--SHA-2家族算法加密:sha2(string/binary, int)  (SHA-224, SHA-256, SHA-384, SHA-512)
select sha2("binzi",224);
select sha2("binzi",512);

--crc32加密:
select crc32("binzi"); -- 3221865747

炸裂函数

把一个容器的多个数据炸裂出单独展示: explode(容器)

炸裂函数配合侧视图使用格式:

select 原表别名.字段名,侧视图名.字段名 from 原表 原表别名 lateral view explode(要炸开的字段) 侧视图名 as 字段名 ;

复制代码
-- 切水果实战练习
-- 已知字符串'苹果-香蕉-西瓜-哈密瓜-火龙果-榴莲'要求切割放到容器中
select '苹果-香蕉-西瓜-哈密瓜-火龙果-榴莲';
select split('苹果-香蕉-西瓜-哈密瓜-火龙果-榴莲', '-');

-- UDTF: 一进多出
select explode(array('binzi', '666', '888'));
select explode(map('a', 1, 'b', 2, 'c', 3));

-- 演示炸裂函数示例(一进多出)
-- 查看指定函数详细扩展信息(有对应示例)
desc function extended explode;

-- 已知array容器中"苹果","香蕉","西瓜","哈密瓜","火龙果","榴莲"要求炸开
select explode(array("苹果", "香蕉", "西瓜", "哈密瓜", "火龙果", "榴莲"));

实例

数据文件👉The_NBA_Championship.txt

复制代码
--建表
create table the_nba_championship(
           team_name string,
           champion_year array<string>
) row format delimited
fields terminated by ','
collection items terminated by '|';

--加载数据文件到表中  先上传到hdfs/source目录
load data  inpath '/source/The_NBA_Championship.txt' into table the_nba_championship;

--验证
select * from the_nba_championship;


-- 只查询冠军年份
select explode(champion_year) as year from the_nba_championship ;

-- 配合侧视图完成需求
with tmp as(
    select  a.team_name,b.year
    from the_nba_championship a
    lateral view explode(champion_year) b as year
    )
select * from tmp;

行列转换

行转列

collect_set(字段名): 把多个数据收集到一起,默认去重

collect_list(字段名): 把多个数据收集到一起,默认不去重

把多个子串用指定分隔符拼接成一个大字符串: concat_ws(分隔符,多个数据...) 注意: 如果拼接数据不是字符串可以使用cast转换

复制代码
--建表
create table row2col2(
                         col1 string,
                         col2 string,
                         col3 int
)row format delimited fields terminated by '\t';

--加载数据到表中(按照图中数据在DataGrip可视化界面添加)
select * from row2col2;


需求1: 把原表数据变成以下格式
a b [1,2,3]
c d [4,5,6]

select
    col1,
    col2,
    collect_list(col3)
from
    row2col2
group by
    col1, col2;


需求2: 把原表数据变成以下格式
a b '1-2-3'
c d '4-5-6'

select
    col1,
    col2,
    concat_ws('-',collect_list(cast(col3 as string)))
from
    row2col2
group by
    col1, col2;
相关推荐
姬激薄1 小时前
HDFS概述
大数据·hadoop·hdfs
依年南台1 小时前
克隆虚拟机组成集群
大数据·hadoop
多多*2 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
yyf9601265 小时前
hiveserver2与beeline进行远程连接hive配置及遇到的问题
数据仓库·hive
yyf9601265 小时前
hive在配置文件中添加了hive.metastore.uris之后进入hive输入命令报错
hive
jiedaodezhuti6 小时前
hive两个表不同数据类型字段关联引发的数据倾斜
数据仓库·hive·hadoop
IvanCodes7 小时前
五、Hive表类型、分区及数据加载
大数据·数据仓库·hive
镜舟科技8 小时前
什么是数据集市(Data Mart)?
数据仓库·olap·数据集市·多维数据模型·在线分析处理·定制化数据
计算机人哪有不疯的8 小时前
Hadoop的组成,HDFS架构,YARN架构概述
大数据·数据库·hadoop·spark
SelectDB技术团队1 天前
顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%
大数据·数据库·数据仓库·信息可视化·数据分析·doris·实时分析