大数据之-HIVE入门(十七)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之-HIVE入门(十七)相关的知识,希望对你有一定的参考价值。

参考技术A 前面我们一起学习了with cube等多维分析语法,细心的你可能会发现,通过数据魔方查询出来的维度数据除了用grouping_id可以区分出当条记录的维度信息。如果不用grouping_id区分那么在维度表现上看无维度的数据默认都会被置为null(空值)。假如恰巧维度数据中本身就有空值那么查询的结果就会变得混乱。那么怎么解决这个问题呢?

1.确定维度为空值的的记录无效的话,可以在查询条件中过滤掉这些数据。

2. 利用空值处理函数,将空值转换成特殊值。

下面介绍一下空值的判断与处理函数:

NVL用法: nvl(expr1,expr2) 如果表达式1不为null返回表达式1的值,如果为空,则返回表达式2值。一般表达式2设为了下缺省值 如:select nvl(status,0)

Coalesce用法:coalesce(expr1,expr2,expr3,.....) 返回第一个不为null的值,可以说是nvl升级版,它可以有多个表达式。为了保证不为空,最后一个表达式最好写一个缺省值。

isnull用法:isnull(expr1) 判断表达式是否为空值,返回布尔类型true或false。判空函数,当然不用它也可以比如 tbl.status is null 或 tbl.status is not null 这样写来判断是空还是非空。

IF用法: if(booleanexpr,expr1,expr2) ,布尔表达式为true 返回 expr1,否则返回expr2。if函数除了处理空值外,还可以对字段进行逻辑加工。

NULLIF用法 nullif(expr1,expr2) ,如果表达式1=表达式2 返回null 否则返回表达式1

利用上面的函数可以对多维分析中的原始维度值的空值进行了处理,假设我们又不用grouping_id列,用来来区分维度,那么多维分析中产生的维度空值要怎么处理才能方便后续用于报表展现呢?

一种方法就是把cube多维度查询产生的null用上面的函数转换成一些固定的值,如'all'、 -1、-9999等和原始维度值无冲突的值,方便前端报表查询时将无条件的数据用-1、-9999或者'all'之类的进行查询和替换。

大数据之-HIVE入门(二十)

参考技术A 以上基础统计函数,除了常规的功能外,它还有一个开窗的用法:

over(partition by col order by col asc|desc window_ specification ):

partition by :指定分组字段。

order by : 指定排序顺序。

window specification:指定行的计算范围,可选,不指定默认是从行首到当前行。

窗口规范语法如下:

以sum over为例,通过开窗功能,它可以实现累计求和滑动窗口求和功能。

假如我们要计算当月每个人截至到当天从月初累计到现在的收入总和。传统的方法是计算每天的从月初到当天的汇总,生成子查询或中间表,再用中间表关联上用户每天的汇总数据,来计算占比等数据指标。

同理count over 可以实现累计计数和滑动记数功能;min over 、max over可以实现求累计求最小最大值和滑动窗口的最小最大值功能;avg over可以求实现累计平均和滑动平均数功能。就不一一举例了。

以上是关于大数据之-HIVE入门(十七)的主要内容,如果未能解决你的问题,请参考以下文章

打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>

大数据之-HIVE入门(十四)

大数据之-HIVE入门(二十)

大数据之-HIVE入门(十六)

大数据之-HIVE入门(十二)

大数据技术之 Hive (小白入门)