目录
一、各数据类型的基础知识点
1.1 数值类型
整数
小数
float
double(常用)
decimal(针对高精度)
1.2 日期类型
date
datetime
timestamp
time
year
1.3 字符串类型
char
varchar / varchar2
blob /text
tinyblob / tinytext
mediumblob / mediumtext
longblob / longtext
string(常用)
二、Hive中的常用函数
2.1 数值转换函数
round
取整
精度取整函数
floor(向下取整函数)
ceil(向上取整函数)
abs(绝对值函数)
rand(取随机数函数)
2.2 日期函数
from_unixtime(时间戳转日期函数)
unix_timestamp(日期转时间戳函数)
to_date(日期时间转日期函数)
year(日期转年函数)
month(日期转月函数)
day(日期转天函数)
hour(日期转小时函数)
minute(日期转分钟函数)
second(日期转秒函数)
weekofyear(日期转周函数)
datediff(日期比较函数)
date_add(日期增加函数)
date_sub
months_between
2.3 条件函数
if
coalesce() /nvl(非空函数)
case when
2.4 字符串函数
length(字符串长度函数)
reverse(字符串反转函数)
concat(字符串拼接函数)
concat_ws(带分隔符的字符串连接函数)
substr / substring(字符串截取函数)
upper (字符串转大写函数)
lower (字符串转小写函数)
trim(去空格函数)
regexp_replace(正则表达式的替换函数)
regexp_extract(正则表达式的解析函数)
get_json_object(json解析函数)
split(分割字符串函数)
explode(炸裂函数)
posexplode(炸裂函数,带有下角标pos)
2.5 聚合函数
count(个数统计函数)
sum(总和统计函数)
avg(平均值统计函数)
min(最小值统计函数)
max(最大值统计函数)
高级聚合函数
collect_list(多行变一行,不去重)
collect_set(多行变一行,去重)
2.6 开窗函数
聚合函数
前后函数
lag
lead
头尾函数
first_value
last_value
排名函数
int 代表整数(hive常用bigint): float代表小数,double代表双精度,double比float精度更高,小数位更多。
有符号(signed)的和无符号(unsigned)的。有符号的取值区间为-2147483648~2147483647,无符号的取值区间为0~ 4294967295。宽度最多为11个数字 -int(11)
有符号和无符号的。有符号的取值范围是-128~127, 无符号的取值范围是0~255。 宽度最多为4个数字 -tinyint(4)
有符号和无符号的。有符号的取值范围是-32767~32767 ,无符号的取值范围是0~65535。 宽度最多为4个数字 -tinyint(4)
有符号和无符号的。有符号的取值范围是-8388608~8388607 ,无符号的取值范围是0~16777215。 宽度最多为9个数字 -mediumint(9)
有符号的和无符号的。宽度最多为20个数字-bigint(20)
代表小数,默认是(10,2)
代表双精度,默认是(16,4)
比float精度更高,小数位更多,默认为(16,4)
代表 YYYY-MM-DD格式,例如:1989-12-31
代表 YYYYY-MM-DD HH:MM:SS 格式,例如:1989-12-31 15:30:00
代表 时间戳,例如:1989年12月31日下午15:30,在数据库中存储为:19891231153000
代表 HH:MM:SS格式
以2位或4位格式存储年份值
固定长度字符串(可以是汉字或字母),长度是1-255。如果内容小于指定长度,右边填充空格,如果不指定长度,默认是1。
可变字符串,长度取值是1-255。创建表使用该类型时必须指定长度。
最大长度65535,用于存储二进制大数据,如图片,无法指定长度。两者区别:blob类型对于大小写比较敏感。
最大长度是255,不能指定长度。
最大长度是16777215字符。
最大长度是429496295字符。
举例:
select unix_timestamp('2024-02-01 22:17:23') --> 1706825843
select unix_timestamp('20240201 20:17:11','yyyyMMdd HH:mm:ss') --> 1706825843
举例:
select months_between('2024-02-01','2024-01-01') --> 1
select months_between('2024-02-01','2024-01-11') --> 0.67741935
1.coalesce
coalesce函数语法是:coalesce(表达式1,表达式2.....表达式n); coalesce函数的返回结果是第一个非空表达式,如果全是空,则返回空。
coalesce函数的处理参数个数没有限制,使用时需要注意:对处理参数的数据类型有严格要求,所有表达式值是同一类型(转换成同一类型也可)。
2.nvl
nvl函数语法是:nvl(默认值,表达式); 如果默认值不为空返回默认值,如果默认值是空,则返回 表达式,如果两者都为空则返回空。
nvl函数的处理参数个数有限,只能传两个参数。使用时需注意:“默认值”,“表达式”的值的数据类型没有要求,可相同也可不同。
举例:
select case 100 when 500 then 'false'
when 100 then 'true'
else '?' end ; 最终的输出结果是:true
start 代表的是:截取起始的位置(从1 开始计数)
select substr( 'abcde' ,-1) --> e
select length(' absSedF ') ---> 10
举例:
select regexp_replace('foobasr' , 'oo|ar','') ----> fbasr
select regexp_replace('foobasr' , 'oo|ba','') --->fsr
ps:正则表达式中的 | 竖线代表的是:'或'的意思,其中有一个为true,那整体就是true
举例:
select regexp_extract('foothebar','foo(.*?)(bar)' ,0) ----> foo
select regexp_extract('foothebar','foo(.*?)(bar)' ,1)----> the
select regexp_extract('foothebar','foo(.*?)(bar)' ,2) ---> bar
上述代码,会将字符串 foothebar 拆分成 foor, the,bar; 对应的index 索引分别是:0,1,2
select split('adgncf','n') --> ["adg","cf"]
举例:
select student_score from test lateral_view explode(split(student_score,',')) sc as student_score
举例:
select student_name,
student_score
from test
lateral_view posexplode(split(student_name,',')) sn as student_name_index, student_name
laretal view posexplode(split(student_score,',')) sc as student_score_index,student_score
where student_name_index = student_score_index ;
ps: 炸裂函数的具体使用场景见文章:
HiveSQL题——数据炸裂和数据合并-CSDN博客文章浏览阅读711次,点赞17次,收藏11次。HiveSQL题——数据炸裂和数据合并https://blog.csdn.net/SHWAITME/article/details/135952216?spm=1001.2014.3001.5501
-- 总结:
1.count(*)操作时会统计null值,count(column)会过滤掉null值;
2.事实上除了count(*)计算,剩余的聚合函数例如: max(column),min(column),avg(column),count(column) 函数会过滤掉null值
-- 举例:
with tmp as (
select 'a' as test union all
select 'c' as test union all
select 's' as test union all
select 'd' as test
)
select collect_list(test) from tmp;
结果:["c","s","d","a"] ,可以看出:聚合后的数组元素无法保证顺序性
-- 举例:
with tmp as (
select 'a' as test union all
select 'c' as test union all
select 'a' as test union all
select 'd' as test
)
select collect_set(test) from tmp;
结果:["a","c","d"]
ps: 聚合函数的具体使用场景见文章:
HiveSQL题——聚合函数(sum/count/max/min/avg)-CSDN博客文章浏览阅读739次,点赞18次,收藏17次。HiveSQL题——聚合函数(sum/count/max/min/avg)https://blog.csdn.net/SHWAITME/article/details/135918264?spm=1001.2014.3001.5501
ps: 聚合函数的具体使用场景见文章:
HiveSQL题——聚合函数(sum/count/max/min/avg)-CSDN博客文章浏览阅读739次,点赞18次,收藏17次。HiveSQL题——聚合函数(sum/count/max/min/avg)https://blog.csdn.net/SHWAITME/article/details/135918264?spm=1001.2014.3001.5501
-- 取得column列前边的第n行数据,如果存在则返回,如果不存在,返回默认值default
lag(column,n,default) over(partition by order by)
-- 取得column列后边的第n行数据,如果存在则返回,如果不存在,返回默认值default
lead(column,n,default) over(partition by order by),
ps: 前后函数的具体使用场景见文章:
HiveSQL题——前后函数(lag/lead)-CSDN博客文章浏览阅读1.2k次,点赞23次,收藏21次。HiveSQL题——前后函数(lag/lead)https://blog.csdn.net/SHWAITME/article/details/135902998?spm=1001.2014.3001.5502
---当前窗口column列的第一个数值,如果有null值,则跳过
first_value(column,true) over (partition by ..order by.. 窗口子句)
---当前窗口column列的第一个数值,如果有null值,不跳过
first_value(column,false) over (partition by ..order by.. 窗口子句)
--- 当前窗口column列的最后一个数值,如果有null值,则跳过
last_value(column,true) over (partition by ..order by.. 窗口子句)
--- 当前窗口column列的最后一个数值,如果有null值,不跳过
last_value(column,false) over (partition by ..order by.. 窗口子句)
row_number() over(partition by .. order by .. ) 顺序排序(行号)——1、2、3
rank() over(partition by .. order by .. ) 并列排序,跳过重复序号——1、1、3
dense_rank() over(partition by .. order by .. ) 并列排序,不跳过重复序号——1、1、2
ps:排序函数的具体使用场景见文章:
HiveSQL题——排序函数(row_number/rank/dense_rank)-CSDN博客文章浏览阅读934次,点赞20次,收藏15次。HiveSQL题——排序函数(row_number/rank/dense_rank)https://blog.csdn.net/SHWAITME/article/details/135909662?spm=1001.2014.3001.5501