1.用过UDF吗(三种)吗?还会问udf,udaf,udtf的区别
用户定义函数(user-defined function)UDF
UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。 返回对应值,一对一
自定义: 1.导入hive 自定义jar包 2.继承UDF借口 3.实现evaluate方法
用户定义聚集函数(user-defined aggregate function)UDAF
UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。 返回聚类值,多对一
自定义: 1.继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF,实现initialize, process, close三个方法。 2. UDTF首先会调用initialize方法,此方法返回UDTF的返回行的信息加粗样式(返回个数,类型) 3. 初始化完成后,会调用process方法,真正的处理过程在process函数中,在process中,每一次forward()调用产生一行;如果产生多列可以将多个列的值放在一个数组中,然后将该数组传入到forward()函数。 4. 最后close()方法调用,对需要清理的方法进行清理。
用户定义表生成函数(user-defined table-generating function ) UDTF
UDTF 操作作用于单个数据行,并且产生多个数据行——-一个表作为输出。lateral view explore() 。 返回拆分值,一对多
2.事实,维度,指标的概念
指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量。例如:人口数、GDP、收入、用户数、利润率、留存率、覆盖率等。很多公司都有自己的KPI指标体系,就是通过几个关键指标来衡量公司业务运营情况的好坏。
维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实” 将环境描述为“维度”,维度是用于分析事实所需要的多样环境。例如, 在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易 发生的环境。 维度所包含的表示维度的列,称为维度属性。维度属性是查询约束 条件、分组和报表标签生成的基本来源,是数据易用性的关键。例如, 在查询请求中,获取某类目的商品、正常状态的商品等,是通过约束商 品类目属性和商品状态属性来实现的;统计淘宝不同商品类目的每日成 交金额,是通过商品维度的类目属性进行分组的;我们在报表中看到的 类目、 BC 类型( 指天猫, 指集市)等,都是维度属性。所以维度 的作用一般是查询约束、分类汇总以及排序等。
SQL题
1.每个班级 每个同学的平均分

select
class,uid
avg(fenshu)
(
select
uid,
class,
scores,
split(score,'_')[0] as kemu,
cast(split(score,'_')[1] as double) as fenshu,
from
(
select
uid,
class,
scores,
explode(scores) as score
from
score
) t1
) t2
group by class ,uid ;
2.非北京市的学生中,每个班级 平均分最高的TO10用户及信息
class, uid, avg_score, scores,province

select
class,
t3.uid as uid,
avg_fenshu,
scores,
province
from
(
select
class,
uid,
scores,
avg(fenshu) as avg_fenshu,
row_number() over(partition by class order by avg_fenshu desc) as rn
from
(
select
class,
uid,
scores,
avg(fenshu) as avg_fenshu
from
(
select
uid,
class,
scores,
split(score,'_')[0] as kemu,
cast(split(score,'_')[1] as double) as fenshu,
from
(
select
uid,
class,
scores,
explode(scores) as score
from
score
) t1
) t2
group by uid,class,uid
) t3
) t4 join info
on t4.uid = info.uid and t3.rn <= 10 and province != '北京市';
3.每个班级的同学数量
select
class,count( distinct uid)
from
score
group by class;
4.计算出活跃用户中有时长用户的人均时长。

select
avg(duration)
from
(
select
cuid,
sum(duration) as duration
from
tb_cuid_1d
where duration != 0
group by cuid
) t;

关注 易学在线 公众号
每日更新大量优质技术文档
第一时间获知最新上架课程
与众多大数据猿分享与交流
DOIT.EDU 资料来自网络收集整理,如有侵权请告知