mianjing
2019-06-16
数据仓库
- 星型模型、雪花模型
根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。
星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。
它的优点是 : 通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。此在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率(空间换易用与效率)。 - SQL,至少两天内登陆的用户
select user_pin,num from
(select user_pin,count(*) as num from
(select user_pin,days - rn as flag from
(select user_pin,ordr_time,datediff(ordr_time,'2019-07-01') as days,row_number()over(partition by user_pin order by ordr_time asc ) as rn
from idm.idm_f02_fin_xjk_tx_dtl_s_d where dt=sysdate(-1) and to_date(ordr_time)>='2019-07-01' and (user_pin is not null or user_pin='')
)s1
)s2
group by user_pin,flag
)s3
where num>=2
- lateral view 与 explode使用
select s.title,ex
from movie_message s
lateral view explode(split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')) t as ex
https://blog.csdn.net/weixin_36630761/article/details/78416341
6. map的优化,map个数如何确定
map数过多:
合并小文件 : 通过以下方法来在map执行前合并小文件,减少map数:
set mapred.max.split.size=100000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
- group by 和distinct
使用distinct会将所有的数据都shuffle到一个reducer里面,导致数据倾斜。
能使用group by代替distinc就不要使用distinct。 - 数据倾斜问题、解决
(1)hive.groupby.skewindata=true
负载均衡,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
(2)大小表使用mapjoin
(3)group by代替distinct
(4)空值的 key 变成一个字符串加上随机数,就能把倾斜的数据分到不同的reduce上 ,解决数据倾斜问题 - 小表关联大表
在命令行开启MapJoin功能:
set hive.auto.convert.join=true; - 事实上“把小表放在前面做关联可以提高效率”这种说法是错误的。正确的说法应该是“把重复关联键少的表放在join前面做关联可以提高join的效率。”
http://blog.sina.com.cn/s/blog_6ff05a2c01016j7n.html