目录
hive调优优化
建表注意事项
1、分区,分桶
一般按照业务日期进行分区
2、一般使用外部表,避免数据误删
3、选择适当的文件储存格式及压缩格式
4、命名规范
5、数据分层,表分离
分区裁剪 where过滤,先过滤再join
分区分桶,合并小文件
左连接的时候,大表再左边,小标再右边
order by语句:是全局排列
sort by语句:是单reduce排序 只有一个reduce和order bu 没有区别
distribute by语句:是分区字段;
cluster by语句:可以确保类似的数据分发到同一个reduce task中,并且保证数据有序防止所有的数据分发到同一个reduce上,导致整体的job时间延长
数据倾斜优化
处理集中的key
原因:
1、key分布不均匀(实际上还是重复) 比如group by 或者 distinct的时候
2、数据重复,join笛卡儿积 数据膨胀
表现:
任务进度长时间维持再99%,100%,查看任务监控页面,发现只有少量reduce子任务未完成,因为其处理的数据量和其他reduce差异过大
解决方案:
1、看下业务上,数据源头能否对数据进行过滤,比如key为null,业务层面进行优化
2、找到key重复的具体值,进行拆分,hash,异步求和
数据仓库建模:
数据仓库的发展大致经历了三个过程
简单报表阶段
数据集市阶段
数据仓库阶段
数据仓库建模架构:
DB数据->ETL帖源层->ODS汇总数据->DM数据仓库->主题域DataMart
数据仓库建模方式:
1、分库分表,命名规范,库名以所在数据层开头命名 如:ods_dianxin_test
2、星型和雪花型建模
数据仓库建模范式:
1、1NF
1NF简单点就是原子性,列不可再分,没有重复的列也没有重复的行
基本上主要有主键的表都满足第一范式
2、2NF
1、2NF首先满足1NF
2、非主属性必须依赖于键的全部,如果只依赖于主键的一部分,则需要移出创建新表
数仓专业称谓:
1,事实表:事实表是用来存储主题的主干内容,一些外键指向维度表。事实表一般是没有主键的,基本都是外键。数据的质量完全由业务系统来把握。一般单表字段较多,数据量比较大
2,维度表:事实表中某个方向分支,必须有主键,用于关联事实表。一般数据量较小,变化缓慢。
3,宽表:字段和数据量比较巨大,很多维度杂糅在一起。好处:方便查询分析。缺点:没有规范。
4,拉链表:记录一个事物从开始,一直到当前状态的所有变化的信息
分层设计:
ODS数据运营层
DW数据仓库层
DWD数据明细层 维度退化
DWM数据中间层 轻度聚合
DWS数据服务层 数据集市,宽表
(DIM 维表层)
ADS/APP/DM 数据应用层,数据集市