Przejdź do głównej zawartości

Receptury inżynierii danych

Receptury inżynierii danych to gotowe prompty dla Claude Code, Codeksa i Cursora obejmujące modele dbt, potoki SQL, notatniki i testy danych. Każda receptura trzyma się jednej zasady: agent czyta prawdziwy projekt przez serwer MCP dbt, uruchamia dbt wyłącznie na targecie deweloperskim i oddaje wynik dbt build oraz porównanie wiersz po wierszu zamiast SQL do przeczytania.

Ta strona jest dla programistów i inżynierów analityki, którzy oddają agentowi zmiany w potoku danych. Chroni przed takim scenariuszem: model się kompiluje, a tydzień później dashboard przychodów pokazuje inne liczby, bo złączenie po cichu zwielokrotniło wiersze.

Która receptura inżynierii danych pasuje do twojego zadania?

Dział zatytułowany „Która receptura inżynierii danych pasuje do twojego zadania?”
Twoje zadanieRecepturaBramka, która to udowadnia
Dodanie lub zmiana modelu dbtModel dbt, zaczynając od testuTesty jednostkowe napisane przed SQL; dbt build na modelu i wszystkim, co od niego zależy
Refaktoryzacja modelu bez zmiany liczbRefaktoryzacja z porównaniem wierszyPorównanie audit_helper z produkcją: zero zmienionych wierszy
Uporządkowanie notatnika Jupyter lub przeniesienie go na produkcjęNotatniki czytelne i uruchamialneDiff sparowanego pliku .py plus pytest --nbval-lax na czystym kernelu
Strojenie wolnego zapytania w hurtowni lub zmiana schematuOptymalizacja SQL i wzorce migracjiPlan zapytania i czas przed zmianą i po niej; up, down, up na kopii

Do serwisów w Pythonie wokół potoku (zadania ingestii, API) użyj receptur dla Pythona. Resztę kolekcji znajdziesz w książce kucharskiej dla deweloperów AI.

Daj agentowi reguły pracy z danymi, zanim użyjesz receptury

Dział zatytułowany „Daj agentowi reguły pracy z danymi, zanim użyjesz receptury”

Bez reguł agent uruchamia dbt run na tym targecie, który profiles.yml ustawia jako domyślny, a nieprzechodzący test „naprawia” przez jego usunięcie. Zapisz reguły raz, tam, gdzie każde narzędzie wczytuje je automatycznie:

## Data rules
- Never run dbt against the prod target. Use --target dev; the default target in profiles.yml is dev.
- Select only what changed: --select state:modified+ --defer --state prod-artifacts
- Never delete, disable, or loosen a data test (severity, where:, error_if) to make a build pass.
Report the failure and stop.
- Never SELECT raw columns tagged pii; profile them with counts and null rates only.
- After any change, run scripts/verify-dbt.sh and paste the full output in your summary.

Dodaj blok do CLAUDE.md w katalogu głównym repozytorium. Claude Code wczytuje go w każdej sesji, także w trybie bezobsługowym claude -p.

Katalog prod-artifacts/ zawiera ostatni produkcyjny manifest.json, więc budują się tylko twoje zmiany. Przed każdym uruchomieniem pobierz ten manifest.json z artefaktów CI ostatniego produkcyjnego przebiegu do prod-artifacts/; bez niego state:modified i --defer kończą się błędem.

Serwer MCP dbt od dbt Labs (PyPI dbt-mcp, wymaga Pythona 3.12 lub 3.13) daje agentowi lineage, szczegóły węzłów, dbt list, compile i show. Skille agenta dbt (dbt-labs/dbt-agent-skills) uczą konwencji dbt, na przykład pisania testów jednostkowych. Poniższe polecenia wyłączają narzędzia serwera run, build, test, clone i docs, więc każde budowanie przechodzi przez skrypt bramek:

Okno terminala
# Terminal, w katalogu głównym projektu dbt. Wymaga uv i dbt w PATH (albo ustaw DBT_PATH).
claude mcp add dbt -e DBT_PROJECT_DIR="$PWD" -e DISABLE_TOOLS=run,build,test,clone,docs -- uvx dbt-mcp
# W prompcie Claude Code: zainstaluj skille jako plugin
/plugin marketplace add dbt-labs/dbt-agent-skills
/plugin install dbt@dbt-agent-marketplace

Narzędzie show serwera nadal wykonuje SQL przez twój profiles.yml, więc domyślnym targetem musi być dev. Dostęp do hurtowni poza dbt opisuje strona serwery MCP dla baz danych.

Oczekiwane wiersze zapisz przed SQL. Testy jednostkowe dbt (klucz unit_tests:, dbt Core 1.8 i nowsze) przyjmują ustalone wiersze wejściowe i sprawdzają wynik, więc agent nie przejdzie ich zgadywaniem. To pętla TDD (test-driven development) zastosowana do SQL.

Refaktoryzację udowadniają dane, a nie czytanie diffu. Pakiet audit_helper (dbt Hub dbt-labs/audit_helper) porównuje twoją deweloperską wersję modelu z relacją produkcyjną wiersz po wierszu i klasyfikuje każdą różnicę. Prompt agreguje wynik, bo dbt show domyślnie wypisuje tylko pięć wierszy, a makro zwraca najwyżej 20 przykładowych wierszy na status.

Agenci słabo edytują JSON pliku .ipynb. Sparuj każdy notatnik ze zwykłym skryptem przez Jupytext (jupytext --set-formats ipynb,py:percent notebook.ipynb), każ agentowi edytować plik .py, a wynik udowodnij przez nbval, który wykonuje notatnik od zera na czystym kernelu.

Jak zweryfikować zmiany w danych od agenta bez czytania każdej linii?

Dział zatytułowany „Jak zweryfikować zmiany w danych od agenta bez czytania każdej linii?”

Zbierz bramki w jednym skrypcie, który uruchamia każde narzędzie, każdy człowiek i CI. Skrypt odmawia pracy na targecie prod i przed właściwym budowaniem buduje z zerową liczbą wierszy:

#!/usr/bin/env bash
# scripts/verify-dbt.sh: dev target only. Delete the lines your project does not use.
set -euo pipefail
TARGET="${DBT_TARGET:-dev}"
if [ "$TARGET" = "prod" ]; then echo "refusing to run against prod"; exit 1; fi
SEL=(--select state:modified+ --defer --state prod-artifacts --target "$TARGET")
[ -d dbt_packages ] || dbt deps # needs network; skipped once packages are installed
dbt parse --warn-error --target "$TARGET"
dbt build "${SEL[@]}" --empty
dbt build "${SEL[@]}"
sqlfluff lint models/
pytest --nbval-lax notebooks/
echo "PASS all data gates"

Raz nadaj skryptowi prawo wykonania, żeby reguły zezwoleń poniżej mogły go wywołać bez prefiksu bash:

Okno terminala
chmod +x scripts/verify-dbt.sh

Człowiek zatwierdza tylko dwie rzeczy: porównanie wierszy przy każdej zmianie modelu, który zasila dashboard lub eksport, oraz każde --full-refresh modelu inkrementalnego. Oba trafiają do pakietu dowodów pull requesta. Żeby uruchamiać bramki bez nadzoru, zapisz ten prompt „naprawiaj, aż przejdzie” jako prompts/dbt-gates.txt:

Okno terminala
# Terminal, na zaufanej gałęzi. Edycje dozwolone; powłoka ograniczona do skryptu
# bramek; narzędzia MCP dbt dozwolone (run/build/test/clone/docs wyłączone na serwerze).
claude -p "$(cat prompts/dbt-gates.txt)" \
--allowedTools "Read,Grep,Glob,Edit,Bash(scripts/verify-dbt.sh),Bash(./scripts/verify-dbt.sh),mcp__dbt" \
--output-format json > dbt-gates.json