尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

30分钟搭好SCD Type 2维度数据建模环境的完整指南:data-engineer-handbook实操清单

30分钟搭好SCD Type 2维度数据建模环境的完整指南:data-engineer-handbook实操清单 30分钟搭好SCD Type 2维度数据建模环境的完整指南data-engineer-handbook实操清单【免费下载链接】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昨晚十一点业务方问了你一个问题你卡住了Michael Jordan 在 2003 赛季是什么评分等级你查了 players 表只有每球员一行、只存最新赛季数据——他 2001 到 2002 年连续两季 Good 的记录早就被覆盖无从找回。这就是维度建模的典型痛点只存当前状态的表回答不了历史长什么样。本文用>LAG(scoring_class, 1) OVER (PARTITION BY player_name ORDER BY current_season) scoring_class OR LAG(scoring_class, 1) OVER (PARTITION BY player_name ORDER BY current_season) IS NULL AS did_changedid_change为真的行开新段按SUM(did_change)累加得到段编号再MIN/MAX(current_season)收出起止季。增量版则把新数据拆成四支处理不变的续写end_season、变化的关旧开新、新球员直接建段、历史段原样保留完整逻辑见 incremental_scd_query.sql。这条管道还必须有幂等性——同一输入反复跑输出逐行一致项目里用 Spark 测试固定了预期结果Jordan 2001–2002 Good、2003 Bad测试代码在 test_player_scd.py。![SCD Type 2 幂等性生成历史版本示意图](https://raw.gitcode.com/GitHub_Trending/da/data-engineer-handbook/raw/ff5f739822423e3709f89409e09a3648943e34c8/intermediate-bootcamp/materials/1-dimensional-data-modeling/visual notes/02__Idempotency_SCD.png?utm_sourcegitcode_repo_files)配置落地一份可直接复制的 Docker PostgreSQL 练习环境配置先把仓库拉到本地只读使用别改里面的文件git clone https://gitcode.com/GitHub_Trending/da/data-engineer-handbook cd>cp example.env .env make up # Windows 用 docker compose up -d.env就是那份可直接复制的配置骨架源自 example.envPOSTGRES_SCHEMApostgres POSTGRES_USERpostgres POSTGRES_PASSWORDpostgres HOST_PORT5432 DOCKER_CONTAINERmy-postgres-container PGADMIN_EMAILpostgrespostgres.com PGADMIN_PASSWORDpostgres PGADMIN_PORT5050HOST_PORT5432映射到宿主机的数据库端口。本机已有别的数据库占了这个端口时改成 5433 之类连接串端口同步改。DOCKER_CONTAINERPostgres 容器名PGAdmin 里 Host 就填它容器网络内互访桌面客户端则填localhost。PGADMIN_PORT5050PGAdmin 网页端口浏览器打开localhost:5050账号密码就是上面两行。docker-compose.yml里的挂载很关键data.dump 和 scripts/init-db.sh 被挂进/docker-entrypoint-initdb.d/容器首次初始化数据卷时自动恢复示例库并执行建表脚本。起完用docker ps确认两个容器都在跑连上 PGAdmin 后展开Servers › postgres › Schemas › public › Tables应能看到players、player_seasons等表。现场排错三个真实会踩的坑现象 → 根因 → 处理坑一容器起来了但 PGAdmin 里一张表都看不到根因init-db.sh只在数据卷第一次初始化时执行。你之前跑过一次残留的旧卷让自动恢复被跳过。 处理make restart它执行docker compose down -v清卷后重新 up。注意必须带-v单纯 stop 再 start 卷还在。坑二报 port is already allocated 或 Connection refused根因宿主机的 5432 被另一个数据库服务占用端口映射失败。 处理macOS 用lsof -i :5432、Windows 用netstat -ano | findstr :5432找到 PID 结束掉或者更省事——把.env的HOST_PORT改成 5433make restart连接端口同步改。坑三改了.env里的 PGADMIN 密码登录还是按旧密码算根因PGAdmin 的默认账号只在容器首次启动时写入之后pgadmin-data卷里存的是旧账号环境变量不再生效。 处理docker compose down -v删掉pgadmin-data卷再make up用新账号登录。要点收束这套练习的价值不在于把环境跑起来而在于让你亲手体会一张只存当前态的表和一张能回答任意历史时点问题的表之间的差距。记住环境一键起、幂等是硬要求、脏卷先清卷。起环境cp example.env .env make updocker ps验证表没加载先怀疑残留数据卷make restart含down -vSCD Type 2 的核心变化时关旧开新同一输入必须得到同一输出端口冲突优先改HOST_PORT不必追杀占用进程PGAdmin 账号首启固定换密码必须清pgadmin-data卷【免费下载链接】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),仅供参考
返回列表