hive和oracle常用函数汇总及报错解决方法总结
HIVE
一、lateral view explode(),功能:把一列拆分成多行。例如:
原始数据
分类等级1 | 分类等级2 | 分类等级3 |
时间 | 朝代 | 唐*宋*元 |
教育阶段 | 小学*初中 | 一年级*二年级*三年级 |
目标数据:
分类等级1 | 分类等级2 | 分类等级3 |
时间 | 朝代 | 唐 |
时间 | 朝代 | 宋 |
时间 | 朝代 | 元 |
教育阶段 | 小学 | 一年级 |
教育阶段 | 小学 | 二年级 |
教育阶段 | 小学 | 三年级 |
教育阶段 | 初中 | 一年级 |
教育阶段 | 初中 | 二年级 |
教育阶段 | 初中 | 三年级 |
代码:
select 分类等级1,新分类等级2,新分类等级3
from 原始数据
lateral view explode(split(分类等级2,'\\*')) x as 新分类等级2
lateral view explode(split(分类等级3,'\\*')) y as 新分类等级3
;
注意:1)split在分割字符串时,有些情况需要添加'\\'或者'\'转义字符才能成功,使用的时候可以每种情况都试下;
二、concat_ws(),功能:把多行合并到一列。格式:concat_ws(',',collect_set(column)) ,collect_set可以去重。例如:
原始数据:
用户id | 商品id |
10001 | 123456 |
10001 | 123457 |
10002 | 123458 |
10002 | 123458 |
目标数据:
用户id | 商品id列表 |
10001 | 123456,123457 |
10002 | 123458 |
代码:
select 用户id,concat_ws(',',collect_set(商品id)) as 商品id列表 from 原始数据;
注:
1)如果用分号进行分隔,要注意用中文状态下,英文状态下会报错。
2)要加group by 。
三、字符串的分割、截取、连接、取长、反转、大小写转换、去空格:
1)split(字符串,分割字符)。注意,分割字符尽量不要用顿号和分号,容易错。
2)substr(字符串,起始位置,截取字符个数)。取最后一位用substr(字符串,-1)即可。
3)concat(字符串1,连接字符,字符串2)。连接多个字符串,则concat(字符串1,连接字符,字符串2,连接字符,字符串3),不要忘记写连接字符。
4)length(字符串),返回值是int类型。
5)reverse(字符串),字符串反转。
6)upper(字符串):小写转大写;lower(字符串):大写转小写。
7)trim(字符串):去掉字符串两端的空格。ltrim(字符串):去掉字符串左端的空格;rtrim(字符串):去掉字符串右端的空格。
8)instr(字符串1,字符串2)>0:判断字符串2是否是字符串1的子字符串,常用于模糊匹配。
9)nvl(A,B),若A为null,则返回B;否则返回A。即优先取A值。
四、分组-排序函数
1)row_number() over(partition by A,B order by C desc)as rank_num:以A,B作为分组,每组下按照C的值进行排序。序号是从1依次往下排,不管结果是否相同,例如排序结果:(1,2,3,4,...)。若取rank_num=1,则表示按照A,B进行去重,数据结果中A,B的值不会同时重复出现(即每个A,B,仅对应一条记录);
2)rank() over(partition by A,B order by C desc)as rank_num:以A,B作为分组,每组下按照C的值进行排序。rank()的排序是值相同,那么序号就相同,但是后面是跳跃的,例如排序结果:(1,1,3,4...)。该函数适用于C是分类型变量转换而来的字段,例如变量A,B,有通过来源1进行匹配的(匹配到的结果不唯一),有通过来源2进行匹配的(匹配到的结果不唯一),有两种来源同时存在的(匹配到的结果不唯一)。事实上,我们想优先来源1,如果没有来源1,那么就来源2。这时候可以用该函数,取rank_num=1,按照优先级:来源1大于来源2,把符合要求的所有结果都取出来(每个A,B,对应若干条结果)。
五、时间函数
1)时间转化:unix_timestamp、from_unixtime联合使用,可以把yyyymmdd、yyyy/mm/dd转化成yyyy-mm-dd形式。
select from_unixtime(unix_timestamp('20211208','yyyymmdd'),'yyyy-mm-dd');
---2021-12-08
select from_unixtime(unix_timestamp('2021/12/08','yyyy/mm/dd'),'yyyy-mm-dd');
---2021-12-08
2)日期相减:datediff('yyyy-mm-dd‘,’yyyy-mm-dd')得到时间差,其他格式的不对。
select datediff('2021-12-08','2021-12-01');---7
select datediff('2021-12-01','2021-12-08');----:-7
select datediff('20211208','20211201');--NULL
select datediff('2021/12/01','2021/12/08');--NULL
3)hive获取今天的日期:from_unixtime(unix_timestamp(),'yyyyMMdd')
六、null与''
具体如何区分,暂时分不太清。后续写sql的过程中,尽量把这两种条件同时放进去。
七、left join ,inner join
1)A left join B,是把A的所有记录都提取出来,把B中与A重合的记录提取出来,不重合的部分记为NULL;A inner join B,是把A,B重合的记录提取出来;
2)小表left join 大表,还是大表left join 小表?
oracle
1.报错:输入值对于日期格式不够长。
解决方法:把涉及到日期的字段领出来,对于length(日期)<6的,处理下。
2.报错:无效字符。
解决方法:字段是数字,但是格式却是字符串类型。当用于比较数字大小时,需要用to_number(words_cnt)将字符型转化成数字型。注意:words_cnt本身必须都是数字,如果有null等字符会报错:无效字符。解决null即可。
hive和oracle常用函数汇总及报错解决方法总结相关推荐
- numpy 弧度函数arctan()计算报错解决方法
二维计算的时候没有问题,单行计算时出现报错. 下面是np1的值 AttributeError: 'numpy.float64' object has no attribute 'arctan' [ 0 ...
- oracle 归档日期,Oracle中归档日期满报错解决方法
最近在工作的时候操作数据库常会遇到这样的问题:"ORA-00257 archiver error. Connect internal only, until freed",百度搜了 ...
- sql导出oracle错误12154,Oracle导dmp文件ORA-12154报错解决方法
Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符解决方案 其实TNS无法解析是Oracle操作里经常遇到的问题,原因有二: (1)Oracle服务器没有装好(一般不 ...
- Oracle导dmp文件ORA-12154报错解决方法
Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符解决方案 其实TNS无法解析是Oracle操作里经常遇到的问题,原因有二: (1)Oracle服务器没有装好(一般不 ...
- Oracle常用函数汇总记录
Oracle常用函数汇总记录 一.SUBSTR 截取函数 用法:substr(字符串,截取开始位置,截取长度) //返回截取的字, 字符串的起始位置为1,截取时包含起始位置字符 1.SUBSTR( & ...
- Oracle中wm_concat函数报错解决方法
Oracle中wm_concat函数报错解决方法 参考文章: (1)Oracle中wm_concat函数报错解决方法 (2)https://www.cnblogs.com/52net/archive/ ...
- hive导出数据到本地文件报错解决方法
hive导出数据到本地文件报错解决方法 参考文章: (1)hive导出数据到本地文件报错解决方法 (2)https://www.cnblogs.com/yaopeiyun/p/12232251.htm ...
- VS使用scanf函数报错解决方法
VS使用scanf函数报错解决方法 首先来看一段很简单的C语言代码 #include<stdio.h> int main(void) {char s[10];scanf("%s& ...
- MSP430F435 c语言IAR编译软件报错解决方法笔记
IAR编译软件报错解决方法 1.问题一:堆栈溢出出现警告.已进入主函数就开始报警堆栈溢出. 报错原因:在主函数中定义了大量的大数组,看门狗已经关闭,但仍未完成数据初始化,导致堆栈溢出. 解决方法:定义 ...
- IDEA、MySQL提示Truncated incorrect DOUBLE value报错解决方法
IDEA.MySQL提示Truncated incorrect DOUBLE value报错解决方法 目录 IDEA.MySQL提示Truncated incorrect DOUBLE value报错 ...
最新文章
- pix4d计算机配置速度,ContextCapture、Pix4D电脑需求配置
- 项目经理的十二条规则
- CentOS 7环境安装Docker
- godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
- Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)
- fastjson转换时有大括号或者冒号或者有中括号_[Python Basic] 字符串处理以及类型转换 1...
- IE8,9下的ajax缓存问题
- 电脑主板资料库 03【转至www.ongood.com.tw】【FreeXploiT收集整理】
- 37.伪造参数错误的ICMP数据包
- 用户名枚举/邮箱轰炸攻击
- java ssh框架是什么_JAVA SSH框架介绍
- 异常:Handler sending message to a Handler on a dead thread
- iOS开发-简单图片背景替换 实现抠图效果
- 计算机连接网络被限制,电脑连接wifi出现网络受限的解决方法
- 海康摄像机3D PTZ功能,拍照功能
- 干货!让人一见钟情的网站header设计攻略
- 复习笔记:科学技术史
- php导入excel 进度条,.NET_进度条在.net导入Excel时的应用实例,本文实例讲述了进度条在.net导 - phpStudy...
- 安防厂商网络摄像机常用rtsp地址及端口
- matlab中匿名(Anonymous)函数及bsxfun函数