
数据工程学习没门路data-engineer-handbook 实战完整指南从一键起实验室到 SCD 维度建模【免费下载链接】data-engineer-handbookThis is a repo with links to everything youd ever want to learn about data engineering项目地址: https://gitcode.com/GitHub_Trending/da/data-engineer-handbook周日晚上十点你刚投完数据工程的岗位决定认真补补硬技能。打开浏览器搜 awesome data engineering教程列了三大屏收藏了一周一个都没动手。data-engineer-handbook 就是为这种局面准备的它把数据工程学习资源整理成库给出 4 周初级和 6 周中级两个训练营中级营直接附带能在你电脑上跑起来的实验环境。读完本文你能在半小时内搭好本地实验室亲手跑通 SCDSlowly Changing Dimensions属性变化时保留历史行的一种表设计方法维度建模练习。30 秒速览环境一条命令起clone 仓库make upPostgres 加 PGAdmin 容器直接跑起来。数据是现成的镜像自带数据转储文件初始化脚本自动还原一套游戏球员数据集不用自己编造数据。核心教材是 SCD 与幂等性维度建模加慢变化维度是数据工程面试里出现频率最高的两个话题。不用读一行源码所有实验都是 SQL打开 PGAdmin 就能写写完直接对照作业校验。它到底怎么工作的敲下 make up 时发生了什么中级营第 1、2 周的实验架在一个两服务的 docker-compose.yml 上一个 postgres 14一个 pgadmin4。关键在 postgres 容器把 scripts/init-db.sh 挂进了入口点目录。容器第一次初始化时脚本先用pg_restore把data.dump还原进去再顺带执行 homework 目录里的所有 SQL。也就是说起容器和灌数据是同时发生的容器变绿的那一刻表就已经在了。这也是后面表不见了那个坑的伏笔它只在初始化时跑一次。为什么 SCD 表重跑之后还对得上先说清楚幂等性一个管道跑一遍和跑两遍结果完全一样。增量 SCD 脚本把新赛季的球员分成四类最后合并成一张完整表SELECT *, 2022 AS current_season FROM ( SELECT * FROM historical_scd UNION ALL SELECT * FROM unchanged_records UNION ALL SELECT * FROM unnested_changed_records UNION ALL SELECT * FROM new_records ) a白话讲这是一次对账。四个 CTEWITH 定义的临时结果集在一条 SQL 内可反复引用分别对应老历史行原样保留、本季没变的行延长结束日期、变了的人先给旧记录关账再开一条新记录、新来的球员从零建档。四类不重不漏地覆盖所有人所以你跑一遍还是跑两遍最终的表都一样。这就是幂等性也是 增量生成脚本 的骨架。SCD 类型怎么影响幂等性维度属性按变化方式分成 SCD 0 到 3 型。0 型是永不变化的值比如生日谈不上 SCD1 型只保留最新值2 型给每行留一个生效区间start_season到end_season当前行标记为活跃3 型只存原值和当前值两个槽位。这张视觉笔记里给了结论2 型是幂等的回看任意一天数据都一致1 型和 3 型在回刷时会丢失当时是什么样的信息结果依赖于你什么时候跑。所以实验统一用 2 型建模这张表的 建表语句 就 9 行值得逐字段读一遍。手把手配出来 第一步三行起实验室git clone https://gitcode.com/GitHub_Trending/da/data-engineer-handbook.git cd>cp example.env .env make up第二步确认数据真的灌进去了docker exec -it my-postgres-container psql -U postgres -d postgres -c \dt为什么这么设\dt直接列表名看到players、team这类表就说明还原成功不必绕道图形界面。图形界面在localhost:5050登录凭证就是.env里的PGADMIN_EMAIL和PGADMIN_PASSWORD。新建服务器时 Host 填host.docker.internal从宿主机容器视角访问本机端口 5432库名用户都是postgres第三步哪些参数该改哪些别动参数默认值建议值一句话说明POSTGRES_PASSWORDpostgres自己的实验凭证养成改掉默认值的习惯HOST_PORT54325432宿主机端口机器上有别的库就换 5433PGADMIN_PORT50505050PGAdmin 网页端口冲突时同理DOCKER_CONTAINERmy-postgres-container别动Makefile 靠这个名字定位容器PGADMIN_EMAIL/PGADMIN_PASSWORDpostgrespostgres.com / postgres改完立即重建仅容器首次构建时生效改完.env如果行为没变十有八九是容器没重建回第一步down -v再up -d。 这几个坑我替你先踩了表不见了。现象容器是绿的PGAdmin 里表列表却是空的。根因init-db.sh只在数据卷首次初始化时执行第一次还原失败后留下的已初始化但空的卷会让后续重启永远跳过还原。处理docker compose down -v删掉数据卷再docker compose up -d强制走一遍初始化。PGAdmin 登录不进去。现象网页能打开但你按.env改过的账号密码被拒。根因PGAdmin 的默认凭证在容器首次构建时就写死了之后再改.env不生效。处理要么改回原值要么down -v重建容器让它重新读配置。端口被占。现象启动时报 port is already allocated。根因你机器上另一个 Postgres 或遗留容器占着 5432。处理.env里HOST_PORT改成 5433PGAdmin 连接里的端口同步改。再往前走一步SQL 实验做熟后回到 1-dimensional-data-modeling 实验目录重点看 scd_generation_query.sql用LAG找变化点、再按连续相同值归组是经典的游程压缩问题面试官爱问。同一套数据在 3-spark-fundamentals 里用 PySpark 重做一遍还配了 单元测试能补上管道怎么验证这一课。回实验室把增量 SCD 的 SQL 连跑两遍拿两次的结果逐行 diff 确认幂等性比读十篇文章都管用。【免费下载链接】data-engineer-handbookThis is a repo with links to everything youd ever want to learn about data engineering项目地址: https://gitcode.com/GitHub_Trending/da/data-engineer-handbook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考