Hive函數大全(含例子)之集合函數、日期函數、條件函數

目錄

# 集合函數 Collection Functions

# 日期函數 Date Functions

# 條件函數 Conditional Functions

# 相關文章


# 集合函數 Collection Functions

 

## size(Map<K.V>)

返回結果:返回Map中的元素個數

返回類型:int

* select size(str_to_map('k1: v1'));  -- 結果爲 1
* select size(str_to_map('k1:v1,k2:v2'));  -- 結果爲 2

 

## size(Array<T>)

返回結果:返回Array中的元素個數

返回類型:int

* select size(array(1, 2, 3));  -- 結果爲 3

* select size(array('A', 'A'));  -- 結果爲 2

 

## map_keys(Map<K.V>)

返回結果:返回一個包含Map中所有Key的無序數組

返回類型:array<K>

* select map_keys(str_to_map('k1:v1'));  -- 結果爲 ["k1"]
* select map_keys(str_to_map('k1:v1,k2:v2'));  -- 結果爲 ["k2","k1"]

 

## map_values(Map<K.V>)

返回結果:返回一個包含Map中所有Value的無序數組

返回類型:array<V>

* select map_values(str_to_map('k1:v1'));  -- 結果爲 ["v1"]
* select map_values(str_to_map('k1:v1,k2:v2'));  -- 結果爲 ["v2","v1"]

 

## array_contains(Array<T>, value)

返回結果:如果Array<T>中包含value,則返回True,否則返回False

返回類型:boolean

* select array_contains(array(1, 2), 3);  -- 結果爲 false
* select array_contains(array('A', 'B', 'C'), 'A');  -- 結果爲 true

 

## sort_array(Array<T>)

返回結果:返回一個升序排序的Array

返回類型:array<t>

* select sort_array(array(3, 2, 4));  -- 結果爲 [2,3,4]
* select sort_array(array('9', '11', '12'));  -- 結果爲 ["11","12","9"]

 

# 日期函數 Date Functions

 

## from_unixtime(bigint unixtime[, string format])

返回結果:將Unix時間戳轉換爲字符串格式的時間

返回類型:string

* select from_unixtime(1586225596, 'yyyy-MM-dd hh:mm:ss');  -- 結果爲 2020-04-07 10:13:16
* select from_unixtime(1586225596, 'yyyyMMdd');  -- 結果爲 20200407

## unix_timestamp()

返回結果:返回當前Unix是時間戳,精確到秒

返回類型:bigint

* select unix_timestamp();  -- 結果爲 1586171888

 

## unix_timestamp(string date, string pattern)

返回結果:將字符串格式的時間轉換爲Unix時間戳格式

返回類型:bigint

* select unix_timestamp('2020-01-01 01:01:02', 'yyyy-MM-dd hh:mm:ss');  -- 結果爲 1577811662

 

## to_date(string timestamp)

返回結果:返回時間戳的日期部分

返回類型:2.1.0之前版本返回的是string,2.1.0版本及之後返回的是date

* select to_date('2020-04-05 06:07:08');  -- 結果爲 2020-04-05

 

## year(string date)

返回結果:返回時間的年部分

返回類型:int

* select year('2020-04-05 06:07:08');  -- 結果爲 2020

 

## quarter(date/timestamp/string)

返回結果:返回季度

返回類型:int

* select quarter('2020-04-05 06:07:08');  -- 結果爲 2

 

## month(string date)

返回結果:返回時間的月部分

返回類型:int

* select month('2020-04-05 06:07:08');  -- 結果爲 4

 

## day(string date) dayofmonth(date)

返回結果:返回時間的日部分

返回類型:int

* select day('2020-04-05 06:07:08');  -- 結果爲 5
* select dayofmonth('2020-04-05 06:07:08');  -- 結果爲 5

 

## hour(string date)

返回結果:返回時間的小時部分

返回類型:int

* select hour('2020-04-05 06:07:08');  -- 結果爲 6

 

## minute(string date)

返回結果:返回時間的分鐘部分

返回類型:int

* select minute('2020-04-05 06:07:08');  -- 結果爲 7

 

## second(string date)

返回結果:返回時間的秒部分

返回類型:int

* select second('2020-04-05 06:07:08');  -- 結果爲 8
* select second('2020-04-05');   -- 結果爲 NULL

 

## weekofyear(string date)

返回結果:返回date是當年的第幾個星期

返回類型:int

* select weekofyear('2020-01-01 06:07:08');  -- 結果爲 1
* select weekofyear('2020-01-06');  -- 結果爲 2

 

## extract(field FROM source)

返回結果:從 source 中檢索出指定日期部分(如檢索出day, dayofweek, hour, minute, month, quarter, second, week and year)

返回類型:int

* select extract(day from '2020-04-05 06:07:08');  -- 結果爲 5
* select extract(dayofweek from '2020-04-05 06:07:08');   -- 結果爲 1(星期天爲1)
* select extract(dayofweek from '2020-04-06 06:07:08');   -- 結果爲 2(星期一爲2)
* select extract(hour from '2020-04-05 06:07:08');   -- 結果爲 6
* select extract(minute from '2020-04-05 06:07:08');   -- 結果爲 7
* select extract(month from '2020-04-05 06:07:08');   -- 結果爲 4
* select extract(quarter from '2020-04-05 06:07:08');   -- 結果爲 2
* select extract(second from '2020-04-05 06:07:08');   -- 結果爲 8
* select extract(week from '2020-04-05 06:07:08');   -- 結果爲 14(同weekofyear)
* select extract(year from '2020-04-05 06:07:08');   -- 結果爲 2020

 

## datediff(string enddate, string startdate)

返回結果:返回 enddate 和 startdate 相差的天數

返回類型:int

* select datediff('2020-04-06 01:01:01', '2020-04-05 06:07:08');  -- 結果爲 1
* select datediff('2020-04-04', '2020-04-05');  -- 結果爲 -1

 

## date_add(date/timestamp/string startdate, tinyint/smallint/int days)

返回結果:返回 startdate 增加 days 天之後的日期

返回類型:2.1.0之前版本返回的是string,2.1.0版本及之後返回的是date

* select date_add('2020-04-05 06:07:08', 1);  -- 結果爲 2020-04-06
* select date_add('2020-04-05 06:07:08', -1);  -- 結果爲 2020-04-04

 

## date_sub(date/timestamp/string startdate, tinyint/smallint/int days)

返回結果:返回 startdate 減去 days 天之後的日期

返回類型:2.1.0之前版本返回的是string,2.1.0版本及之後返回的是date

* select date_sub('2020-04-05 06:07:08', 1);  -- 結果爲 2020-04-04
* select date_sub('2020-04-05 06:07:08', -1);  -- 結果爲 2020-04-06

 

## from_utc_timestamp({any primitive type} ts, string timezone)

返回結果:轉換爲指定時區的時間戳

返回類型:timestamp

* select from_utc_timestamp(2592000.0, 'GMT');  -- 結果爲 1970-01-31 08:00:00
* select from_utc_timestamp(2592000000, 'GMT');  -- 結果爲 1970-01-31 08:00:00
* select from_utc_timestamp(timestamp '1970-01-31 16:00:00', 'PST') ;  -- 結果爲 1970-01-31 08:00:00

 

## to_utc_timestamp({any primitive type} ts, string timezone)

返回結果:轉換爲世界標準時間UTC的時間戳

返回類型:timestamp

* select to_utc_timestamp(2592000.0, 'GMT');  -- 結果爲 1970-01-31 08:00:00
* select to_utc_timestamp(2592000000, 'GMT');  -- 結果爲 1970-01-31 08:00:00
* select to_utc_timestamp(timestamp '1970-01-31 16:00:00', 'PST') ;  -- 結果爲 1970-02-01 00:00:00

 

## current_date

返回結果:返回當前日期(SQL查詢計算開始時的日期,而不是結束時的日期)

返回類型:date

* select current_date;  -- 結果爲 2020-04-06

 

## current_timestamp

返回結果:返回當前時間戳(SQL查詢計算開始時的時間,而不是結束時的時間)

返回類型:timestamp

* select current_timestamp;  -- 結果爲 2020-04-06 20:09:05.777

 

## add_months(string start_date, int num_months, output_date_format)

返回結果:返回 start_date 增加 num_months 月之後的日期(可指定輸出的日期格式)

返回類型:string

* select add_months('2020-01-01 01:01:01', 1);  -- 結果爲 2020-02-01
* select add_months('2020-01-01 01:01:01', -1, 'yyyyMMddhhmmss');  -- 結果爲 20191201010101

 

## last_day(string date)

返回結果:返回 date 所屬月份的最後一天

返回類型:string

* select last_day('2020-01-01');  -- 結果爲 2020-01-31
* select last_day('2020-02-01');  -- 結果爲 2020-02-29

 

## next_day(string start_date, string day_of_week)

返回結果:返回晚於 start_date 的下一個星期幾(day_of_week可以用兩個字母、三個字母或者英文全拼來表示)(start_date的時分秒部分將被忽略)

返回類型:string

* select next_day('2020-04-06', 'MON');  -- 結果爲 2020-04-13
* select next_day('2020-04-06', 'TU');  -- 結果爲 2020-04-07
* select next_day('2020-04-06 12:12:12', 'FRIDAY');  -- 結果爲 2020-04-10

 

## trunc(string date, string format)

返回結果:截斷日期到指定的日期精度,僅支持月(MONTH/MON/MM)或者年(YEAR/YYYY/YY)

返回類型:string

* select trunc('2020-04-06', 'YY');   -- 結果爲 2020-01-01
* select trunc('2020-04-06', 'MM');   -- 結果爲 2020-04-01
* select trunc('2020-04-06 12:12:12', 'HH');   -- 結果爲 NULL

 

## months_between(date1, date2)

返回結果:返回 date1 和 date2 的月份差

返回類型:double

* select months_between('2020-01-31', '2020-02-29');  -- 結果爲 -1.0
* select months_between('2020-01-31', '2020-02-29'); 

 

## date_format(date/timestamp/string ts, string fmt)

返回結果:格式化日期

返回類型:string

* select date_format('2020-04-06 12:12:12', 'yyyyMMddhhmmss');  -- 結果爲 20200406121212
* select date_format('2020-04-06 12:12:12', 'yyyy');  -- 結果爲 2020
* select date_format('2020-04-06', 'yyyy-MM-dd hh:mm:ss');  -- 結果爲 2020-04-06 12:00:00

 

# 條件函數 Conditional Functions

 

## if(boolean testCondition, T valueTrue, T valueFalseOrNull)

返回結果:返回 valueTrue 如果 testCondition 成立,否則返回 valueFalseOrNull

返回類型:T

* select if(2 > 1, 3, 4);  -- 結果爲 3
* select if(2 > NULL, 3, 4);  -- 結果爲 4

 

## isnull( a )

返回結果:返回 True 如果 a is NULL,否則返回 False

返回類型:boolean

* select isnull(NULL);  -- 結果爲 true
* select isnull(1234);  -- 結果爲 false

 

## isnotnull ( a )

返回結果:返回 False 如果 a is NULL,否則返回 True

返回類型:boolean

* select isnotnull (NULL);  -- 結果爲 false
* select isnotnull (1234);  -- 結果爲 true

 

## nvl(T value, T default_value)

返回結果:如果 value 不爲 NULL 則返回 value,否則返回 default_value

返回類型:T

* select nvl('11', '22');  -- 結果爲 11
* select nvl(NULL, '22');   -- 結果爲 22

 

## COALESCE(T v1, T v2, ...)

返回結果:返回第一個不爲NULL的值,如果全爲NULL則返回NULL

返回類型:T

* select COALESCE('00', '11');  -- 結果爲 00
* select COALESCE(NULL, '22');   -- 結果爲 22
* select COALESCE(NULL, NULL, '33');   -- 結果爲 33
* select COALESCE(NULL, NULL, NULL);   -- 結果爲 NULL

 

## CASE a WHEN b THEN c [WHEN d THEN e] [ELSE f] END

返回結果:如果 a = b 則返回 c,如果 a = d 則返回 e,否則返回 f

返回類型:T

* select case 1 when 1 then ;  -- 結果爲 213123123123
* select date_format('123123123');  -- 結果爲 213123123123
* select date_format('123123123');  -- 結果爲 213123123123

 

## CASE WHEN a THEN b [WHEN c THEN d] [ELSE e] END

返回結果:如果 a 成立則返回 b,[如果 c 成立則返回 d],否則返回 e

返回類型:T

* select case when 1 = 1 then 'a' when 2 = 2 then 'b' else 'c' end;  -- 結果爲 a
* select case when 1 = 2 then 'a' when 2 = 2 then 'b' else 'c' end;   -- 結果爲 b
* select case when 1 = 2 then 'a' when 2 = 1 then 'b' else 'c' end;   -- 結果爲 c

 

## nullif( a, b )

返回結果:如果 a = b,返回 NULL,否則返回 a

返回類型:T

* select nullif(1, 1);  -- 結果爲 NULL
* select nullif(1, 2);  -- 結果爲 1

 

## assert_true(boolean condition)

返回結果:如果 condition 成立則返回 NULL,否則拋出異常

返回類型:void

* select assert_true(2 > 1);  -- 結果爲 NULL
* select assert_true(2 < 1);  -- 結果爲 Error during job, obtaining debugging information...

 

# 相關文章

Hive函數大全(含例子)之數學函數(Mathematical Functions)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章