而 从ods层开始就要开始记录一些字段来保证数据的一致性
比如有 从哪个库来的等等,
个人整理关于数据仓库的一些知识点以备后续查询
ods(贴源层) dw(数据仓库层) dm(数据集市层)
数据仓库(data warehouse)是一个 面向主题的 集成的 相对稳定的 反映历史变化的 数据集合用于支撑管理决策
面向主题:不同主题对应于不同的业务,如淘宝,买家,卖家
集成:多种表面是一样但表示不同,需要将其中一种作为标准,如 性别 有的用 0 男 1 女,有的 m 男 f女 所以在数据仓库中要选择一种作为标准,此为集成
相对稳定:数据仓库会保存一段时间的数据,一般只有添加,不能删除
反映历史变化:和历史信息相对比
olap(on-line anylsis processing)在线联机分析,一次性处理的数据大
维度建模:事实表是指其中保存了大量业务度量数据的表,一般只放数字或一些标志做统计 销售事实:维ID,收益 数量 支出 毛利
维度表:可以看作是事实表中某个字段的细分,比如时间(年月日) 等用于细分
粒度:数据的详细程度,影响查询 存储
层次:梯度阶级 国家 省 市
建模模型:
星星模型:事实表被维度表所包围,通过主外关键字类似与外键,且维度表没有被新的表所关联
雪花模型:维度表又链接着其他的新的表,一般在处理大的且相对静态的层次的时候使用,查询较慢
建模的一般过程:
1确定每个事实表的粒度:比如按天,按月粒度综合考虑 查询,存储
2确定维度的属性:即需要哪些字段,过滤字段
3确定惟独的层次:省 市 县
4每个事实表所关联那些维度
5
6确定缓慢变化维:那些维度的变化,需要保留,
实例:
根据需求关注的主题定义粒度,每个主题相当于一个事实表
根据不同主题在去建模
不同主题需要那些维度,需要对业务的熟悉,日期产品,等等
确定每个事实表数字型事实,每个事实的主键数量
然后构建,根据外键链接,etl填数据
分解需求:
hive udf
hive官方文档:
map array
round 四舍五入
cast (exp as type )强制转类型
from_unixtime(timestamp,format) 将时间戳转换成具体指定的格式
unix_timestamp(时分秒) 转换成时间戳
to_date()日期
year()
date_add()
date_sub()
case a when b then c
concat 链接字符
get_json_object(string,path) $.k=v $.k.second.[0]
lpad()截取字符 从左边 rpad()从右边
itrim() 去掉左边的空格
parse_url() 解析url
str_to_map()
count(distinct )
collect_set() 去重的集合
collect_list() 全部的集合,比如订单编号集合,合并
explode(array) 返回数组里面的值
explode(map) 返回map kv
posexplode(array) 下标和数据
hive存储格式:textfile默认格式,数据不做压缩,磁盘开销大,数据解析开销大,stored as textfile指定
sequenceFile