1.left join产生的数据倾斜
两个子集LEFT JOIN之后GROUP BY从代码角度出发更综合,但是当两个子集特别大时,会影响到效率,应该分别GROUP BY之后再进行LEFT JOIN,防止数据倾斜;
2.维度理解
维度太多了,有个dwd层放入多个维度,比如一个用户在不同的页面操作一个内容,这个维度就是(用户,页面,内容),若放在dws里维度是(内容,页面),相当于从dwd聚合来
3.公司的数仓存储和压缩
公司采用ORC存储,SNAPPY压缩,ORC存储可以让hive拥有事务,原子性,一致性,隔离性,持久性;SNAPPY压缩对于集团hive有什么好处暂时未知;
4 .增,删,修改字段及删表分区增加表字段
1.alter table wx_dwsdb.dws_cc_page_con_consume_dl add columns (con_title string comment '内容标题');
2.修改表字段位置: alter table wx_dwsdb.dws_cc_page_con_consume_dl change con_title con_title string after con_id;
3.删除表字段(hive不能直接删除字段,可以通过改变字段的性质):alter table wx_dp_adsdb.ads_cc_creator_platform_dl change column con_title a1 string comment '预留字段';
4.删除表分区: alter table wx_dwddb.dwd_cc_like_user_details drop if exists partition(dt<='20210130',dt>='20210117');
5.对历史大量数据需求解决方法
经常会遇到一些需求比如从某年某月某日开始截止到当前全量数据。可以用模式调优解决-
将历史数据明细数据通过脚本刷到a表中,之后对数据每天增量的方式增加到a表中,a表相当于每天都记录了全量的数据,对此a表进行操作就可以得到需要的数据
扩:a可以辅助数仓建设构建dwd层或dws层
6.EXCEL中的文件导入到hive表
方法1:将excel文件改名为a.txt文件移动到跳板机上:mac可下载SecureCRT,win可用xshell,在跳板机中使用rz -rb,命令即可将文件放到跳板机上,在指定目录下:piconv -f gb2312 -t UTF-8 CompanyCode.txt > a.txt,然后再load 入表中;
方法2:创建a.txt,直接将excel里的内容复制到a.txt里,再load即可
7.脚本刷历史数据
可以先 git clone 项目到跳板机上,然后 nohup run for_run.sh,后台运行刷数据的脚本,刷数据的同时,会在同级目录下创建nohup.out文件,可以cat 或者 vim 查看nohup.ou t,在vim中,可以通过 /20210316定位到刷数据的位置,
注:数据如果需要再次回溯,需要将nohup.out清空,nohup文件会保留历史写入过多造成卡顿
8.网校数仓基本上都是使用string类型
可以在ods,buf,dwd,dim,dws层使用string类型,在ads层,为了易用性,可以使用其他字段类型,用的时候,也需要注意,比如
从dws或者dwd到ads的时候,在有些情况下需要转换row_number() over(partition by dt,page order by cast(show_pv as bigint) desc) as num
9.3.31号进行了4张表的优化处理
优化点主要在于依赖表的切换,之前数仓体系没有建立或者健全,很多字段的获取要从其它多张表获取,现在通过维表或其它dwd层表关联,大大减少了表的连接,提高了效率,且由于血缘依赖,也让任务得以提前运行。
在切换表的同时,对代码逻辑进行优化,减少了子查询,
总结:优化在数仓体系未建立时曾创建的表,再一次感受到了数据体系建立的重要性,稳定,易用,完整,准确,安全。