動(dòng)漫主題WordPressseo服務(wù)運(yùn)用什么技術(shù)
一、Hive 日期函數(shù)
在日常的數(shù)據(jù)處理工作中,日期和時(shí)間的處理是非常常見的操作。Hive 提供了豐富的日期函數(shù),能夠幫助我們方便地進(jìn)行日期和時(shí)間的計(jì)算。本文將詳細(xì)介紹 Hive 中常用的日期函數(shù),并通過具體的示例展示其用法和結(jié)果。
1. 獲取當(dāng)前時(shí)間
獲取包含毫秒的當(dāng)前時(shí)間
SELECT current_timestamp();
示例結(jié)果:
2024-10-01 12:34:56.789
獲取當(dāng)前日期
SELECT current_date();
示例結(jié)果:
2024-10-01
2. Unix 時(shí)間戳處理
獲取當(dāng)前 Unix 時(shí)間戳
SELECT unix_timestamp();
示例結(jié)果:
1727801696
解釋:Unix 時(shí)間戳是自1970年1月1日(UTC)以來的秒數(shù)
將 Unix 時(shí)間戳轉(zhuǎn)換為日期時(shí)間
SELECT from_unixtime(1727801696);
示例結(jié)果:
2024-10-01 12:34:56
3. 日期計(jì)算
日期加減天數(shù)
在指定的日期上增加或減少天數(shù)。
SELECT date_add(current_date(), 2);
示例結(jié)果:
2024-10-03
日期加減月份
在指定的日期上增加或減少月份。
SELECT add_months(current_date(), 1);
示例結(jié)果:
2024-11-01
4. 獲取指定日期的特殊日期
獲取指定日期所在月份的最后一天
SELECT last_day(current_date());
示例結(jié)果:
2024-10-31
獲取指定日期的下一個(gè)星期幾
第二個(gè)參數(shù)決定了返回的星期幾,例如 'MO'
表示星期一。
SELECT next_day(current_date(), 'MO');
示例結(jié)果:
2024-10-07
5. 日期差計(jì)算
計(jì)算兩個(gè)日期之間相差的天數(shù)
SELECT datediff(current_date(), to_date('2020-10-08'));
示例結(jié)果:
1454
計(jì)算兩個(gè)日期之間相差的月數(shù)
SELECT months_between(current_timestamp(), to_date('2022-10-08'));
示例結(jié)果:
24.97
6. 日期格式轉(zhuǎn)換
將字符串類型的日期轉(zhuǎn)換為時(shí)間戳
SELECT unix_timestamp('2008-08-08', 'yyyy-MM-dd');
示例結(jié)果:
1218144000
7. 提取日期中的年、月、日
獲取日期中的年、月、日
SELECT year(current_date()), month(current_date()), day(current_date());
示例結(jié)果:
2024 10 1
二、Hive 條件函數(shù)
1. IF 函數(shù)
if(判斷條件, x, y)
:當(dāng)判斷條件成立時(shí),返回 x,否則返回 y。
SELECT ename, sal, if(sal > 2500, 'great than 2500', 'less equers 2500') FROM emp;
示例結(jié)果:
+-------+------+-------------------+
| ename | sal | result |
+-------+------+-------------------+
| John | 3000 | great than 2500 |
| Jane | 2000 | less equers 2500 |
+-------+------+-------------------+
2. CASE WHEN 函數(shù)
CASE WHEN
函數(shù)用來根據(jù)條件進(jìn)行分支判斷,打標(biāo)簽,并結(jié)合聚合函數(shù)進(jìn)行統(tǒng)計(jì),然后以列的方式顯示結(jié)果。
SELECT ename, sal,
CASE WHEN sal <= 1000 THEN 'A 級(jí)'WHEN sal <= 2000 THEN 'B 級(jí)'WHEN sal <= 3000 THEN 'C 級(jí)'WHEN sal <= 4000 THEN 'D 級(jí)'ELSE 'E 級(jí)'
END as grade
FROM emp;
示例結(jié)果:
+-------+------+-------+
| ename | sal | grade |
+-------+------+-------+
| John | 3000 | C 級(jí) |
| Jane | 2000 | B 級(jí) |
+-------+------+-------+
三、Hive 空值處理函數(shù)
1. COALESCE 函數(shù)
coalesce(a, b, c, ...)
返回參數(shù)里第一個(gè)不為空的值。
SELECT ename, coalesce(comm, 0) as comm FROM emp;
示例結(jié)果( Jane的comm為空值 ):
+-------+------+
| ename | comm |
+-------+------+
| John | 500 |
| Jane | 0 |
+-------+------+
2. NVL 函數(shù)
NVL(x, y)
如果 x 不為 NULL,就返回 x,否則返回 y。
SELECT ename, nvl(comm, 0) as comm FROM emp;
示例結(jié)果( Jane的comm為空值 ):
+-------+------+
| ename | comm |
+-------+------+
| John | 500 |
| Jane | 0 |
+-------+------+
四、聚合函數(shù)
常用的聚合函數(shù)有 MAX、SUM、COUNT、MIN、AVG 以及 GROUP BY 和 HAVING 的用法和 Mysql、Oracle 是一樣的。
SELECT COUNT(1), MAX(sal), MIN(sal), AVG(sal), SUM(sal) FROM emp;
示例結(jié)果:
+---------+----------+----------+----------+----------+
| count(1)| max(sal) | min(sal) | avg(sal) | sum(sal) |
+---------+----------+----------+----------+----------+
| 2 | 3000 | 2000 | 2500 | 5000 |
+---------+----------+----------+----------+----------+
五、類型轉(zhuǎn)換函數(shù)
1. array
數(shù)組類型轉(zhuǎn)換函數(shù)
將不同的元素拼接成一個(gè)數(shù)組。
SELECT array(1, 2, 3) as num_array, array('a', 'b', 'c') as char_array;
示例結(jié)果:
+-----------+-------------+
| num_array | char_array |
+-----------+-------------+
| [1,2,3] | ['a','b','c']|
+-----------+-------------+
2. str_to_map
map類型轉(zhuǎn)換函數(shù)
將字符串參數(shù)轉(zhuǎn)換成一個(gè) map 類型。
SELECT str_to_map('name:zhangsan,age:20', ',', ':') as info_map;
示例結(jié)果:
+-------------------------------+
| info_map |
+-------------------------------+
| {"name":"zhangsan","age":"20"}|
+-------------------------------+
語法:
str_to_map(text, x, y)
text
:包含鍵值對(duì)信息的字符串。x
:鍵值對(duì)之間的分隔符。y
:鍵和值之間的分隔符。
3. CAST
強(qiáng)制類型轉(zhuǎn)換函數(shù)
CAST(x AS 類型)
強(qiáng)制類型轉(zhuǎn)換。
SELECT from_unixtime(CAST('1652271247' AS bigint)) as datetime;
示例結(jié)果:
+---------------------+
| datetime |
+---------------------+
| 2022-05-11 03:34:07 |
+---------------------+