建模设计: 建模需要考虑的问题
1- 数据的同步方式是什么?
全量覆盖同步:
在建表的时候, 不需要构建分区表, 每一次都是将之前的数据全部删除, 然后全部都重新导入一遍
适合于: 数据量比较少, 而且不需要维护历史变化行为
仅新增同步:
在建表的时候, 需要构建分区表, 分区字段是以更新的周期一致即可, 比如 更新的周期为天, 分区字段也应该为天, 每一次导入上一天的新增的数据
适合于: 数据量比较大, 而且不需要维护历史变化行为(并不代表表不存在变化, 只不过这个变化对分析没有影响)
新增及更新同步:
处理逻辑: 在建表的时候, 需要构建分区表, 分区字段是以更新的周期一致, 比如 更新的周期为天, 分区字段也应该为天,每一次导入上一天的新增及更新的数据
适合于: 数据量比较大, 而且需要后期维护历史变化
全量同步:
在建表的时候, 需要构建分区表, 分区字段以更新的周期一致即可, 比如 更新的周期为天, 分区字段也应该为天,每一次导入的时候, 都是将整个数据集全部导入到一个新的分区中, 后期定期删除老的历史数据(比如: 仅保留最近一周)
适合于: 数据量比较少, 而且还需要维护历史变化, 同时维度周期不需要特别长
注意: 此种同步方式相对较少
2- 表是否选择为内部表 还是 外部表?
判断的依据: 是否对数据有绝对的控制权, 如果没有 必须是外部表, 如果有 随意
外部表的使用场景:
1. 数据非常重要或者不易获得 (购买的数据)
2. 多个项目同时引用的数据文件一般做成外部表 例如 (日期表 , 公司组织架构表)
3- 表是否为分区表还是分桶表?
分区表: 分文件夹, 将数据划分到不同的文件夹中, 当查询数据的时候, 通过分区字段获取对应分区下的数据, 从而减少数据扫描量, 提高查询效率(一般存在更新及新增数据的表都会使用分区表 ,根据更新和新增周期进行分区)
分桶表: 分文件 将数据根据指定的字段划分为N多个文件 可以通过这种方式对数据进行采样操作 以及分桶表在后续进行join优化的时候也会涉及到(bucket Map Join | SMB Join)4- 表选择什么存储格式 和 压缩方案?
存储格式: 一般都是 ORC / Text File
压缩格式: 一般都会 SNAPPY / GZ / zlib(默认)
存储格式: 如果数据直接对接的普通文本文件的操作 只能使用textFile 否则大多数都是ORC
压缩格式: 读多写少 采用SNAPPY 写多读少 采用GZ 如果普通的文本文件对接, 一般不设置压缩
如果空间比较充足, 没有特殊要求, 建议统一采用SNAPPY5- 表中字段应该如何选择呢?
ODS层: 业