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;
相关推荐
Htr_1 天前
Outcome 核心概念与实战应用指南
大数据·hadoop·apache
SelectDB技术团队1 天前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据仓库·apache
小马过河R2 天前
数据仓库入门:是什么、怎么做、和数据库有什么区别?
大数据·数据库·数据仓库·架构·驾驭工程·fde
BYSJMG2 天前
计算机毕业设计选题推荐|【基于大数据的城市噪音数据可视化分析】Spark+K-Means+FP-Growth实战
大数据·hadoop·信息可视化·spark·课程设计
慧一居士4 天前
Apache StreamPark 功能和使用场景介绍、使用步骤详细示例
数据仓库
牛奶咖啡134 天前
大数据Hadoop运维应用实践——Hadoop平台常见问题与故障汇总、系统调优、网络规划与硬件存储选型
大数据·hadoop·hadoop集群操作系统调优·hadoop集群运维问题汇总·hadoop集群硬件规划·大数据平台网络规划·大数据平台硬件存储选型
雨晨源码(同名B站)4 天前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
赤土 炙焱5 天前
hiveserver2启动失败,磁盘满了
hive·hadoop
慧一居士5 天前
Hologres 功能及使用场景介绍,实践详细步骤示例
数据仓库
哥本哈士奇5 天前
dbt+SQLServer构建数据仓库(10):macro 以及 data vault的应用实例
大数据·数据仓库·sqlserver