当前位置: 首页 > news >正文

摸鱼大数据——Hive函数7-9

7、日期时间函数

Hive函数链接:LanguageManual UDF - Apache Hive - Apache Software Foundation

SimpleDateFormat (Java Platform SE 8 )

current_timestamp: 获取时间原点到现在的秒/毫秒,底层自动转换方便查看的日期格式        常用 
to_date: 字符串格式时间戳转日期(年月日)
current_date: 获取当前日期(年月日)        常用
​
year: 获取指定日期时间中的年        常用 
month:获取指定日期时间中的月        常用 
day:获取指定日期时间中的日          常用 
hour:获取指定日期时间中的时
minute:获取指定日期时间中的分
second:获取指定日期时间中的秒
​
dayofmonth: 获取指定日期时间中的月中第几天
dayofweek:获取指定日期时间中的周中第几天
quarter:获取指定日期时间中的所属季度
weekofyear:获取指定日期时间中的年中第几周
​
datediff: 获取两个指定时间的差值        常用 
date_add: 在指定日期时间上加几天        常用 
date_sub: 在指定日期时间上减几天
​
unix_timestamp: 获取unix时间戳(时间原点到现在的秒/毫秒)    
注意: 可以使用yyyyMMdd HH:mm:ss进行格式化转换
​
from_unixtime:  把unix时间戳转换为日期格式的时间          
注意: 如果传入的参数是0,获取的是时间原点1970-01-01 00:00:00

示例:

select`current_date`(), -- 获取当前的日期`current_timestamp`(); -- 获取当前的日期时间
​
-- to_date:将字符串内容转成日期对象
select to_date("2024-04-25");
select to_date("2024-04-25 16:39:30");
​
-- 年月日时分秒分别获取
selectyear("2024-04-25 16:39:30") as my_year,month("2024-04-25 16:39:30") as my_month,day("2024-04-25 16:39:30") as my_day,dayofweek("2024-04-25 16:39:30") as dw1, -- 返回值是5。因为周日是1,周日 周一 周二 ... 周六dayofweek("2024-04-28 16:39:30") as dw2, -- 返回值是1。因为周日是1,周日 周一 周二 ... 周六hour("2024-04-25 16:39:30") as my_hour,minute("2024-04-25 16:39:30") as my_minute,second("2024-04-25 16:39:30") as my_second;
​
​
-- 日期时间的加减
/*datediff(大的日期,小的日期):计算两个日期的天差值*/
selectdatediff("2024-04-24 16:39:30","2024-04-25 16:39:30") as `差值1`, -- 去公司里面不要用中文datediff("2024-04-24 16:39:10","2024-04-25 16:39:30") as `差值2`, -- 去公司里面不要用中文datediff("2024-03-25 16:39:10","2024-04-25 16:39:30") as `差值3`, -- 去公司里面不要用中文datediff("2023-03-25 16:39:10","2024-04-25 16:39:30") as `差值4`, -- 去公司里面不要用中文date_add("2024-04-25 16:39:30",1) as add1,date_add("2024-04-25 16:39:30",-1) as add2,date_sub("2024-04-25 16:39:30",1) as sub1,date_sub("2024-04-25 16:39:30",-1) as sub2;
​
-- unix_timestamp:获取当前的时间戳
select unix_timestamp(),`current_timestamp`();
​
-- from_unixtime:将时间戳转成日期对象
select from_unixtime(1714035105),from_utc_timestamp(1714035105,"PRC");
​
​
​
-- 需求:将这个时间日期4/25/2024 17:08:20变成中国喜欢用的。2024-04-25 17:08:20
-- 旧的日期时间 -> 时间戳 -> 新格式的日期时间
describe function extended unix_timestamp;
describe function extended from_unixtime;
selectunix_timestamp("4/25/2024 17:08:20","M/dd/yyyy HH:mm:ss"),-- 旧的日期时间 -> 时间戳from_unixtime(unix_timestamp("4/25/2024 17:08:20","M/dd/yyyy HH:mm:ss"),"yyyy-MM-dd HH:mm:ss") -- 时间戳 -> 新格式的日期时间

原因: 建表的时候,字段名称或者表名称最好不要和hive中的关键字(系统内部自己用的,例如:create、count、sum、max等)重名
解决办法:1- 推荐取个不一样的名词2- 加上反引号``
use day08;
create table tb_test_1(`create` int,`table` int,count int
)row format delimited fields terminated by ',';
​
select count(count) from tb_test_1;

8、条件函数

if(参数1,参数2,参数3): if(判断条件,条件成立(true)的时候执行,条件不成立(false)的时候执行)。if可以嵌套
case...when.then...end: 分条件判断
使用推荐: 如果判断比较简单推荐使用if,如果判断条件很多推荐使用case when
​
isnull(数据) : 判断是否为空。如果为空(null值)返回true;否则返回false。
注意: null才是空值。空字符串不是空值
​
isnotnull(数据): 判断是否不为空。如果为空(null值)返回false;否则返回true。
​
nvl(数据,参数2): 返回里面第一个不为空的值
​
coalesce(参数1,参数2...): 返回里面第一个不为空的值

示例:

-- if(判断条件,条件成立(true)的时候执行,条件不成立(false)的时候执行)。if可以嵌套
selectif(20>18,"可以去上网","回家写作业"),if(10>18,"可以去上网","回家写作业"),if(10>18,null,"回家写作业"),if(10>18,"可以去上网",null),if(10>18,"可以去上网",if(10<15,"写小学作业","写初中作业")); -- if嵌套
​
-- isnull和isnotnull:返回true和false
select isnull(null),isnull("hello"),isnull(123),isnotnull("hello"),isnotnull(null);
​
-- nvl(字段名,默认值)
select nvl("hello",123),nvl(null,"world"),nvl(19.99,123);
​
-- coalesce(字段1,字段2,....):返回参数列表中第一个不为空null的值
selectcoalesce("hello","world",123,9.99),coalesce(null,"world",123,9.99),coalesce(null,null,123,9.99),coalesce(null,null,null,9.99),coalesce(null,"world",null,9.99);
​
-- case when
select1 as today,casewhen 4==1 then "周一"when 4==2 then "周二"when 4==3 then "周三"else "休息"end,
​case 4when 1 then "周一"when 2 then "周二"when 3 then "周三"else "休息"end;

9、其他函数

-- hash:使用场景,用来对hive数据进行完整性校验。
select hash("world"); -- 113318802
​
-- md5
select md5("world"); -- 7d793037a0760186574b0282f2f435e7
select md5(concat_ws("_",cast(1 as string),"zhangshan",cast(18 as string),cast(50000 as string),"广州市"));
​
select current_user(),current_database(),version();
​
select sha2("allen",224);
select sha2("allen",512);
http://www.lryc.cn/news/359822.html

相关文章:

  • python连接数据库
  • 能不能接受这些坑?买电车前一定要看
  • k8s中pod如何排错?
  • 【手撕面试题】Vue(高频知识点二)
  • 四、.Net8对接Ollama实现文字翻译(.Net8+SemanticKernel+Ollama)本地运行自己的大模型
  • 初始C++
  • Chapter 5 Current Mirrors and Biasing Techniques
  • Avalonia Image控件上通过鼠标拖动画出矩形框
  • Wireshark Lua插件入门
  • XXE漏洞简介
  • 小白跟做江科大32单片机之蜂鸣器
  • IsoBench:多模态基础模型性能的基准测试与优化
  • MyEclipse使用教程
  • TiDB学习9:Ti Cloud简介
  • JavaScript 创建新节点的方法
  • 在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?
  • 进程间通信(27000字超详解)
  • 一、大模型推理
  • .NET IoC 容器(三)Autofac
  • Day44 动态规划part04
  • html期末复习速览
  • CTFHUB-信息泄露-目录遍历和PHPINFO
  • 面向Java程序员的Go工程开发入门流程
  • vue3开发高德地图
  • 通过DLL方式链接glfw3.dll
  • Python自然语言处理(NLP)库之NLTK使用详解
  • sqoop操作
  • 【Qt秘籍】[002]-开始你的Qt之旅-下载
  • 【自动驾驶】点与向量从ego系转odometry系
  • jsmug:一个针对JSON Smuggling技术的测试PoC环境