Hive时间日期函数一文详解+代码实例
目錄
前言
一、HiveSQL運行過程
二、Hive時間函數
1.獲取當前時間
1.current_date()
2. current_timestamp()
3. unix_timestamp()
2.獲取指定時間維度
1. year()
2.quarter()
3.month()
4.day()
5.hour()
6.minute()
7.second
8.weekofyear()
9. dayofweek()
?10.last_day()
?11.next_day()
12.trunc()
?3.時間格式轉換
?1.to_date()
2. from_unixtime()
3.date_format
?4.unix_timestamp
5. from_utc_timestamp/to_utc_timestamp
6. to_unix_timestamp
?4.時間運算
?1.datediff()
?2.date_sub()
?3.date_add()
?4.months_between()
點關注,防走丟,如有紕漏之處,請留言指教,非常感謝
前言
Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,并提供類SQL查詢功能。Hive中的表示純邏輯表,只有表的定義等,即表的元數據(存儲于MySQL中)。本質就是Hadoop的目錄/文件,這種設計方式實現了元數據與數據存儲分離。Hive本身不存儲數據,它完全依賴HDFS和MapReduce。
時間在數據庫中經常作為時間索引,在數據入庫和出庫以及更新的時候都需要變化。在一些指標計算或者是提取某段時間的數據時,都會根據數據庫中的時間索引數據進行操作。因此很大一部分我們操作數據都得先從時間數據下手,但是想要真正提取到我們想要的時間作為索引,還需要我們掌握許多功能函數方便我們操作,這是一個比較復雜的運用過程。因此特地寫下這篇文章,記錄一些十分好用常用的處理Hive數據庫SQL時間數據的函數,以及實例運用這些函數完成一些復雜查詢任務。希望能夠幫助到正在看此博文的各位,如果還有什么問題解決不了盡請在評論區提出,博主會一一作答。
一、HiveSQL運行過程
本質上HiveSQL是將sql語句轉換為MapReduce程序:
這里不展開細化,直接僅需要知道Hive的SQL是和傳統MYSQL和SQL server的SQL語法是不同的就夠了,他們之間的語法也是存在很多差異。
二、Hive時間函數
1.獲取當前時間
共有以下函數可以獲取當前時間:
| 函數 | 說明 | 返回 |
| current_date() | 獲取當前格式化日期 | 2022-08-08 |
| current_timestamp() | 獲取當前格式化日期 | 2022-08-08 11:03:34.946 |
| unix_timestamp() | 獲取當前unix時間戳 | 1659927898 |
1.current_date()
select current_date();?
2. current_timestamp()
select current_timestamp();?
3. unix_timestamp()
select unix_timestamp();?
2.獲取指定時間維度
共有以下函數可以獲取指定時間維度:
| 函數 | 說明 | 返回結果 |
| year() | 獲取日期中的年 | 2022 |
| quarter() | 獲取日期中的季度 | 3 |
| month() | 獲取日期中的月 | 8 |
| day() | 獲取日期中的日 | 8 |
| hour() | 獲取日期中的小時 | 11 |
| minute() | 獲取日期中的分 | 32 |
| second() | 獲取日期中的秒 | 52 |
| weekofyear() | 獲取日期在當前年份的第幾周 | 32 |
| dayofweek() | 獲取日期在當前周的第幾天(周日為第一天) | 2 |
| last_day() | 獲取日期當月最后一天 | 2022-08-31 |
| next_day() | 獲取當前日期之后的下個星期幾的日期 | 2022-08-15 |
| trunc() | 獲取日期月初(參數MM),年初日期(參數YY) | 2022-08-01,2022-01-01 |
1. year()
select year(current_date());2.quarter()
select year(current_date());3.month()
select month(current_date());?
4.day()
select day(current_date());5.hour()
select hour(current_timestamp());?
6.minute()
select minute(current_timestamp());?
7.second
select second(current_timestamp());8.weekofyear()
select weekofyear(current_timestamp());?
9. dayofweek()
select dayofweek(current_timestamp());?
?10.last_day()
select last_day(current_timestamp());?
?11.next_day()
select next_day(current_date(),'MO');?
12.trunc()
SELECT TRUNC(CURRENT_DATE(),'MM')?
SELECT TRUNC(CURRENT_DATE(),'YY')?
?3.時間格式轉換
| 函數 | 說明 | 返回 |
| to_date() | 獲取日期時間中日期部分數據 | 2022-08-08 |
| from_unixtime() | unix時間戳到轉時間格式 | yyyy-MM-dd |
| date_format() | 日期、時間戳、字符串類型格式化輸出標準時間格式 | yyyy-MM-dd |
| unix_timestamp() | 獲取當前時間的unix時間戳和日期轉UNIX時間戳函數 | 1659938033 |
| from_utc_timestamp/to_utc_timestamp() | utc時間轉換 | yyyy-MM-dd |
| to_unix_timestamp() | 日期轉unix時間戳 | 1659938033 |
?1.to_date()
select to_date(current_timestamp())?
2. from_unixtime()
select from_unixtime(1659938033,'yyyy-MM-dd')?
select from_unixtime(1659938033,'yyyyMMdd')?
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:dd:ss');3.date_format
select date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss');?
select date_format(current_date(),'yyyy-MM-dd');?
select date_format('2022-08-09 12:12:12','yyyy-MM-dd HH:mm:ss');?
?4.unix_timestamp
select unix_timestamp(); SELECT unix_timestamp(current_timestamp())?
5. from_utc_timestamp/to_utc_timestamp
select from_utc_timestamp(current_timestamp(),8);?
select to_utc_timestamp(current_timestamp(),8);?
6. to_unix_timestamp
select to_unix_timestamp('2022-08-09 11:10:27','yyyy-MM-dd HH:dd:ss');?4.時間運算
關于時間運算有很多個不同的方法來實現,自定義函數或者是使用函數拼湊獲取自己想要的結果就行了。
這里列舉幾個常用的時間運算函數:
| 函數 | 說明 | 返回 |
| datediff() | 日期比較函數,返回開始日期減去結束日期的天數 | 前者大于后者,返回值為正,否則,返回值為負。 |
| date_sub() | 日期減少函數,返回日期前n天的日期 | 返回日期前n天的日期 |
| date_add() | 日期增加函數,返回日期后n天的日期 | 返回日期后n天的日期 |
| months_between() | 返回兩個日期之間包含的月數(結果為double類型) | double類型月份數值 |
?1.datediff()
select datediff('2022-08-14','2022-08-04');?
select datediff('2022-08-04','2022-08-14');?2.date_sub()
SELECT date_sub('2022-08-04',10) SELECT date_sub('2022-08-04',-10)?3.date_add()
其實和date_sub可以正負號替換,記住一個就行了:
select DATE_ADD('2022-08-04',10)?4.months_between()
select months_between('2022-08-04','2022-08-14')?
點關注,防走丟,如有紕漏之處,請留言指教,非常感謝
以上就是本期全部內容。我是fanstuck ,有問題大家隨時留言討論 ,我們下期見。
總結
以上是生活随笔為你收集整理的Hive时间日期函数一文详解+代码实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive日期函数处理
- 下一篇: Qml环形倒计时