个人数仓开发面试题记录

一.广州电商公司

1.简单自我介绍
2.介绍下之前的公司离线数仓项目
3.mysql和hive区别?
4.sql的执行顺序?
5.hive的优化
6.说下你之前公司来,你的技能层次在每个公司?你怎么评价你的技能?
7.你的之前业务主要是做什么?我说了项目分工
8.数仓的分层,分几层?按照数据域分层,问几层?
9.sql优化一般怎么优化的?
10.非本专业怎么进行后续学习的?
11.系统函数怎么用的?
12.数据迁移怎么做的?
13.数据可视化界面怎么做的?bi你们讲解是谁负责
14.有用过dws层直接对接bi嘛?mysql数据库有用吗?为啥对接bi?

3.mysql和hive区别?

    hive不是数据库,除了sql语法有点像,其他都不一样
                   hive                                         mysql
 存储位置   hdfs                                         本地磁盘
 计算引擎   分布式mr、tez、spark             自己的单机的
 计算效率   数据量大,快                             小,快
 数据更新   适合分析(select)                   增删改查

5.hive的优化

group by

1)map端预聚合  (预聚合的配置参数为hive.map.aggr,默认值true)

2)数据倾斜时进行负载均衡处理

通过将参数hive.groupby.skewindata(默认false)设置为true,那么在进行group by时,会启动两个MR job。第一个job会将map端数据随机输入reducer,每个reducer做部分聚合操作,相同的group by key会分布在不同的reducer中。第二个job再将前面预处理过的数据按key聚合并输出结果,这样就起到了均衡的效果。

3)count(distinct)

当数据量大时,效率会很低,尤其是数据倾斜的时候。

可以通过group by代替count(distinct)使用。

4)本地模式

对于处理小数据量的任务,我们不需要通过集群模式进行处理(因为为该任务实际触发的job执行等开销可能比实际任务的执行时间还要长),Hive可以通过本地模式在单台机器上处理所有的任务。

 set hive.exec.mode.local.auto=true;

------------------------------------------------------------
2)map Join:  大小表join,避免shuffle
3)SMB Join:  sort merge bucket join
    大表 join 大表:
        分桶表,分桶字段 = 关联字段 = 桶排序 字段
        分桶的数量,成比例
4)分区、分桶
    分区:避免全表扫描
    分桶:做SMB的时候, 抽样key判断倾斜
5)压缩 : snappy
6)存储格式 : 列式 orc
    id  name    age
    1    zs     18
    2    ls     19
    
    行式   1    zs     18     2    ls     19
    列式   1    2     zs    ls    18    19
        查询效率高
        存储结构更紧密,压缩后更小
        select name from A
    
    行式: text、sequnencefile
    列式: orc、parquet
        orc为hive而生的,跟hive性能更强
        parquet兼容性更好
7)调整reduce的数量
    指定参数 ,默认 -1 表示禁用
    估算机制:   数据量/ 每个Reducer处理上限(默认256M)
    特殊语法: orderby 、 count(distinct )
    
    优先级: 特殊语法 > 参数 > 估算机制
8)谓词下推      默认开启
    select xx from  A join B  on A.id=B.id and A.id>10
    select xx from  A join B  on A.id=B.id where A.id>10
    经过谓词下推,第二种也会先 过滤,再join,效果一样
    
9)并行执行      默认开启
10)开启cbo      默认开启
11)合并小文件
    危害:
    解决:  
        JVM重用
        CombineHiveInputFormat
        merge功能: 结束后,再另外启动一个job来合并小文件于16m的文件
            小于 16m ==》 256m
            map-only:默认开启
            map-reduce:默认关闭,需要开启
            
12)使用多引擎
    mr    : 跑 年、月 时间跨度大、数据量大的指标
    tez   : 现在没用
    spark : 跑日常天指标
    
    set hive.execution.enginee = mr;
    sql1;
    
    set hive.execution.enginee=spark;
    sql2;

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值