hive的窗口函数详解 DW(数仓)和RDBS的行转列,列转行总结

Hive中使用over()实现累积求滑动求 1.累积求 实现累积求,使用sum()函数配合over()来实现,具体的实现语法如下: sum(需要求) over(partition by 分组 order by 排序 asc/desc) 阅读详情

1.1 hive窗口函数

窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行),这个数据窗口大小可能会随着行的变化而变化.

窗口函数和聚合函数区别?

窗口函数对于每个组返回多行,组内每一行对应返回一行值.

聚合函数对于每个组只返回一行.

1.1.1在日常的开发中常用哪些类型函数

1.字符串操操作函数: split, concat

1.字符串连接函数: concat

语法:concat(string A, string B)

返回值:string

说明:返回输入字符串连接后的结果,支持任意个输入字符串

举例:

hive>select concat('abc', 'def', 'gh');

abcdefgh

2.字符串截取函数:substr, substring

语法:substr(string A, int start), substring(string A, int start)

返回值:string

说明:返回字符串A从start位置到结尾的字符串

举例:

hive>select substr('abcde', 3);

cde

hive>select substring('abcde', 3);

cde

hive> select substr('abcde', -1);

e

语法: substr(string A, int start, int len),substring(string A, int start, int len)

返回值: string

说明:返回字符串A从start位置开始,长度为len的字符串

举例:

hive> select substr('abcde',3,2) from lxw_dual;

cd

hive> select substring('abcde',3,2) from lxw_dual;

cd

hive>select substring('abcde',-2,2) from lxw_dual;

de

3.正则表达式替换函数:regexp_replace

语法:regexp_replace(stringA, stringB, stringC);

说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。

举例:

hive> select  regexp_replace('foobar', '00|ar', '');

fb

--将所有的点去掉
select regexp_replace(url,'\\.',''); 需要转义

4.分割字符串函数:split

语法: split(string str, string pat)

返回值:array

说明:按照pat字符串分割str,会返回分割后的字符串数组

举例:

hive> select split('abctcdtef', 't');

["abc","cd","ef"]

--数据url
www.itcast.cn
www.heima.com
www.itcast.com.cn

--将所有名字中包含itcast的域名过滤出来
select url from table where instr(url,'itcast') > 0;

instr: 返回这个子串再字符串中的下标位置

coalesce:返回第一个非空的值,coalesce(null,null,‘null’, 1)

对员工表中的员工奖金进行判断,如果奖金为null就显示为0,如果奖金不为null,就显示原来的值

select coalesce(奖金,0) from emp;

2.聚合函数: hive适用于分析,所以常用

3.日期函数:数仓的特征随时间变化而变化,所以时间也特别多

1.时间戳转日期函数: from_unixtime

语法: from_unixtime(bigint unixtime[, string format])

返回值: string

说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式

举例:hive> select from_unixtime(1323308943,'yyyyMMdd')

20111208

2. 获取当前UNIX时间戳函数: unix_timestamp

语法:unix_timestmp()

返回值:bigint

说明:获取当前时区的UNIX 时间戳,也可以将时间日期转换成时间戳

举例:

hive>select unix_timestmp();\\\获取当前时间戳

1323309615

hive>select unix_timestmp("2011-12-07 13:01:03");\\将时间日期转换成时间戳

1323234063

3. 日期时间转日期函数: to_date

语法:to_date(string timestamp)

返回值: string

说明:返回日期时间字段中的日期部分

举例:

hive> select to_date('2011-12-08 10:03:01');

2011-12-08

year month day hour minute second  weekofyear

4.日期比较函数:datediff

语法:datediff(string endate, string startdate)

返回值:int

说明:返回结束日期减去开始日期的天数

举例:

hive>select datediff('2012-12-08','2012-05-09');

结果相差 218天

5.日期增加函数:date_add

语法:date_add(string,startdate, int days)

返回值:string

说明:返回开始日期startdate增加days天后的日期

举例:

hive>select date_add('2012-12-08', 10);

2012-12-18

6.日期减少函数:date_sub

语法:date_sub(string startdate, int days)

返回值:string

说明:返回开始日期startdate减少days天后的日期

举例:

hive>select date_sub('2012-12-08', 10);

2012-11-28

current_date:获取今天的日期

trunc: 取今年第一天

last_day: 取这个月的最后一天

获取二月的最后一天  select last_day(date_add(trunc(current_date(), 'YY'), 31));

将 29/Aug/2021 12:30:00转换成yyyy-MM-dd HH:mm:ss
select  from_unixtime(unix_timestmp('29/Aug/2021 12:30:00', 'dd/MM/yyyy HH:mm:ss), yyyy-MM-dd HH:mm:ss);

4.窗口函数:sum() over(), count() over(),排名函数

1.1.2了解哪些窗口函数,都是什么意思

sum(col) over() : 分组对col累计求和,over() 中的语法如下

count(col) over() : 分组对col累计, over中的语法如下

min(col)  over() : 分组对col求最小

max(col)  over() : 分组对col求最大值

avg(col) over() : 分组求col列的平均值

first_value (col) over() : 某分区排序后的第一个col值

last_value(col) over() : 某分区排序后的最后一个col值

lag(col, n, DEFAULT) :统计往前n行的col值, n可选, 默认为1, DEFAULT往上第n行为NULL时,取默认值,如不指定,则为NULL

lead(col, n, DEFAULT):统计往后n行的col值, n可选, 默认为1, DEFAULT往下第n行为NULL时,取默认值,如不指定,则为NULL

ntile(n) : 用于将分组数据按照顺序切分成n片, 返回当前切片值, n必须为int类型

---------------

排名函数:

row_number() over()  :  排名函数,不会重复,适合用于生成主键或者不并列排名

rank() over () : 排名函数, 有并列名次, 名次不连续. 如: 1, 1, 3

dense_rank() over() : 排名行数, 有并列名次, 名次连续. 如:1, 1, 2

ntile:(N) over(partition by  order by ) as rn 将分区等分成 N份 同一批次的返回值rn值相等 

Hive】 关于开窗函数over()的理解 一、引言 我们都知道在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数. 二、over() 开窗函数 over() 用于指定分析函数工作的数据窗口大小。 假设有如下数据: -- 字段名为name,odate,cost, 导入以下数据 jack,2015-01-01,10 jack,2015-01-01,10 ton 阅读详情

相关推荐

Hive 数仓工具(5) 行转列 转行 字符串拼接 窗口函数 数字编号函数 案例

行转列函数 实现字符串拼接 concat() concat_ws(参数1(分隔符), str1, str2) 可指定分隔符 select concat(“haha”, “–”, “ll”, “–”, “tom”); select concat(ename) from tb_emp; (函数是每行执行一次) select concat(ename, “:”, job) from tb_emp; select concat_ws ("_", “tom”, “cate”, “jim”) cast(变量 AS

湖中屋的博客 779

关系数据库系统RDBS

Structured Query Language 结构化查询语言 关系模型的完整性约束 ——(Integrity Constraints,ICs)

数仓工具—Hive语法之窗口函数中的 case when

selectfromshop2我们可以看到null 排在了最前面selectfromshop2窗口函数中的 case when,可以放在不同的地方,总结下来就三处窗口函数前面窗口函数参数重窗口函数定义中。

1万+

Redis缓存击穿、穿透、雪崩解决方案

1、缓存处理流程 接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从DB中查询,将查询的结果更新到缓存中,并返回查询结果,若DB中查不到,则返回空数据 缓存处理流程.png 2、缓存穿透 当缓存与数据库中都不存在该数据时,由于当数据库查询不到数据就不会写入缓存,这个时候如果用户不断的恶意发起请求,就会导致这个不存在的数据每次请求都会查询DB,请...

hefy780144的博客 4414

数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)

数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象. 除了基本的数字之外、像图书的名称、价格、作者都可以称为数据. 将多种数据记录成一张表.通过数据表管理数据. 每一行的数据成为记录(recorder),每一的内容叫做字段(field) 每一都有自己的数据类型. 数据库Database...

weixin_30262255的博客 838

狂神说Redis学习 ( 在学习 )

狂神聊Redis 狂胜Redis课程安排: nosql 讲解 阿里巴巴架构演进 nosql 数据模型 Nosql 数据分类 CAP BASE Redis入门 Redis安装(Windows & Linux) 服务器 五大基本数据类型 String List Set Hash Zset 三种特殊数据类型 geo hyperloglog Redis 配置详解 Redis 持久化 RDP AOF Redis 事务操作 R.

weixin_47614770的博客 2813

数据库基础

一. 数据库基础概念 1、数据(Data):是描述事物的符号记录,它具有多种表现形式,如文字、图形、图像、声音语言等。 2、数据库系统(DBS):是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,从而方便多用户访问的计算机系统。 3、数据库(DB):是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。 4、数据库管理系统(DBMS):是数据库系统的核心软件,是由一组相互关联的数据集合一组用以访问这些数

武天旭的博客 1225

认识Redis()初识Redis

什么是Redis REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), (list), 集合(sets) 有序集合(sorted sets)等类型。 认

duguboxia的博客 279

DW(数仓)RDBS行转列转行总结

想了解更多内容,请关注我的vx公众号:大数据分享200

m0_61038164的博客 3095

关系型数据库非关系型数据及其区别

关系型数据库非关系型数据及其区别 关系型数据库 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读...

weixin_41563161的博客 2710

大数据基础-数据仓库-04】常用窗口函数考察

浅谈hive常用窗口函数 目录 浅谈hive常用窗口函数 简介 常用窗口函数 over SUM,AVG,MIN,MAX 简介 窗口函数又名开窗函数,属于分析函数的一种,用于解决复杂报表统计需求的功能强大的函数。窗口函数用来计算基于组的某种聚合值,它聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。 常用窗口函数 over over() 通常与聚合函数共同使用,比如 coun

liu82327114的博客 758

Hive三个内置date函数:datediff、date_sub、date_add用法

目录 1. datediff('endTime',‘startTime’) 2. date_sub(‘yyyy-MM-dd’,n/-m) 3. date_add('yyyy-MM-dd',n/-m) ps:三个date函数日期均只能为'yyyy-MM-dd'格式 & 'yyyy-MM-dd HH:mm:s'格式 1. datediff('endTime',‘startTime’)...

攻城狮Kevin 3万+

数仓知识04:行转列转行的含义及SQL示例

在构建数仓或做数据分析时,需要对原始数据的结构进行一定的处理,有时涉及到“行转列”,有时涉及到“转行”,那么这两个转换的方式具体是什么,有什么差异,今天给大家做一下讲解。

维克先生的博客 2455

hive开窗函数 sum() over()

求有多少个数 sum(1) count(*) select sum(1) from table; 求有多少个满足某个条件的个数 sum(if(2>1,0,1)) count( if(2>1,0,1))(此处的条件就是我们认为的事件) 求本组有多少个满足某个条件的个数 sum(if(2>1,0,1))over(partition by user_id) 求本组截止到当前行有多少个满足某个条件的个数 sum(if(2>1,0,1))over(p...

时间(实践)是检验真理的唯一标准 1280

hive常用的时间函数

1、获取当前时间的毫秒值 select unix_timestamp(); 2、获取当前时间 select from_unixtime(unix_timestamp()); 3、获取当前时间年月日 select to_date(from_unixtime(unix_timestamp())); ...

滴水穿石的启示 1183

DW数据窗口常用技巧

1、如何让存储文件目录的,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何设置的DW底色?在DW的editsourc

mphoebus的专栏 3217

超分辨率-RDN

一、简介 RDN——Residual Dense Network—— 残差深度网络 RDN是基于深度学习的超分方法之一 二、结构 RDN网络结构分为4个部分: 1、SFENet(Shallow Feature Extraction Net, 浅层特征提取网络) 2、RDBs( Residual Dense Blocks, 残差稠密块) 3、DFF(Dense Feature Fusion, 稠密特...

Never let it go. 8608

freebase使用总结

近来公司要从freebase上引用部分数据,所以让我来处理,分析看看那些数据有帮助,并且怎么获取数据。因此花了几天的时间就耗在此上了。什么是freebase?也许听说过wikipedia的人很多,但听说过freebase的就不那么多了。freebase是一个wikipedia差不多的东西,这样说可能有点不合适,但此处我的切入点是针对它们之间的结构化数据来说的。它们二者都是提供了大量的结构化数

cangyingzhijia的专栏 1万+
上一篇: Flink 基础知识
下一篇: Flink SQL
awonima
博客等级 码龄4年 0粉丝 4原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值