ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Data Engineering Zoomcamp 2026 Module 1 作业实战:Docker 与 SQL、Terraform 基础设施即代码

Data Engineering Zoomcamp 2026 Module 1 作业实战:Docker 与 SQL、Terraform 基础设施即代码 Data Engineering Zoomcamp 2026 Module 1 作业实战Docker 与 SQL、Terraform 基础设施即代码【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp本指南以 Data Engineering Zoomcamp 2026 届 Module 1Docker Terraform作业为主线系统拆解七道作业题背后的核心知识点Docker 镜像与容器交互、docker-compose 网络与端口映射、基于 NYC 出租车数据的 SQL 分析以及用 Terraform 在 GCP 上创建存储桶与 BigQuery 数据集的基础设施即代码工作流。读完本篇你将掌握从本地容器环境搭建、数据下载入库、SQL 聚合查询到 Terraform 资源编排的完整动手路径并能在自己的 GitHub 仓库中整理出可提交的作业解答。作业概览与提交要求本作业的目标是准备环境并练习 Docker 与 SQL——既覆盖容器化基础也覆盖数据管道中最常见的 SQL 分析场景。提交时除了给出各题答案还必须附带一个指向你的 GitHub 仓库或其他公开代码托管站点的链接仓库中应包含解题代码若解答是 SQL 或 shell 命令而非代码文件如 Python 文件请直接把它们写入仓库的 README 中。原作业提交表单位于课程官网见 cohorts/2026/01-docker-terraform/homework.md。此外作业末尾鼓励Learning in Public公开学习通过在 LinkedIn、X/Twitter 等平台分享每周学习成果可以获得社区反馈、建立学习档案并积累曝光。示例发帖模板同样保留在原文档中可直接改写为个人版本。Question 1理解 Docker 镜像——在容器内确认 pip 版本第一题要求用python:3.13镜像运行一个容器并以bash作为 entrypoint 进入交互式 shell然后确认镜像内置的pip版本。可用命令docker run -it --entrypoint bash python:3.13进入容器后执行pip --version即可得到该镜像内置的 pip 版本号作业给出了 25.3、24.3.1、24.2.1、23.3.1 等候选值。原文档特别提醒如果在本届课程结束之后运行实际版本可能与候选值不同——选项反映的是课程直播期间可用的版本以你实际查到的值为准。这道题的价值在于熟悉 Docker 的两个基础操作docker run -it-i保持标准输入打开-t分配伪终端二者结合才能进入交互式 shell--entrypoint bash覆盖镜像默认入口点。这也是后续在容器中做排障、检查依赖版本时的常用手段。Question 2理解 Docker 网络与 docker-compose——pgAdmin 如何连接 PostgreSQL第二题给出了一段docker-compose.yaml要求回答 pgAdmin 应使用什么hostname和port连接 Postgres 数据库services: db: container_name: postgres image: postgres:17-alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: ny_taxi ports: - 5433:5432 volumes: - vol-pgdata:/var/lib/postgresql/data pgadmin: container_name: pgadmin image: dpage/pgadmin4:latest environment: PGADMIN_DEFAULT_EMAIL: pgadminpgadmin.com PGADMIN_DEFAULT_PASSWORD: pgadmin ports: - 8080:80 volumes: - vol-pgadmin_data:/var/lib/pgadmin volumes: vol-pgdata: name: vol-pgdata vol-pgadmin_data: name: vol-pgadmin_data候选答案包括postgres:5433、localhost:5432、db:5433、postgres:5432、db:5432允许多选。解题的关键是区分两套网络视角容器间通信服务名 容器内端口在 docker-compose 创建的默认网络中服务可以通过服务名db互相访问端口使用容器内部端口。Postgres 镜像默认监听5432因此 pgAdmin 连接时应填写 hostname 为db、port 为5432。宿主机访问localhost 映射端口ports段中的5433:5432表示把容器内5432映射到宿主机5433。只有从宿主机而非另一个容器访问时才使用localhost:5433。同样地pgAdmin 对外暴露的是8080:80即通过http://localhost:8080访问 pgAdmin 的 Web 界面。本仓库的实战配置与此高度一致模块一的 docker-compose.yaml 中pgdatabasepostgres:18与pgadmindpage/pgadmin4两个服务共享同一 compose 网络pgAdmin 服务通过服务名pgdatabase访问数据库pgAdmin Web 界面映射在宿主机8085:80对应 10-sql-refresher.md 中访问http://localhost:8085/browser/的说明。对比作业中db/postgres两种命名可以更直观地理解服务名 vs 容器名 vs localhost三者的差异。准备数据下载 2025 年 11 月绿色出租车数据后续 SQL 题目使用 NYC 绿色出租车green taxi2025 年 11 月的数据以及出租车区域zones查找表。按原文档执行wget https://d37ci6vzurychx.cloudfront.net/trip-data/green_tripdata_2025-11.parquet wget https://github.com/DataTalksClub/nyc-tlc-data/releases/download/misc/taxi_zone_lookup.csv第一个文件是 Parquet 格式的行程明细pickup/dropoff 时间、trip_distance、total_amount、tip_amount、PULocationID、DOLocationID等字段第二个是区域字典表LocationID、Borough、Zone。下载后建议先使用模块一提供的 ingest_data.py 之类的脚本将其载入 Postgres例如ny_taxi数据库再通过 pgAdmin 或 psql 执行分析查询。区域表与行程表通过LocationID关联这正是后续 Question 5/6 需要 JOIN 的原因。Question 3~6用 SQL 分析出租车行程数据这四道题考查最常用的 SQL 聚合与连接技巧。原文档只给出题目与选项本节结合模块一的 SQL Refresher 梳理每题的解题思路与可复用的 SQL 模式。Question 3统计短途行程数量条件为lpep_pickup_datetime在2025-11-01与2025-12-01之间上界不包含且trip_distance 1英里的行程数。核心是区间过滤与计数SELECT COUNT(1) FROM green_tripdata WHERE lpep_pickup_datetime 2025-11-01 AND lpep_pickup_datetime 2025-12-01 AND trip_distance 1;注意上界排他的写法用 2025-12-01而非 2025-11-30后者会漏掉 11 月 30 日 23:59 之后的行程这正是数据工程师常踩的边界陷阱。Question 4每天的最长行程在所有trip_distance 100排除异常数据的行程中找出按 pickup 日期分组后最长行程所在的日期。可复用 Refresher 中的GROUP BY CAST(... AS DATE)模式SELECT CAST(lpep_pickup_datetime AS DATE) AS pickup_day, MAX(trip_distance) AS max_distance FROM green_tripdata WHERE trip_distance 100 GROUP BY CAST(lpep_pickup_datetime AS DATE) ORDER BY max_distance DESC LIMIT 1;CAST(timestamp AS DATE)与ORDER BY ... DESC LIMIT 1的写法在 Refresher 的Grouping by Day示例中都有对应演示。Question 511 月 18 日总金额最大的 pickup 区域题目要求找出 2025-11-18 当天所有行程total_amount之和最大的 pickup 区域。这需要三张表的 JOIN行程表 zones 自连接两次与 Refresher 中显式 INNER JOIN 的范例完全一致SELECT zpu.Zone, SUM(t.total_amount) AS total FROM green_tripdata t JOIN zones zpu ON t.PULocationID zpu.LocationID WHERE CAST(t.lpep_pickup_datetime AS DATE) 2025-11-18 GROUP BY zpu.Zone ORDER BY total DESC LIMIT 1;候选答案East Harlem North、East Harlem South、Morningside Heights、Forest Hills都是区域名必须通过 JOIN 把PULocationID转成可读的Zone名称。Question 6East Harlem North 乘客的最大小费落点在 2025 年 11 月从 East Harlem North 区域上车的乘客中找出小费tip_amount注意不是tip也不是trip最大的下车区域名称。这同时需要 pickup 与 dropoff 两次 JOINSELECT zdo.Zone, MAX(t.tip_amount) AS max_tip FROM green_tripdata t JOIN zones zpu ON t.PULocationID zpu.LocationID JOIN zones zdo ON t.DOLocationID zdo.LocationID WHERE zpu.Zone East Harlem North AND t.lpep_pickup_datetime 2025-11-01 AND t.lpep_pickup_datetime 2025-12-01 GROUP BY zdo.Zone ORDER BY max_tip DESC LIMIT 1;此题集中考查双表自连接同表以不同别名 zpu/zdo 连接两次、字符串过滤条件以及返回名称而非 ID的取值意识。Refresher 中CONCAT(zpu.Borough, | , zpu.Zone)的写法展示了同样的自连接手法可一并参考。Terraform在 GCP 上创建存储桶与 BigQuery 数据集作业后半部分要求在本机、GCP VM 或 GitHub Codespace 安装 Terraform把课程仓库中的 Terraform 示例文件复制到工作环境修改后创建 GCP Storage Bucket 与 BigQuery Dataset。原文档指出的模板目录为 01-docker-terraform/terraform/terraform该目录下提供两套可参考的实现terraform_with_variables变量驱动版包含 main.tf 与 variables.tf。main.tf声明了 Google providerhashicorp/google 5.6.0、google_storage_bucket资源含force_destroy与生命周期规则和google_bigquery_dataset资源variables.tf定义了credentials、project、region、location、bq_dataset_name、gcs_bucket_name、gcs_storage_class等变量的默认值作业时需把默认值改成自己的服务账号 JSON 路径、GCP Project ID 与唯一桶名。terraform_basic极简版provider 4.51.0直接在main.tf内硬编码 Project ID、桶名与 dataset_id另含uniform_bucket_level_access、versioning、30 天生命周期删除规则等可选推荐配置。关于 GCP 凭据与命令流程可参考 terraform/terraform/README.md若无法生成服务账号密钥文件受组织策略限制它给出了服务账号提权 data source 获取临时 token的 fallback 方案若正常环境则用gcloud auth application-default login刷新会话令牌后直接执行 Terraform 命令。更完整的 IaC 概念main.tf、variables.tf、.tfstate、provider/resource/variable 声明含义见 1_terraform_overview.md。Question 7Terraform 工作流最后一题考查 Terraform 命令语义。原文档要求判断以下三个环节分别对应哪条命令下载 provider 插件并设置后端backend生成变更计划并自动执行移除 Terraform 管理的全部资源。结合 terraform/terraform/README.md 中的实际执行顺序与 1_terraform_overview.md 的 Execution steps标准工作流为阶段命令作用初始化terraform init初始化并配置 backend、安装 provider 插件、从版本控制检出已有配置计划并应用terraform plan/terraform applyplan对比本地变更与远端状态、生成执行计划apply征得确认后应用到云上自动应用terraform apply -auto-approve跳过交互确认直接执行计划对应题干auto-executing the plan清理terraform destroy从云端移除 Terraform 管理的全部资源因此正确序列应为terraform init → terraform apply -auto-approve → terraform destroy。注意干扰项中的-y、run -auto-approve、rm、import均不是apply/destroy的合法对应选项。实战中建议按 README 的规范步骤执行先terraform init再用terraform plan -varprojectyour-gcp-project-id预览变更terraform apply创建资源工作结束后务必terraform destroy以避免云资源持续计费。若使用变量文件也可以直接用terraform apply -var-fileterraform.tfvars的方式传入参数参考 terraform_with_variable_AWS 目录下的.tfvars用法。提交建议与学习资源完成七道题后将 SQL 解答与 shell 命令整理进仓库 README并在作业提交表单中附上仓库链接即可。若想进一步夯实 Docker 与 SQL 基础本仓库还提供了完整的配套资料Docker 入门到 docker-compose 的 11 篇连载见 01-docker-terraform/docker-sql重点阅读 09-docker-compose.md 与 10-sql-refresher.md可直接运行的 compose 编排 pipeline/docker-compose.yaml 与辅助脚本 docker-helper-scriptsTerraform 概念与 GCP 概览1_terraform_overview.md、2_gcp_overview.md。建议在提交前用docker destroy清理本地容器对应 11-cleanup.md并记得给 Terraform 目录配置合理的.gitignore忽略.tfstate等敏感状态文件再公开你的学习成果。【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表