c++ contains函数_Hive函数大全(含例子)之集合函数、日期函数、条件函数

本文详细介绍了Hive中的集合函数,如size、map_keys和array_contains等;日期函数,如from_unixtime、unix_timestamp和date_format等;以及条件函数,如IF和CASE。通过示例展示了如何使用这些函数进行数据处理。
摘要由CSDN通过智能技术生成
5066a42d39926f625ad8acc2fce9b546.png

集合函数 Collection Functions

size(Map)

返回结果:返回Map中的元素个数

返回类型:int

select size(str_to_map('k1: v1'));  -- 结果为 1select size(str_to_map('k1:v1,k2:v2'));  -- 结果为 2

size(Array)

返回结果:返回Array中的元素个数

返回类型:int

select size(array(1, 2, 3));  -- 结果为 3select size(array('A', 'A'));  -- 结果为 2

map_keys(Map)

返回结果:返回一个包含Map中所有Key的无序数组

返回类型:array

select map_keys(str_to_map('k1:v1'));  -- 结果为 ["k1"]select map_keys(str_to_map('k1:v1,k2:v2'));  -- 结果为 ["k2","k1"]

map_values(Map)

返回结果:返回一个包含Map中所有Value的无序数组

返回类型:array

select map_values(str_to_map('k1:v1'));  -- 结果为 ["v1"]select map_values(str_to_map('k1:v1,k2:v2'));  -- 结果为 ["v2","v1"]

array_contains(Array, value)

返回结果:如果Array中包含value,则返回True,否则返回False

返回类型:boolean

select array_contains(array(1, 2), 3);  -- 结果为 falseselect array_contains(array('A', 'B', 'C'), 'A');  -- 结果为 true

sort_array(Array)

返回结果:返回一个升序排序的Array

返回类型:array

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:16select 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-05year(string date)

返回结果:返回时间的年部分

返回类型:int

select year('2020-04-05 06:07:08');  -- 结果为 2020

quarter(string date)

返回结果:返回季度

返回类型:int

select quarter('2020-04-05 06:07:08');  -- 结果为 2select quarter(111111);  -- 结果为 21111

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');  -- 结果为 5select 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');  -- 结果为 8select second('2020-04-05');   -- 结果为 NULL

weekofyear(string date)

返回结果:返回date是当年的第几个星期

返回类型:int

select weekofyear('2020-01-01 06:07:08');  -- 结果为 1select 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');  -- 结果为 5select 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');   -- 结果为 6select extract(minute from '2020-04-05 06:07:08');   -- 结果为 7select extract(month from '2020-04-05 06:07:08');   -- 结果为 4select extract(quarter from '2020-04-05 06:07:08');   -- 结果为 2select extract(second from '2020-04-05 06:07:08');   -- 结果为 8select 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');  -- 结果为 1select 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-06select 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-04select 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:00select from_utc_timestamp(2592000000, 'GMT');  -- 结果为 1970-01-31 08:00:00select 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:00select to_utc_timestamp(2592000000, 'GMT');  -- 结果为 1970-01-31 08:00:00select 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-01select 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-31select 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-13select next_day('2020-04-06', 'TU');  -- 结果为 2020-04-07select 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-01select trunc('2020-04-06', 'MM');   -- 结果为 2020-04-01select 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.0select 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');  -- 结果为 20200406121212select date_format('2020-04-06 12:12:12', 'yyyy');  -- 结果为 2020select 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);  -- 结果为 3select if(2 > NULL, 3, 4);  -- 结果为 4

isnull( a )

返回结果:返回 True 如果 a is NULL,否则返回 False

返回类型:boolean

select isnull(NULL);  -- 结果为 trueselect isnull(1234);  -- 结果为 false

isnotnull ( a )

返回结果:返回 False 如果 a is NULL,否则返回 True

返回类型:boolean

select isnotnull (NULL);  -- 结果为 falseselect isnotnull (1234);  -- 结果为 true

nvl(T value, T default_value)

返回结果:如果 value 不为 NULL 则返回 value,否则返回 default_value

返回类型:T

select nvl('11', '22');  -- 结果为 11select nvl(NULL, '22');   -- 结果为 22

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

返回结果:返回第一个不为NULL的值,如果全为NULL则返回NULL

返回类型:T

select COALESCE('00', '11');  -- 结果为 00select COALESCE(NULL, '22');   -- 结果为 22select COALESCE(NULL, NULL, '33');   -- 结果为 33select 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 ;  -- 结果为 213123123123select date_format('123123123');  -- 结果为 213123123123select 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;  -- 结果为 aselect case when 1 = 2 then 'a' when 2 = 2 then 'b' else 'c' end;   -- 结果为 bselect 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);  -- 结果为 NULLselect nullif(1, 2);  -- 结果为 1

assert_true(boolean condition)

返回结果:如果 condition 成立则返回 NULL,否则抛出异常

返回类型:void

select assert_true(2 > 1);  -- 结果为 NULLselect assert_true(2 < 1);  -- 结果为 Error during job, obtaining debugging information...

相关文章

Hive函数大全(含例子)之数学函数(Mathematical Functions)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值