Pydantic для валидации данных на собеседовании Data Engineer
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем Pydantic в ETL
ETL pipelines принимают raw data из APIs, files, queues. Без validation — bad data flows downstream.
Pydantic — schema validation + type coercion. Catch errors early.
Models
from pydantic import BaseModel
class Order(BaseModel):
id: int
amount: float
status: str
created_at: datetime
# automatic validation
order = Order(**raw_dict) # raises ValidationError если badПри validation:
- Type checked.
- Required fields enforced.
- Coerced where reasonable (
"42"→42).
Type coercion
class Event(BaseModel):
timestamp: datetime
user_id: int
amount: Decimal
raw = {"timestamp": "2026-05-07", "user_id": "42", "amount": "100.50"}
event = Event(**raw) # все coerced правильноВ strict mode coercion отключается.
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Validators
from pydantic import BaseModel, field_validator
class User(BaseModel):
email: str
age: int
@field_validator('age')
def age_positive(cls, v):
if v < 0:
raise ValueError('age must be positive')
return v
@field_validator('email')
def email_valid(cls, v):
if '@' not in v:
raise ValueError('invalid email')
return v.lower()Custom logic для сложных rules.
Pydantic v1 vs v2
V2 — major rewrite (2023):
- 5-50× faster (Rust-based core).
- Better error messages.
- Different API (some breaking).
# v1
class Model(BaseModel):
@validator('field')
...
# v2
class Model(BaseModel):
@field_validator('field')
...В новых проектах — v2. Legacy — миграция через bump-pydantic tool.
Связанные темы
- Schema evolution для DE
- Data contracts для DE
- Great Expectations для DE
- ETL pitfalls для DE
- Подготовка к собесу Data Engineer
FAQ
Это официальная информация?
Нет. Статья основана на документации Pydantic v2.
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.