hive-关系运算符-字符串 *** 作-日期函数-数学函数-集合函数-条件函数-脱敏

hive-关系运算符-字符串 *** 作-日期函数-数学函数-集合函数-条件函数-脱敏,第1张

hive-关系运算符-字符串 *** 作-日期函数-数学函数-集合函数-条件函数-脱敏 函数方法
关系运算符

和where配合使用完成条件判断

查看函数方法

show functions ;
desc function extended isnull;

关系运算符的方法

-- 空值判断
select '字段名' is null ;
-- 模糊查询,以it开头的
select 'itcast' like 'it%';
-- 正则查询  \w,查看首位是不是字母,数字就用\d
select 'iicast' rlike '\w\w';
select 'iicast' rlike 'ii.';

-- 算数运算符
-- 加减乘除
select 1+1;
select 1/2;
select 2 * 2;

-- 取整取余
select 3 div 2;
select 3 % 2;

-- 位运算
-- 0 0000 / 1 0001 / 2 0010 / 3 0011 / 4 0100 / 5 0101
-- select 4 & 5; 相当于相乘
select 4 & 5;

-- 逻辑运算符 与或非
select 1 > 1 and 1=1;
select 1 > 1 or 1=1;
select  !1 > 1;

-- 范围内判断
select 1 in (2,3);
select 1 not in (2,3);

字符串 *** 作

-- 字符串长度函数
select length('asdf');

-- 字符串反转
select reverse('dfsf');

-- 字符串连接
select concat('dfs', 'dfs');
select concat_ws('-', 'dsf', 'dfs');

-- 字符串截取
select substr('sdfsdgd', 2, 4);

-- 字符串转大写函数
select upper('fdg');
select lower('FDGD');

-- 去除空格
select trim('  sdfsfd ');
select ltrim('  sfdf  ');
select rtrim(' dfsf   ');

-- 正则表达式替换函数
select regexp_replace('dfs334', '(\w)d', 'aaa');

-- URL解析网址
select parse_url('http://www.baidu.com', 'HOST');

-- 分割字符串函数
select split('ssdf,gfdd,dfgd',',');

时间日期函数

-- 获取当前日期
select `current_date`();

-- 获取当前时间戳
select `current_timestamp`();

-- 获取当前UNIX时间戳函数
select unix_timestamp();

-- UNIX时间戳转日期函数
select from_unixtime(3243534535);

-- -- 日期转UNIX时间戳函数
select unix_timestamp('2021-10-10 10:10:10');

-- 抽取日期函数
select to_date('2021-10-10 10:10:10');

-- 日期转年,转月,函数
select year('2021-10-10 10:10:10');

-- 日期比较函数
select datediff('2021-10-10 10:10:10','2021-10-12 10:10:10');

-- 日期增加函数
select date_add('2021-10-10 10:10:10',5);
select date_sub('2021-10-10 10:10:10',5);

数学函数

-- 取整函数
select round(3.34);

-- 指定精度
select round(2.435,1);

-- 向下取整
select `floor`(-1.1);

-- 向上取整
select ceil(1.1);

-- 进制转换函数
select conv();

-- 取随机数函数
select rand(2);

-- 取决对值函数
select abs(-334);

集合函数

-- 集合元素个数
select size(`array`('a', 'r'));

-- 取map集合key函数
select map_keys(`map`('name','python','age',19));

-- 取map集合values函数
select map_values(`map`('name','python','age',19));

-- 判断数组是否包含指定元素
select array_contains(`array`(1,2,3),4);
类似于select 1 in (1,2,3);

-- 数组排序函数
select sort_array(`array`(1,5,3,2));
select sort_array(`array`('g','a','f','c'));

条件函数

-- if条件判断
select `if`(1>1, 'true', 'false');

-- 空值判断
select isnull(null);
select isnotnull(null);

-- 空值转换函数(如果是空返回aaa)
select nvl(null, 'aaa');

-- 查找非空的函数
select coalesce(null, null , 3);

-- 条件转换函数 case when
select case when 1=1 then 'ok' end ;
select count(case when 1=1 then 'ok' end);


类型转换

select cast('12' as int);

数据脱敏

-- 脱敏
select mask('dfs21342SDF');
select mask('dfs21342SDF', '*','%','#');

-- 对前n个字符进行脱敏替换
select mask_first_n('asd123',3);
-- 对后n个字符进行脱敏替换
select mask_last_n('itcastpython',3);

-- 除了前n个字符,其余的进行掩码处理
select mask_show_first_n('asdzxc',2);
select mask_show_last_n('qwertyu',2);

-- 返回字符串的hash编码
select hash('sdf');
select mask_hash('dfsgf');

-- SHA-1 加密
select sha('dfs');
select sha1('dgf');
select sha2('sdf', 2);

反射函数

-- 反射函数
select reflect("java.lang.Math","max",11,22);

自定义函数

– UDF:普通函数 输入一行输出一行
– UDAF:聚合函数 输入多行输出一行
– UDTF: 输入一行输出多行

HIVE函数进阶

使用explode对列进行拆分,用侧视图实现拼接

-- explode(UDTF)
create table the_nba_championship(
    team_name string,
    champion_year array
) row format delimited
fields terminated by ','
collection items terminated by '|';

select * from the_nba_championship;

select explode(champion_year) from the_nba_championship;


-- 侧视图实现
select a.team_name, b.year
from the_nba_championship as a lateral view explode(champion_year) b as year;

进行列转行

-- 列转行
create table row2col2(
   col1 string,
   col2 string,
   col3 int
)row format delimited fields terminated by 't';

select * from row2col2;

-- 将col3列进行合并,进行行展示
select col1, col2, concat_ws(',', collect_list(cast(col3 as string)))
from row2col2
group by col1, col2;

把行转化为列

--把行转化为列
create table col2row2(
   col1 string,
   col2 string,
   col3 string
)row format delimited fields terminated by 't';

select * from col2row2;

-- 用侧视图进行拆分
select
  col1,
  col2,
  e.col3 as col3
from
  col2row2 as c
    lateral view
  explode(split(c.col3, ',')) e as col3;
  

json格式数据处理

-- json数据处理
create table tb_json_test1 (
  json string
);

select * from tb_json_test1;
-- get_json_object获取单个子段的json数据
select
       --获取设备名称
       get_json_object(json,"$.device") as device,
       --获取设备类型
         get_json_object(json,"$.deviceType") as deviceType,
       --获取设备信号强度
       get_json_object(json,"$.signal") as signal,
       --获取时间
       get_json_object(json,"$.time") as stime
from tb_json_test1;


-- json_tuple多个字段同时取值json数据
select
       --解析所有字段
       json_tuple(json,"device","deviceType","signal","time") as (device,deviceType,signal,stime)
from tb_json_test1;

json数据的自动处理

-- 自动指定hive自带的json处理方法

create table tb_json_test2 (
   device string,
   deviceType string,
   signal double,
   `time` string
 )
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;

select * from tb_json_test2;

-- 拓展xml数据的处理
desc function extended xpath;

窗口函数

##############

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4666815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存