技术标签: hive 数据仓库 # Hadoop生态 hadoop 大数据
目录
Hive支持count(),max(),min(),avg()等常用的聚合函数。
支持 =, !=, <>, < , >, <= , >, >=
空值判断:is null, is not null.
relike, regexp操作。
支持所有的数值类型: + , - , * , /, % ,& , | , ^, ~等。
逻辑与: and
逻辑或: or
逻辑非: not
取整函数: round()
round(double a) 返回值bigint,返回double类型的整数值部门(遵循四舍五入)
指定精度取整函数
round(double a, int d) 返回值double。返回指定指定精度d的double类型。
向下取整函数
floor(double a )返回等于或者大于该double变量的最小的整数。
向上取整函数
ceil(double a) 返回等于或者大于该double 变量的最小的整数;
取随机函数
rand(), rand(int seed):返回一个0到1范围内的随机数。
自然指数函数
exp(): 返回自然对数e的a次方。
幂运算函数
pow(double a, double p): 返回a的p次幂。
开平方函数
sqrt(double a): 返回a的平方根。
if函数
if(boolean testCondition,T valueTrue, T valueFalseOrNull)
当条件testCondition为True时候,返回valueTrue,否则返回valueFalseOrNull
非空查找函数coalesce
coalesce(T v1, T v2,.....)
返回参数中第一个非空值,如果所有值都为null,那么返回Null。
条件判断函数case when
case when写法一:
case sex
when ‘1’ then ‘男’
when ‘2’ then ‘女’
else ‘其他’ end
case when写法二:
case when sex = ‘1’ then ‘男’
when sex = ‘2’ then ‘女’
else ‘其他’ end
1.unix_timestamp函数的三种情况:
获取当前时间戳函数: unix_timestamp
语法:unix_timestamp();
返回值:bigint ,获得当前时区的unix时间戳
样例:select unix_timestamp() from table;
日期转unix时间戳函数:unit_timestamp
语法:unix_timestamp(String date)
返回值:bigint
说明:将格式为”yyyy-MM-dd HH:ss”的日期转换到unix时间戳,如果转换失败,则返回0.
将指定格式日期转unix时间戳函数:unix_timestamp()
语法:unix_timestamp(string date, string pattern)
返回值:bigint
说明:转换pattern格式日期到unix时间戳。如果转化失败,则返回0.
样例:select unix_timestamp(‘2021-03-08 14:21:11’,’yyyy-MM-dd HH:mm:ss’) from table
2.unit时间戳转日期函数: from_unixtime
from_unixtime()
语法:from_unixtime(bigint unixtime)
返回值:string
说明:把具体的秒转化为时间日期。
3.获取当前的时间精确到毫秒
current_timestamp()
样例:select current_timestamp() -- 2011-09-02 10:11:09.234212000
4.日期时间转日期函数:to_date
年月日时分秒只取其中的年月日部分:to_date()
语法:to_date(string timestamp)
返回值:string 返回日期时间部分的日期。
样例:select to_date(‘2021-09-02 12:09:09’) from table
5.日期转年/月/日/小时/分钟/秒/周函数
日期转年函数year()
语法:year(String date)
返回值:int 返回日期中的年
样例:select year(‘2021-03-21 10:11:02’) from table
日期转月函数mounth
返回日期中的月
日期转天函数day
返回日期中的天
日期转小时函数:hour
返回日期中小时函数
日期转分钟函数minute
返回日期中的分钟
日期转秒函数second
返回日期中的秒
日期转周函数 weekofyear
weekofyear(string date)
返回值为int,返回日期在当前的周数
6.日期操作函数
日期比较函数:datediff
语法:datediff(string enddate, string startdate)
返回值:int 返回结束日期减去开始日期
日期增加函数 :date_add
语法:date_add(string startdate, int days)
返回值string,返回开始日期startdate增加days天的日期。
日期减少函数 date_sub
语法:date_sub(string startdate, int days)
返回值:string. 返回开始日期startdate减少days天后的日期。
字符串长度函数: length()
length(string a): 返回字符串a的长度
字符串反转函数:reverse
reverse(string a) :返回字符串a的反转结果
字符串连接函数
不带分隔符的字符串连接函数concat()
语法:concat(string A, string B,........)
返回输入字符串连接后的结果,支持任意个输入字符串
带分隔符字符串连接函数 concat_ws()
concat_ws(String SEP, string a, string b)
返回输入字符串连接后的结果,sep表示各个字符串之间的分隔符。
substr(string a, int start, int len)
返回字符串a从start位置开始,长度为len的字符串。
substring(string a, int start, int len)
返回字符串a从start位置开始,长度为len的字符串。
字符串分割函数:split
语法:split(string str, string pat)
去空格函数trim
去掉字符串两边的空格
左边去空格ltrim
ltrim(string a) 去掉字符串左边的空格。
右边去空格函数
rtrim(string a)去掉字符串右边的空格。
正则表达式替换函数regexp_replace(string a, string b, string c)
将字符串a中符合java正则表达式b的部分替换为c.注意在有些情况下需要使用转义字符.
样例:select regexp_replace(‘foobar’, ‘oo|ar’ , ‘’) from table_Name;
正则表达式解析函数:regexp_extract(string subject, string pattern, int index)
样例:select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from tableName;
将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
url解析函数: parse_url
样例:parse_url(string urlString, string partToExtract [, string keyToExtract] )
说明:返回url中指定的部分。
json解析:get_json_object()
语法:get_json_object(string json_string, string path)
样例:select get_json_object(‘{......}’, ‘$.owner’) from tableName;
todo:结合百度需求进行总结
1.行转列
concat(string a/col, string b/col,.....):返回输入字符串连接后的结果,支持任意个输入字符串。
concat_ws(separator, str1, str2,....):它是一个特殊形式的concat
collect_set(col):将某字段的值进行去重汇总,产生array类型字段。
2.列转行
explode(col)
将hive一列中复杂的array或者map结构拆成多行。可以结合lateral view进行使用。
在sql中有一类函数叫做聚合函数,例如sum(), avg(),max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲,聚集后的行数是要少于聚集前的行数的。但是有时候我们既想要显示聚集前的数据,又要显示聚集后的函数,这个时候,我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数.
窗口函数最重要的关键字是partition by和 order by.具体语法是:over(partition by 用于分组的列名 order by 用于排序的列名)。
1)如果不指定rows between,默认为从起点到当前行;
2)如果不指定order by,则将分组内所有值累加;
3)理解rows between的含义,也叫window子句:
preceding:往前;
following:往后;
current row: 当前行;
unbounded:起点;
unbounded preceding : 表示从前面的起点;
unbounded following : 表示到后面的终点;
1)专用窗口函数:包括dense_rank(),rank(),row_number()等。
2)聚合函数:例如sum(), avg(),max(),min(),count().
样例1:
select *,
sum(play_rate) over(order by user_id),
avg(play_rate) over(order by user_id),
max(play_rate) over(order by user_id),
min(play_rate) over(order by user_id),
count(play_rate) over(order by user_id)
from haokan_ads_test02;
样例1测试结果:
样例1分析:
聚合函数在窗口函数中,是对自身记录及位于自身记录以上的数据进行求和的结果。eg:user_id为4的时候,在使用sum()窗口函数后的结果,是对1,2,3,4号deplat_rate求和。
注意1:可以注意到专用窗口函数括号里面是空的,什么也没有写,但是聚合函数后面括号不能为空,需要指定聚合的列名。
注意2:因为窗口函数是对where或者group by子句处理后的结果进行的操作,所以窗口函数原则上只能写在select子句中。
注意3:聚合函数对应的窗口函数都是对自身记录,以及自身记录之上的所有数据进行计算。如果想看所有人的聚合情况,我们直接看输出结果的最后一行即可。
1)为什么叫窗口函数:这是因为partition by分组以后的结果叫做窗口,这里的窗口是范围的意思。窗口函数同时具有分组和排序的功能;不减少原有表的行数
2)带partition by使用区别:
窗口函数中的partition by子句可以省去,但是此时就失去了分组的功能。
窗口函数一般用于排名问题和top-N问题。
3)dense_rank(),rank(),row_number()区别
DENSE_RANK() :排序相同时,会重复、总数会减少。1,1,2
Rank() :排序相同时,会重复,但是总数不会变。 1,1,3
ROW_NUMBER(): 会根据顺序计算。1,2,3
group by分组汇总会改变行数(默认返回每组中的第一行);而窗口函数不会减少原表中的行数。
ntile;
lag:
lag(col,n,default)用于统计窗口内往上第n行值;第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为null时候,取默认值,如果不指定,则为null)
lead:
与lag相反。lead(col,n, default)用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行,第三个参数为默认值。
first_value
取分组内排序后,截止到当前行,第一个值。
last_value:
取分组内排序后,截止到当前行,最后一个值。
grouping sets
grouping_id
cube
rollup
cast (字段名 as 转换的类型)
文章浏览阅读4.3k次,点赞5次,收藏63次。目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。计算机视觉中关于图像识别有四大类任务:(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。_object detection
文章浏览阅读5.4k次,点赞2次,收藏20次。ONVIF Discovery 协议介绍
文章浏览阅读54次。题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1172题目概述: 对于每组数据,先给出一个n,然后n行每行一个四位数,然后两个数b,c表示与答案有b个数相同,c个数在同一位置上,对于所有的n个给出的四位数,如果推出的答案唯一则输出,否则输出“Not sure”(不含引号)大致思路: 首先我想的是用搜索。穷极一生之力写了100+行的...
文章浏览阅读2w次,点赞6次,收藏37次。刚工作时候第一次看到接触到视图,感觉很不能理解,我当时就在想为什么要用视图呢?明明可以关联表查出来数据的,为什么又单独创建一个视图查询数据呢?工作久了我有以下几点心得分享给大家.1.安全性 因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,视图中数据是根据基表的更新而更新,用户不可以更改/删除视图。2.方便,简化数据操作当我们业务需求要查出多张表的数据,这时我们可能会关联多张表查询处理.如..._哪种情况更适合建立视图
文章浏览阅读643次,点赞4次,收藏6次。Anaconda的安装及基本概念Anaconda中通过conda进行python包的管理Anaconda中通过conda进行虚拟环境的管理为形成良好的编程习惯,为每一个项目单独创建一个虚拟环境对开发来说至关重要。这一习惯即使对非数据data项目(如Web App)也能十分有效的帮助管理开发环境。_anaconda csdn
文章浏览阅读6.4k次。 软件缺陷的描述是是软件缺陷报告的基础部分,也是测试人员就一个软件问题与开发小组交流的最初且最好的机会。一个好的描述,需要使用简单的、准确的、专业的语言来抓住缺陷的本质。否则,它就会使信息含糊不清,可能会误导开发人员。准确报告软件缺陷是非常重要的,因为: 清晰准确的软件缺陷描述可以减少软件缺陷从开发人员返回的数量 提高软件缺陷修复的速度,使每一个小组能够有效的_描述缺陷发生的可能性的是
文章浏览阅读4.6k次。Unity 已经在Package Manager中集合了很多实用的插件,比如这里用到的FBX Exporter.也可以在你的 Hierarchy窗口中,选择你要到处的Prefab,右击选择Export To FBX...在Unity的菜单中Window ----> Package Manager,打开包管理界面。导出完成后,打开你的的导出目录,就可以看到导出的fbx了。选中你需要导出的文件 ,就可以直接导出FBX文件了,这里注意导出名字和导出路径,和选项里的导出格式。_unity fbx exporter
文章浏览阅读1.3k次。idea卸载Material Theme UI后,git配色无法恢复。解决办法:一个一个地点回来(restore default)。_idea material theme ui 卸载
文章浏览阅读1k次。最近在做appStore时,涉及到一个第三方app下载视频后将车机存储撑爆的问题,从而影响到我们车机自带的app使用,问题很是严重,于是就需要提供缓存清理以及垃圾清理的功能,当用户使用第三方app时,存储空间达到一定量的时候会提示用户去清理,否则不允许使用第三方app。缓存获取获取各个应用程序的缓存大小,可以通过使用PackageManager.getPackageSizeInfo方法来获取,但是..._android packageinstaller缓存数据很大
文章浏览阅读1.8w次。vue给对象动态添加属性和值一、背景介绍:在vue中请求接口中,一个请求方法可能对应后台两个请求接口,所以请求参数就会有所不同。需要我们先设置共同的参数,然后根据条件动态添加参数属性。二、案例let that = this; let params = { "type":that.addQueTab..._vue3 键值对动态添加与获取
文章浏览阅读3.1w次,点赞55次,收藏16次。http://www.51hei.com/bbs/dpj-25003-1.html这里参考了这个帖子,在我身上发生的问题就是我在声明一个函数的时候忘记加分号了,会报错特别多奇奇怪怪的东西,吓死我了。解决办法就是加上分号就好了..._main.c(34): error c132: 'lcd1602_busycheck': not in formal parameter list
文章浏览阅读1.2k次。今天帮助哥们解决了一个比较蛋疼的问题,就是在有的情况下会出现设置activity的windowSoftInputMode="adjustResize"时,会失效的情况。历尽千辛万苦,终于在stackflow上找到解决方法。在activity的根布局上添加fitsSystemWindows="true".然后adjustResize就可以成功的起作用了。但是在这种情况下,你的titlebar会下移s..._adjustresize