Hive函数
发布日期:2022-02-14 23:02:57
浏览次数:39
分类:技术文章
本文共 4312 字,大约阅读时间需要 14 分钟。
Hive函数
数学函数
函数 | 说明 |
---|---|
ceil | 向上取整 |
rand(123) | 带seed的,在[0,1]之间的随机数 |
exp(d) | e的d次幂 |
ln(d) | log(d)–自然数e为底d的对数 |
llog10(d) / log2(d) / log(m, d) | 10为底 / 2为底 / m为底 |
power(d, p) | d的p次幂 |
pmod(m, n) | m对n取模,int型 |
sin(d);cos(d);tan(d) | |
asin(d);acos(d);atan(d) | |
degrees(d) | 将弧度值d转换为角度值 |
radians(d) | 与上反向操作 |
e(); pi() | 数学常数e 和 pi |
聚合函数
函数 | 说明 |
---|---|
var_pop(col) | 返回集合col中的一组数值的方差 |
var_samp(col) | 返回集合col中的一组数值的样本方差 |
stddev_pop/samp | 标准差 |
covar_pop/samp | 协方差 |
corr(col1, col2) | 相关系数 |
collect_set(col) | 列去重,类似distinct |
percentile(col,array(0.3, 0.5, 0.8)) | 返回 col 对应的3分位数、5分位、8分位数,其中,col的类型必须为BIGINT,可以用explode将结果转换为行 |
percentile_approx(col, array(0.3, 0.5, 0.8)) | 同上,其中col 类型必须为double型 |
说明
- set hive.map.aggr = true 来提高 聚合的性能
- 不允许在一个查询语句中使用多于一个的函数
表生成函数
函数 | 说明 |
---|---|
explode(arr) | 返回0到多行,arr里面每个元素一行 |
explode(map) | 返回0到多行,map里面的每个kv一行 |
explode(ARRAY a) | 与explode(arr)反向操作 |
json_tuple(jsonstr, p1, p2, …,pn) | 输入为json字符串,输出为多个键(pi)对应的值 |
parse_url_tuple(url, p1, p2, …,pn) | 输入url,输出为url各个部分,其中部分名称对大小写敏感,且不包含空格:HOST,PATH,QUERY,REF,PROTOCOL,AUTHORITY,FILE,USERINFO,QUERY:<KEY_NAME> |
内置函数
函数 | 说明 |
---|---|
concat(s1, s2) | 字符串拼接 |
concat_ws(seperator, s1, s2) | 字符串按指定的分隔符拼接 |
find_in_set(s,strlist) | 返回 s 在 strlist 中第一次出现的位置,strlist是按逗号切割的字符串,若无,返回0 |
format_number(x, d) | 将数值x转换为 xx,xxx.xx 形式的字符串,d为保留小数位,d = 0, 则无小数位输出 |
get_json_object(json_str, key) | |
in_file(s, filename) | 若文件名为filename的文件中,有完整一行数据与字符串s完全匹配,返回true |
instr(str, s) | 返回s在 str中的位置(从1开始) |
locate(s, str, p) | 查找 在字符串 str 的 p位置后的字符串s首次出现的位置 |
lower(s) ; lcase(s) | 字符串转为小写 |
lpad(s, len, pad) | 从左侧开始对字符串 s 使用字符串 pad 进行填充,最终达到 len 的长度为止 |
ltrim(s) | 去掉字符串 s 左侧的空格 |
regexp_extract(subject, regex_attern, index) | 抽取字符串 subject 中符合正则表达式 regex_attern 的第 index 个部分的子字符串 |
regexp_replace(s, regex, replacement) | 按照java正则 regex 将字符串 s 中符合条件的部分替换为 replacement 所指定的字符串 |
repeat(s, n) | 重复输出 n 次 字符串 s |
reverse(s) | 反转字符串 s |
size(map) ; size(array) | 返回map array 的元素个数 |
space(n) | 返回n个空格 |
split(s, pattern) | 按照正则 pattern 来分割字符串 s |
str_to_map(s, delim1, delim2) | 将字符串 s 按照指定分隔符转换为map,s:输入字符串;delim1:键值对之间的分隔符;delim2:键值之间的分隔符 |
from_unixtime(unixtime [, format]) | 将时间戳秒转换为UTC时间,并用字符串表示,可以通过format指定输出格式 |
unix_timestamp() | 获取当前本地时区下的当前时间戳 |
unix_timestamp(date) | date 必须为 ‘yyyy-MM-dd HH:mm:ss’,如果不符合,则返回0,否则返回unix时间戳 |
unix_timestamp(date,pattern) | date :符合pattern格式,返回unix时间戳 |
to_date(timestamp) | 返回 时间字符串 的日期部分 yyyy-MM-dd |
year(date);month(date);day(date);hour;minute;second | 返回时间字符串中相应的年月日,int型 |
weekofyear(date) | 返回时间字符位于一年中的第几周 |
datediff(enddate, startdate) | 返回 startdate 到 enddate 相差的自然日天数 |
date_add(startdate, days) | 增加days天后的日期 |
date_sub(startdate, days) | 减去 days天后的日期 |
from_utc_timestamp(timestamp, timezone) | 将给定的时间戳timestamp(并非一定utc) 转化为指定时区(timezone)下的时间戳 |
to_utc_timestamp(timestamp, timezone) | 与上相反 |
deocde(); nvl() | 同MySQL |
coalesce(a, b, c) | 返回第一个不为null的数据,若均为null,均返回null |
一些函数的使用
lateral view
- query
SELECT myCol1, myCol2 FROM baseTableLATERAL VIEW explode(col1) myTable1 AS myCol1LATERAL VIEW explode(col2) myTable2 AS myCol2;
- 总结
- Lateral View通常和UDTF一起出现,为了解决UDTF不允许在select字段的问题
- Multiple Lateral View可以实现类似笛卡尔乘积。
- Outer关键字可以把不输出的UDTF的空结果,输出成NULL,防止丢失数据。
explode
- 注意事项
- No other expressions are allowed in SELECT : SELECT pageid, explode(adid_list) AS myCol… is not supported(不能udtf和其他非udtf列混用)
- UDTF’s can’t be nested : SELECT explode(explode(adid_list)) AS myCol… is not supported(不能嵌套)
- GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY is not supported
- SELECT explode(adid_list) AS myCol … GROUP BY myCol is not supported(select中的udtf一定要有别名,否则报错)
- query
SELECT explode(myCol) AS myNewCol FROM myTable;SELECT explode(myMap) AS (myMapKey, myMapValue) FROM myMapTable;SELECT posexplode(myCol) AS pos, myNewCol FROM myTable;
parse_url_tuple
- create table
create external table if not exists t_url(f1 string, f2 string) row format delimited fields TERMINATED BY ' ' location '/test/url';
- query
SELECT f1, b.* FROM t_url LATERAL VIEW parse_url_tuple(f2, 'HOST', 'PATH', 'QUERY', 'QUERY:k1') b as host, path, query, query_id
array_contains
- create table
create EXTERNAL table IF NOT EXISTS userInfo (id int,sex string, age int, name string, email string,sd string, ed string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location '/hive/dw';
- query
select * from userinfo where sex='male' and (id!=1 and id !=2 and id!=3 and id!=4 and id!=5) and age < 30;select * from (select * from userinfo where sex='male' and !array_contains(split('1,2,3,4,5',','),cast(id as string))) tb1 where tb1.age < 30;
来源声明:以上内容来源于 《Hive编程指南》及个人学习笔记与总结,如有侵权,请告知
转载地址:https://blog.csdn.net/fish2009122/article/details/89369998 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年03月24日 08时28分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux服务器上已安装R 用户下载R包,R语言安装R package的2种方法
2019-04-21
linux下mysql 备份方法,Linux下mysql数据库备份方法小结
2019-04-21
肺部ct重建_胸片检查容易漏诊肺癌,去年正常今年晚期常发生,体检一定要做CT...
2019-04-21
x86so文件装换成arm64位_64位系统正式发布说明及介绍!!
2019-04-21
for循环中取出最大最小 累加_LeetCode之长度最小的子数组
2019-04-21
如何打开老公人脸识别_【话题】南宁已有小区启用人脸识别门禁,有人点赞有人忧...
2019-04-21
makex机器人程序_机器人教育为相城青少年叩开科学世界大门
2019-04-21
米哈游客户端笔试题_Garena校招 游戏客户端开发通关面经
2019-04-21
airpodspro没有弹窗_使用AirPods Pro一天的主观感受
2019-04-21
创建物化视图commit_视图及范式
2019-04-21
函数传参字典_Python新手上车17:函数传递任意多个参数
2019-04-21
秦九韶算法递推公式_算法讲解之复杂度分析
2019-04-21
添加绝对路径_网站中如何添加绝对路径
2019-04-21
redis线程阻塞原因排插_Redis阻塞原因详解
2019-04-21