专注大数据培训
我们一直在领跑

最新面试题集锦(11)- 百度大数据面试题(数仓)

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;
欢迎分享,转载有奖:多易教育 » 最新面试题集锦(11)- 百度大数据面试题(数仓)