1 数据集成
数据同步,抽数,导数
离线数仓,离线同步
1.数据源
从哪里来,到哪里去
可以是数据库,也可以是别的,比如FTP,ES等
2.表
来源表 目标表
3.字段映射关系
4.同步方式/同步逻辑
比如从mysql到hive
先清空hive表的某些分区,再插入,全删全插
直接插入
hive到mysql呢?
全删全插
直接插入
主键冲突update
hive到mysql,我们公司称为“回流”
同步方法
1.直接对mysql业务库进行操作
优缺点:操作简单,风险较大
2.写到kafka,让java后端去消费
kafka,消息中间件
hive->kafka->mysql
中间多了一层,我们离线数仓称为生产者,java后端称为消费者
特点:较为安全,但是开发麻烦
3.api接口
产生统一的api接口,供java同事去调用,我认为是最好的方式
dataworks也有该功能
api接口一般是,一行数据,一个json
如果你不用呢?
我们离线数仓还是将数据写到mysql,但是是接口端的mysql
hive->mysql(接口库) ->接口->mysql(业务库)
5.同步时间,多久同步一次
crontab
2 数据开发
说白了 写SQL
但是不只是写SQL
?
调度配置
时间配置,什么时候运行?多久运行一次?
生效时间范围:2022-04-15-2022-04-30
SLA:其实就是设置任务超时时间,比如设置1小时,也可以设置具体的时间,时效性
依赖设置:哪些任务跑完了我才可以跑
重跑设置:是否出错自动重跑?重跑几次?是否可以手动重跑?
其他:
代码提醒:写一个表,dwd_trd_ord,表提醒补全,原理是?
血缘关系:一大段SQL,平台最好是可以将其中所有表的依赖解析出来
版本:谁编辑过了?编辑了几次?为什么编辑?还要可以回滚。
代码搜索:
默认的变量:比如"昨天",“月初第一天”
3 运维中心
周期任务
DAG(有向无环图)
任务
启动
停止
暂停(冻结)
解冻
补数据
1.20220101-20220409的数据,hive加了个字段
2.当做测试用 补20220409的数据
3.失败发现后重跑
4 数据治理
数据访问控制
比如分析师想看你做好的某个ods层表,她申请,你审批
数据质量(很重要!!!)
有些我们任务跑成功了,但是数据不对,下游分析师或者业务发现了比如某app的弹窗,里面放的是优惠券的链接,这部分数据是你做的
user_id coupon_id amt
但是本来只发1万人,但是你发了10万人,造成资损
主要的数据质量校验的规则
1.主键重复检测
hiving count(distinct id) > 1
2.数据量多也不行,少也不行,没有更不行
2.1 是否为空 count(1)是否大于0
2.2 表数据量波动阈值 1万 50%报错
n天平均值波动,方差波动,周期波动等等
3.某些重要计算列检测
比如一个0.67 0-1,1.7,设置该列最大值为1,出现大于1的报错
5 数据地图
包含了表,字段,分区,数据量,上下游依赖等等信息
存储量和表数据的关系
1G不等于100w