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常用函数汇总及报错解决方法总结相关推荐

  1. numpy 弧度函数arctan()计算报错解决方法

    二维计算的时候没有问题,单行计算时出现报错. 下面是np1的值 AttributeError: 'numpy.float64' object has no attribute 'arctan' [ 0 ...

  2. oracle 归档日期,Oracle中归档日期满报错解决方法

    最近在工作的时候操作数据库常会遇到这样的问题:"ORA-00257 archiver error. Connect internal only, until freed",百度搜了 ...

  3. sql导出oracle错误12154,Oracle导dmp文件ORA-12154报错解决方法

    Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符解决方案 其实TNS无法解析是Oracle操作里经常遇到的问题,原因有二: (1)Oracle服务器没有装好(一般不 ...

  4. Oracle导dmp文件ORA-12154报错解决方法

    Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符解决方案 其实TNS无法解析是Oracle操作里经常遇到的问题,原因有二: (1)Oracle服务器没有装好(一般不 ...

  5. Oracle常用函数汇总记录

    Oracle常用函数汇总记录 一.SUBSTR 截取函数 用法:substr(字符串,截取开始位置,截取长度) //返回截取的字, 字符串的起始位置为1,截取时包含起始位置字符 1.SUBSTR( & ...

  6. Oracle中wm_concat函数报错解决方法

    Oracle中wm_concat函数报错解决方法 参考文章: (1)Oracle中wm_concat函数报错解决方法 (2)https://www.cnblogs.com/52net/archive/ ...

  7. hive导出数据到本地文件报错解决方法

    hive导出数据到本地文件报错解决方法 参考文章: (1)hive导出数据到本地文件报错解决方法 (2)https://www.cnblogs.com/yaopeiyun/p/12232251.htm ...

  8. VS使用scanf函数报错解决方法

    VS使用scanf函数报错解决方法 首先来看一段很简单的C语言代码 #include<stdio.h> int main(void) {char s[10];scanf("%s& ...

  9. MSP430F435 c语言IAR编译软件报错解决方法笔记

    IAR编译软件报错解决方法 1.问题一:堆栈溢出出现警告.已进入主函数就开始报警堆栈溢出. 报错原因:在主函数中定义了大量的大数组,看门狗已经关闭,但仍未完成数据初始化,导致堆栈溢出. 解决方法:定义 ...

  10. IDEA、MySQL提示Truncated incorrect DOUBLE value报错解决方法

    IDEA.MySQL提示Truncated incorrect DOUBLE value报错解决方法 目录 IDEA.MySQL提示Truncated incorrect DOUBLE value报错 ...

最新文章

  1. pix4d计算机配置速度,ContextCapture、Pix4D电脑需求配置
  2. 项目经理的十二条规则
  3. CentOS 7环境安装Docker
  4. godaddy 管理mysql_在godaddy上使用MySQL和Entity Framework的安全例...
  5. Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)
  6. fastjson转换时有大括号或者冒号或者有中括号_[Python Basic] 字符串处理以及类型转换 1...
  7. IE8,9下的ajax缓存问题
  8. 电脑主板资料库 03【转至www.ongood.com.tw】【FreeXploiT收集整理】
  9. 37.伪造参数错误的ICMP数据包
  10. 用户名枚举/邮箱轰炸攻击
  11. java ssh框架是什么_JAVA SSH框架介绍
  12. 异常:Handler sending message to a Handler on a dead thread
  13. iOS开发-简单图片背景替换 实现抠图效果
  14. 计算机连接网络被限制,电脑连接wifi出现网络受限的解决方法
  15. 海康摄像机3D PTZ功能,拍照功能
  16. 干货!让人一见钟情的网站header设计攻略
  17. 复习笔记:科学技术史
  18. php导入excel 进度条,.NET_进度条在.net导入Excel时的应用实例,本文实例讲述了进度条在.net导 - phpStudy...
  19. 安防厂商网络摄像机常用rtsp地址及端口
  20. matlab中匿名(Anonymous)函数及bsxfun函数

热门文章

  1. 分类:基于规则的分类技术
  2. 【产品】 产品设计:工业设计(ID设计)系列软件介绍:平面设计、建模和3D渲染
  3. YYKit之YYText
  4. YYKit-YYModel分析
  5. C#EXE 文件中 嵌入dll文件
  6. Oracle | 彻底的卸载干净oracle 11g
  7. php物料编码生成器,物料编码生成器下载|
  8. 利用pandas处理二级office的Excel试题(一)
  9. linux微软雅黑字体库_Debian系统中安装微软雅黑字体的教程
  10. 贪吃蛇-单机游戏-微信小程序项目开发流程详解