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中正数索引和负数索引的编号: