摸鱼大数据——Hive函数4-6

发布于:2024-06-02 ⋅ 阅读:(101) ⋅ 点赞:(0)

4、类型转换函数

类型转换: cast(字段名称 as 想要的数据类型)

示例:

-- 数据类型转换
-- string->int
select cast("123" as int),"123";
​
-- string->float/double
select cast("123.555" as float),"123.555";
​
-- int->float/double
select cast(2 as float);
​
-- float/double->int:只保留整数位
select cast(2.999 as int);
​
-- 异常的
select cast("hello" as int); -- 返回null值
select cast("hello" as double);

5、数据脱敏函数

mask_hash: 返回数据的Hash
mask: 默认将大写字母变成X,小写字母变成x,数值变成n。自定义替换的内容。第一个是大写字母,第二个是小写字母,第三个是数值
​
mask_first_n: 对指定的前n个内容进行加密
mask_last_n: 对指定的后n个内容进行加密
mask_show_first_n: 除了指定的前n个内容不进行加密,其他内容全部加密
mask_show_last_n: 除了指定的后n个内容不进行加密,其他内容全部加密

示例:

-- mask_hash:返回数据的Hash
select mask_hash("ABC123def");
​
-- mask:将大写字母变成X,小写字母变成x,数值变成n
select mask("ABC123def"); -- XXXnnnxxx
-- 自定义替换的内容。第一个是大写字母,第二个是小写字母,第三个是数值
select mask("ABC123def","#","*","$"); -- ###$$$***
select mask(cast(13545678912 as string),"#","$","*"); -- ***********
​
-- mask_first_n:对指定的前n个内容进行加密
select mask_first_n("ABC123def",4);
select mask_first_n("ABC123def",4,"#","*","$");
​
describe function extended mask_first_n;
​
-- mask_last_n:对指定的后n个内容进行加密
select mask_last_n("ABC123def",4);
select mask_last_n("ABC123def",4,"#","*","$");
​
-- mask_show_first_n:除了指定的前n个内容不进行加密,其他内容全部加密
select mask_show_first_n("ABC123def",4);
select mask_show_first_n("ABC123def",4,"#","*","$");
​
-- mask_show_last_n:除了指定的后n个内容不进行加密,其他内容全部加密
select mask_show_last_n("ABC123def",4);
select mask_show_last_n("ABC123def",4,"#","*","$");

6、字符串函数

字符串常见的函数:
concat: 将字符串拼接到一起,并且中间没有任何的拼接符号
​
concat_ws: 将字符串以指定的拼接符号拼接到一起
注意: concat_ws只支持对string或者array<string>进行拼接,不支持对数值类型进行拼接
​
length: 获取字符串的长度
注意: length不支持对数值类型获取长度
​
lower: 将字符串全部变成小写
upper: 将字符串全部变成大写
​
trim: 将字符串前后两端的空白字符去掉
注意: 去除前后的空白内容(例如:空格、制表符)。中间的去除不了
​
拓展字符串函数
substr: 截取字符串
replace: 替换字符串
regexp_replace: 正则方式替换字符串
parse_url: 解析网站URL
get_json_object: 解析json字符串

示例:

-- concat:拼接任意类型的内容
select concat("hello","world") as new_str; -- helloworld
select concat("hello",222) as new_str;
select concat(1.99,222) as new_str;
​
-- concat_ws(指定的符号,字段1,字段2...):以指定的符号对内容进行拼接
select concat_ws("_","hello","world","spark","hive") as new_str; -- hello_world_spark_hive
select concat_ws("_","hello",222) as new_str;
select concat_ws("_",1.99,222) as new_str;
​
-- length:获取字符串长度
select length("hello");
-- 只能传递一个参数
select length("hello","world");
select length(123);
​
-- lower:全部转小写
select lower("HELLO");
-- 只能传递一个参数
select lower("hello","world");
-- upper:全部转大写
select upper("hello");
​
-- trim:去除前后的空白内容(例如:空格、制表符)。中间的去除不了
select trim("   hello ");
select concat("111","   hel lo ","2222"),concat("111",trim("   hel lo "),"2222");
​
/*
    substr(字段名称,截取开始的索引,[截取的长度]):字符串截取
        截取开始的索引:有正数索引(从1开始)和负数索引(从-1开始)
        截取的长度:可以不指定,默认截取到最后
 */
select substr("abcdefg",2); -- bcdefg
select substr("abcdefg",2,1); -- b
select substr("abcdefg",-2);
select substr("abcdefg",-5,2);
​
select substr("2024-12-12 10:10:10",1,4);
-- 获取当前日期
select current_date();
select substr(`current_date`(),1,4);
​
-- replace(字段名称,被替换的内容,替换的内容):替换字符串
select replace("你TMD哦","TMD","***");
describe function extended replace;
​
-- regexp_replace(字段名称,正则表达式,替换的内容):通过正则表达式找到目标,然后替换字符串
select regexp_replace("你TMD哦","TMD","***");
select regexp_replace("67869黑马234你好5687","\\d+","***");
describe function extended regexp_replace;
​
-- parse_url(url,解析的内容):解析url地址
-- 注意:解析的内容中必须严格按照函数要求写对应的内容,不能随便写
select parse_url("https://www.baidu.com/s?ie=UTF-8&wd=asd","host"); -- 错误写法
select parse_url("https://www.baidu.com/s?ie=UTF-8&wd=asd","HOST"); -- 正确写法。www.baidu.com
select parse_url("https://www.baidu.com/s?ie=UTF-8&wd=asd","PATH"); -- /s,是uri统一资源定位符
select parse_url("https://www.baidu.com/s?ie=UTF-8&wd=asd","QUERY"); -- ie=UTF-8&wd=asd
select parse_url("https://www.baidu.com/s?ie=UTF-8&wd=asd","QUERY","wd"); -- 获取具体的查询内容
describe function extended parse_url; -- Parts: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO
​
-- get_json_object
/*
 {
    "name":"zhangshan",
    "age":18
 }
 */
select get_json_object('{"name":"zhangshan","age":18}',"$.name");
select get_json_object('{"name":"zhangshan","age":18}',"$.age");
​
-- 嵌套json的解析
select get_json_object('{"name":"zhangshan","age":18,"addr":{"province":"广东省","city":"广州市"}}',"$.addr.province");

concat_ws可能出现的错误:

原因:concat_ws只支持对string或者array<string>进行拼接,不支持对数值类型进行拼接

length可能遇到的错误:

原因: length不支持对数值类型获取长度

substr中正数索引和负数索引的编号:


网站公告

今日签到

点亮在社区的每一天
去签到