hive开发问题记录

97 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

最近在开发中遇到一个错误,开始一直不知道是为啥原因,后来知道答案后还是基础不够扎实呀。

问题是这样的,求两个日期的差值,用的函数是正确的,就是datediff()这个求差函数,

但是获取的结果一直是空的,不知道为啥,将默认值修改了一下发现是返回结果的类型写错了,想当然的写成了bigint,实际datediff获得的结果是int类型的,默认值可以设置为0。

下面详细说一下他的使用。

常见使用方法: datediff(enddate,startdate)

具体功能描述: 这里是对两个日期获取他们相差的天数值,首尾不计算在内,大的时间在前,小的时间在后,注意他们获得的结果是int类型。输入的参数是string类型的。不用取数到十分秒,只要到日期就可以了。

select datediff('2022-02-01','2022-02-02')
>> 1
select datediff('2022-05-01','2022-02-02')
>> 91

继续接着上一文的集合函数,介绍几个map相关的集合函数,包括获取value值和长度的。

map_values()可以查询所有的map中的value值。

常见使用方法: map_values(Map<K.V>)

具体功能描述: 返回指定的map中的所有key值,应用也是比较广泛,比如将数据组装成map后,就只要获取key值,可以用到这个函数方法。注意此处返回的类型为array。

select map_keys({name:hahah,age:22,grade:900})
​
>> [name,age,grade]

size(Map<K.V>) 查询map的长度

常见使用方法:

具体功能描述: 可返回指定的map的长度,这个函数有什么应用场景呢,比如需要统计字段数量的时候,将数据组装成map后,应用到size()的函数,获取长度,返回的结果类型是int。

select size({name:hahah,age:22,grade:900})
>> 3

获取array的长度函数也是跟这个map长度获取的函数类似,只不过就是将参数换成array格式的内容即可,就不赘述了。