DD 数据开发学习站DATA ENGINEERING
模块 01 · 开始

环境搭建

装好 Python、DuckDB、VS Code 和 Git Bash,跑通数据体检,并执行第一条 SQL。

难度 · 入门 约 60 分钟 必修 练习 10 项 计划内 刷题 0/3
建议先学:数据开发是什么
本页目录 · 21 节

本章目标:装好 Python、DuckDB、Git Bash 和 VS Code,并用 SQL 查询一张小 CSV。项目数据留到项目线准备。 前置知识:读完第 01 章,知道数据开发大概在做什么。 预计用时:30–60 分钟,大部分时间花在安装和排错上。

1. 为什么需要它

后面每一章都要动手:写 SQL、跑 Python、用命令行处理日志、提交 Git。环境没搭好,时间就会浪费在“命令找不到”“模块没安装”“中文乱码”上。

本章的原则是最小可用:先装跑 SQL 必需的三样东西,再装编辑器。Java、PySpark、WSL、Docker 都是可选,等真正用到再装。

组件 用途 是否必需
Python 3 跑脚本、后面跑 pandas 和 PySpark 必需
DuckDB 嵌入式 OLAP 数据库,直接用 SQL 查 CSV 必需
Git Bash 在 Windows 上用 Linux 风格命令 必需
VS Code 写代码、开终端、看文件 强烈建议
Java 17 + PySpark 第 06 章跑 Spark 用 可选
WSL / Docker 本地模拟 Linux 和组件环境 可选

2. 核心概念

2.1 为什么用 DuckDB

MySQL 要装服务、建库、建表、导入数据;Hive/Spark 要 Java 和集群。DuckDB 是一个 pip 包,装完就能直接查 CSV:

SELECT * FROM 'data/sample/orders_demo.csv' LIMIT 5;

它支持窗口函数、CTE、JOIN,语法和 Hive/Spark SQL 很接近。你在这里练的 SQL,换到大数据平台大部分能直接改着用。

注意:DuckDB 的定位是本地分析,不是高并发线上服务。面试时不要把它说成“生产数仓”。

2.2 Windows 上两套命令行

本章同时给出 Windows 和 Git Bash 的写法。后面章节统一用 bash 语法。

动作 Windows CMD/PowerShell Git Bash
运行脚本 python hello.py python hello.py
列目录 dir ls -la
当前路径 cd pwd
切 UTF-8 chcp 65001 export PYTHONUTF8=1

2.3 本章用哪份数据

本章只验证工具,不需要真实项目数据。项目附带一张 12 行的示例 CSV:

data/sample/orders_demo.csv

字段是 order_id, status, city, amount,足够练习读取、过滤、分组和排序。

真实电商数据集是项目线的材料,不在本章下载。等你要开始项目时,按项目 00 章准备 8 个 CSV、校验行数并建实验室库。这样理论章节不会被项目文件和环境问题拖住。

如果你现在就想把项目数据准备好,也可以直接去 项目 00 章。本章后面的工具检查仍然要做。

3. 动手示例

3.1 安装 Git Bash

下载 https://git-scm.com/download/win,默认选项安装。也可以用 winget:

winget install --id Git.Git -e --source winget

重新打开终端,验证 git --version 和 bash --version。看到 git version 2.x 和 GNU bash 版本号即可。

3.2 进入项目根目录

项目根目录是能看到 data、scripts、教程 的那一层。在该文件夹空白处右键选择“Open Git Bash here”,验证:

pwd
ls

能看到 data、scripts 即正确。若 ls 报错,说明你打开的不是 Git Bash。

3.3 检查并安装 Python 3

两种终端都用 python --version 检查。显示 3.10 及以上即可;推荐 3.11 或 3.12,3.13 也能用。

官网 https://www.python.org/downloads/ 下载安装包,第一页务必勾选 Add python.exe to PATH。也可以用:

winget install --id Python.Python.3.12 -e --source winget

装完关闭所有终端再重开,验证:

python --version
python -c "import sys; print(sys.executable)"

第二条打印解释器位置。输入 python 却弹出应用商店时,到“设置 → 应用 → 高级应用设置 → 应用执行别名”关掉 python.exe 和 python3.exe。

3.4 安装 DuckDB

在项目根目录执行:

python -m pip install duckdb

慢就换镜像,也可以配置一次全局镜像:

python -m pip install duckdb -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

验证:

python -c "import duckdb; print(duckdb.__version__)"

看到 1.x 即成功。用 python -m pip 能保证装进当前解释器。

3.5 安装 VS Code

下载 https://code.visualstudio.com/,或:

winget install --id Microsoft.VisualStudioCode -e --source winget

安装 Python 扩展,可选装 Chinese (Simplified)。“文件 → 打开文件夹”选择项目根目录。验证:

code --version

在 VS Code 里按 Ctrl 加反引号(Esc 下方)打开集成终端,执行 python --version。版本不对时按 Ctrl + Shift + P,搜 Python: Select Interpreter 重新选择。

3.6 直接用 SQL 查询 CSV

环境搭好的标志,是 DuckDB 能直接读取 CSV。在项目根目录运行:

python - <<'PY'
import duckdb
con = duckdb.connect()
con.sql("SELECT COUNT(*) AS row_cnt FROM 'data/sample/orders_demo.csv'").show()
PY

应输出 row_cnt = 12。再试一条分组查询:

SELECT status, COUNT(*) AS cnt
FROM 'data/sample/orders_demo.csv'
GROUP BY 1
ORDER BY 2 DESC;

应看到 paid 8 行,canceled 2 行,shipped 和 unavailable 各 1 行。

提示:这里只验证“CSV 能读、SQL 能跑”。真实项目数据、四层数仓和体检脚本都在项目线:00 章准备数据,01 章开始设计。SQL 语法练习用独立的玩具库,见 SQL 基础。

3.7 再用 pandas 读一次

数据开发除了 SQL,也常用 Python 读 CSV。运行:

python - <<'PY'
import pandas as pd

df = pd.read_csv("data/sample/orders_demo.csv")
print(df.shape)
print(df["status"].value_counts().to_string())
print("有效订单金额:", df.loc[df["status"] != "canceled", "amount"].sum())
PY

应看到 (12, 4),状态计数与上一步一致,排除取消单后的金额为 1554.0。pandas 的详细用法在第 04 章展开。

没装 pandas 就先跳过这一步,不影响本章验收;需要时执行 python -m pip install pandas。

3.8 可选:Java 17 + PySpark

只有准备学 Spark 时才需要。java -version 显示 17.x 就不用重装;否则:

winget install --id EclipseAdoptium.Temurin.17.JDK -e --source winget

重开终端,然后安装并验证:

python -m pip install pyspark
python -c "from pyspark.sql import SparkSession; s=SparkSession.builder.master('local[2]').getOrCreate(); print(s.range(5).count()); s.stop()"

输出 5 即成功。第一次启动较慢;报 Java 相关错误时检查 JDK 版本和 JAVA_HOME。跑不通可以先跳过。

3.9 可选:WSL 与 Docker

WSL 在 Windows 里运行真正的 Linux,Docker 用来启动 Kafka、Flink 等单机容器,都不是本阶段必需。

wsl --install -d Ubuntu
wsl -l -v

Docker Desktop 安装后验证:

docker --version
docker run --rm hello-world

看到 Hello from Docker! 即可用。任何环境方案超过 2 小时没跑通,就退回到“Python + DuckDB”的最小方案。

4. 常见坑

报错或现象 原因 处理
'python' 不是内部或外部命令 没装或没进 PATH 重装勾选 Add to PATH,重开终端
输入 python 弹出应用商店 Windows 假别名 关闭应用执行别名中的 python.exe
'pip' 不是内部或外部命令 pip 没进 PATH 改用 python -m pip
pip 下载慢或超时 默认源在境外 加 -i 清华镜像
No module named 'duckdb' 装到了别的解释器 用 python -m pip install duckdb 重装
中文乱码 终端不是 UTF-8 chcp 65001 或 export PYTHONUTF8=1
No such file or directory 不在项目根目录 pwd、ls 确认目录
输入 SQL 没反应 漏了分号 补 ;;-> 表示还在等输入

编码原则:Python 读文件写文件都显式指定 encoding="utf-8";用 Excel 打开 CSV 时可用 utf-8-sig。

5. 在线练习

先确认本机环境,再做在线 SQL 题:

python --version
python -c "import duckdb; print(duckdb.__version__)"
git --version
bash --version

Python 3.10 以上、DuckDB 1.x 以上即可。

题目 考点
595. 大的国家 简单过滤
584. 寻找用户推荐人 NULL 判断
620. 有趣的电影 条件过滤 + 排序

自测:

  • 四条版本命令都能正常返回。
  • 能用 DuckDB 查询 data/sample/orders_demo.csv,得到 12 行和正确的状态分布。
  • 能说清项目数据为什么不在本章下载,以及去项目线哪一章准备。
  • 能在力扣上独立提交 3 道题,而不是只看题解。

6. 面试延伸

面试题:为什么本地练习用 DuckDB,而不是 MySQL 或 Hive?

是什么:DuckDB 是嵌入式 OLAP 数据库,一个 pip 包就能查 CSV;MySQL 是行式 OLTP 数据库;Hive 是 Hadoop 上的离线数仓引擎。

解决什么问题:初学阶段要快速写 SQL、快速看结果、随时对账。DuckDB 安装成本最低,窗口函数和聚合语法也接近 Hive/Spark。MySQL 和 Hive 会把时间耗在环境上。

我的实操边界:我在本地用 DuckDB 完成过公开电商数据集的四层数仓构建和对账;Hive 只在 PySpark 的 Hive 兼容模式下跑过分区表 Demo,没有运维过真实集群。

面试题:PySpark 为什么需要 Java?

是什么:Spark 运行在 JVM 上,PySpark 通过 Py4J 调用 JVM 中的 Spark 代码,所以本机必须有可用的 JDK。

解决什么问题:Python 负责写代码和调库,JVM 负责分布式计算和内存管理。这样数据开发能用 Python,同时复用 Spark 的 JVM 生态。

我的实操边界:我在本地用 Java 17 + PySpark 跑通过 DataFrame 和 SQL 示例,理解 SparkSession 的作用;没有调过 Executor 内存和 shuffle 参数。

7. 本章验收

  • python --version、git --version、bash --version 三条命令都有输出。
  • python -c "import duckdb; print(duckdb.__version__)" 能打印 1.x 版本号。
  • 能用 DuckDB 直接查询 CSV,SELECT COUNT(*) FROM 'data/sample/orders_demo.csv'; 输出 12。
  • 能用分组查询得到 paid 8、canceled 2、shipped 1、unavailable 1。
  • 遇到乱码、模块找不到、目录不对三类问题时,能说出排查顺序和至少一条修复命令。
  • 能说清主线必需组件和可选组件分别有哪些,以及项目数据去哪一章准备。

下一章:03 Linux 与 Shell。已经熟悉命令行的读者可以直接进入 SQL 基础。

本章任务0 / 10
本页目录