MOC — dny 1 a 2
1. Představení Azure Databricks 2. Výběr a konfigurace compute 3. Objekty v Unity Catalogu 4. Zabezpečení Unity Catalogu 5. Governance Unity Catalogu 6. Datové modelování 7. Ingest dat
MOC — pokračování
8. Čištění a transformace dat 9. Data quality constraints · mimo osnovu 10. Datové pipelines 11. Lakeflow Jobs 12. Vývojový lifecycle · mimo osnovu 13. Monitoring a optimalizace
🏠 Rozcestník kurzu
Pod čarou — den 3
14. Průřez Microsoft Fabric 15. Power BI + Fabric + Databricks 16. Migrace z Oracle
🏠 Rozcestník kurzu
DP-750 · Kapitola 12

Vývojový lifecycle v Azure Databricks

Git folders, branching a pull requesty, testování, Asset Bundles a nasazení přes CLI
🗂 Automatizace⚠️ Mimo osnovu zkráceného kurzu
ℹ️
Mimo osnovu zkráceného kurzu: tento modul je součástí oficiálního čtyřdenního kurzu DP-750. Ve zkrácené třídenní verzi ho na kurzu neprobíráme — kapitola slouží k samostudiu a odkazovaný lab k ní zůstává plně k dispozici.

Cíle kapitoly

  • Aplikovat best practices verzování kódu pomocí Git folders v Azure Databricks
  • Pracovat s feature branchemi, pull requesty a řešením merge konfliktů
  • Navrhnout testovací strategii — unit testy s pytest, integrační, end-to-end a UAT
  • Nakonfigurovat Declarative Automation Bundle (databricks.yml, variables, targets)
  • Nasadit bundle do dev a prod prostředí přes Databricks CLI
12.1

Git folders: verzování přímo ve workspace

Git folders (dříve známé jako Repos) přinášejí do Azure Databricks workspace vizuálního Git klienta a API. Přímo z workspace klonujete repozitáře, vytváříte branche, commitujete a pushujete — bez přepínání do externích nástrojů. Podporovaní provideři: Azure DevOps, GitHub, GitLab a Bitbucket.

Git folder vytvoříte přes Workspace → Create → Git folder: zadáte URL repozitáře, providera a název složky. Po naklonování se obsah repozitáře objeví ve workspace a můžete rovnou pracovat s notebooky, Python soubory i SQL skripty.

💡
Tip: Každý člen týmu má mít vlastní Git folder napojený na sdílený repozitář. Když víc lidí sdílí jednu složku, přepnutí branche jedním uživatelem změní obsah všem — zdroj velmi obtížně laditelných „záhad".

Před začátkem práce vždy pull — pravidelné stahování změn minimalizuje integrační konflikty. Počítejte s tím, že pull, který změní zdrojový kód notebooku, resetuje jeho stav: outputy buněk, komentáře a verze notebooku se vyčistí podle nového obsahu.

K pořádku v repozitáři patří: .gitignore pro dočasné výstupy, credentials a environment-specifické konfigurace (na už trackované soubory se aplikuje až po jejich explicitním odebrání z Gitu), logická struktura složek a mazání staré branche u providera po merge — lokální branche přežívají až 30 dní po smazání remote branche.

Limity Git folders a sparse checkout▼

Pracovní branch je limitována na 1 GB a Databricks doporučuje držet počet assetů pod 20 000 (přesné aktuální limity ověřte v dokumentaci). Pro velké monorepo použijte sparse checkout — naklonujete jen adresáře, které skutečně potřebujete.

12.2

Branching, pull requesty a konflikty

Feature branch izoluje rozpracovanou práci od hlavní větve. V Git dialogu (tlačítko s názvem branche u notebooku) zvolíte Create branch, pojmenujete ji a založíte typicky z main. Konzistentní pojmenování se vyplatí:

VzorPoužití
feature/nazev-funkcenová funkcionalita
bugfix/popis-problemuopravy chyb
users/jmeno/popisosobní experimenty
⚠️
Pozor: Přepnutí branche může smazat workspace assety, které cílová branch neobsahuje — nasdílené či záložkované notebooky náhle zmizí. Necommitnuté změny se při přepnutí přenášejí na novou branch, pokud nekonfliktují; co přenést nechcete, zahoďte předem.

Commit děláte z Git dialogu: UI zvýrazní změněné soubory, ukáže vizuální diff, napíšete popisnou commit message a dáte Commit & Push. Pull request pak vytváříte a reviewujete v rozhraní Git providera — Databricks poskytuje Git operace, code review žije u providera. Do chráněné main se typicky přímo commitovat nedá; jde se přes feature branch a PR.

Git workflow: branch → PR → merge → deploy main (chráněná) merge feature/cdr-cleanup commity v Git folderu (Databricks workspace) Pull request review + CI testy (Git provider) Deploy bundle → prod (12.5) každý vývojář pracuje na vlastní branchi ve vlastním Git folderu — konflikty se řeší malé a brzy
Doporučený týmový workflow: feature branch v Git folderu, pull request u Git providera, po merge automatizovaný deploy.

Merge konflikty vznikají, když víc lidí změní stejné řádky. Git folders UI nabízí seznam konfliktních souborů a tři cesty: Keep all current changes, Take all incoming changes, nebo ruční editaci souboru s konfliktními markery (<<<<<<< HEAD … ======= … >>>>>>>) a Mark As Resolved. Pak Continue Merge/Continue Rebase — nebo Abort, pokud jste sáhli vedle.

Notebook outputy a formáty souborů▼

U notebooků ve zdrojových formátech (.py, .sql, .scala, .r) se outputy buněk do commitů nezahrnují — v repozitáři je čistý kód, diffy jsou čitelné. Pokud outputy verzovat potřebujete, použijte formát IPYNB. Pro data engineering pipeline je zdrojový formát téměř vždy lepší volba.

📚 Do hloubky na Learn: Work with pull requests · Resolve merge conflicts (EN)
12.3

Testovací strategie: pyramida, pytest, integrace

Dobrá testovací strategie kopíruje testovací pyramidu: hodně rychlých unit testů dole, méně integračních uprostřed, hrstka end-to-end testů a UAT scénářů nahoře.

Testovací pyramida UAT End-to-end Integrační testy Unit testy (pytest) byznys validace · staging · stakeholdeři celá pipeline · minuty · deployment pipeline spolupráce komponent · sekundy · test katalog izolované funkce · milisekundy · syntetická data ← méně testů, širší záběr více testů, rychlejší zpětná vazba →
Testovací pyramida: čím výše, tím méně testů, delší běh a širší záběr — od funkcí po byznys scénáře.

Unit testy testují jednotlivé funkce v izolaci. Klíčové doporučení Databricks: transformační logiku držte v .py modulech mimo notebooky a do notebooků ji importujte — testuje se pak snadno standardním pytest. Testovací soubory pojmenujte test_*.py nebo *_test.py:

PYTHON
import pytest
import pandas as pd
from transforms import filter_country_region

@pytest.fixture
def sample_data():
    # synteticka data se strukturou produkce - zadna citliva data
    return pd.DataFrame({
        "iso_code": ["USA", "USA", "CAN", "GBR"],
        "value": [100, 200, 150, 175],
    })

def test_filter_default(sample_data):
    result = filter_country_region(sample_data)
    assert len(result) == 2
    assert all(result.iso_code == "USA")

Fixture @pytest.fixture dodává znovupoužitelná syntetická data — testujete strukturu a logiku, ne produkční obsah. Testy spustíte i přímo v notebooku:

PYTHON
%pip install pytest

import pytest, sys
sys.dont_write_bytecode = True   # zadna cache na readonly filesystem

retcode = pytest.main(["tests/", "-v", "-p", "no:cacheprovider"])
assert retcode == 0, "Testy selhaly - zkontrolujte vystup vyse"
💡
Tip: Navrhujte funkce s předvídatelným návratovým typem. Funkce vracející „DataFrame nebo False" se testuje mizerně — ať vrací vždy DataFrame, klidně prázdný.
Typ testuOvěřujeRozsahRychlost
Unitjednotlivé funkcefunkce/třída, syntetická datamilisekundy
Integračníspolupráci komponentvíce komponent, testovací katalogsekundy
End-to-endcelý workflowkompletní pipelineminuty
UATbyznys požadavkybyznys scénáře, stagingdle scénáře

Integrační testy běží proti skutečným Databricks zdrojům — čtou testovací tabulku, spustí transformaci a ověří schéma a typy výstupu. Vytvořte pro ně dedikovaný testovací katalog/schéma s reprezentativním vzorkem dat. End-to-end testy simulují celý denní běh (setup vstupů → spuštění pipeline → asserty nad výstupní tabulkou → cleanup); pouštějte je v deployment pipeline nebo mimo špičku, ne na každý commit. UAT pak znamená: akceptační kritéria dohodnutá se stakeholdery předem, staging prostředí zrcadlící produkci a připravené scénáře (třeba notebook s rekonciliací měsíčních tržeb proti finančnímu systému).

⚠️
Pozor: Integrační ani e2e testy nikdy nepouštějte proti produkčním tabulkám. Izolované testovací prostředí se strukturou produkce, ale bez citlivých dat, je nutná podmínka — ne nice-to-have.
12.4

Declarative Automation Bundles: konfigurace a balení

Declarative Automation Bundles — dříve známé jako Databricks Asset Bundles (DAB); starší materiály a slidy používají původní název — jsou infrastructure-as-code přístup k nasazování Databricks zdrojů. Joby, pipeline a další resources popíšete v YAML souborech a stejnou definici pak deklarativně nasazujete do dev, stagingu i produkce. Dokumentace: „Declarative Automation Bundles (formerly known as Databricks Asset Bundles)".

Základem je soubor databricks.yml v kořeni projektu:

YAML
bundle:
  name: order-processing

include:
  - resources/*.yml      # rozdeleni konfigurace do vice souboru

variables:
  environment:
    description: Nazev prostredi
    default: development

resources:
  jobs:
    etl_pipeline:
      name: ${var.environment}-order-pipeline
      tasks:
        - task_key: extract
          notebook_task:
            notebook_path: ./notebooks/extract.py
        - task_key: transform
          depends_on:
            - task_key: extract
          notebook_task:
            notebook_path: ./notebooks/transform.py

Mapování bundle definuje identitu projektu, resources nasazované objekty (nejčastěji joby s tasky, závislostmi přes depends_on a parametry přes base_parameters), include přibalí další YAML soubory. Cesty uvádějte relativně ke kořeni bundlu. Variables s substitucí ${var.nazev} nahrazují hardcodované hodnoty — plnit je lze defaultem, per-target overridem, CLI volbou --var="klic=hodnota" nebo proměnnou prostředí s prefixem BUNDLE_VAR_.

Targets reprezentují nasazovací prostředí. Zásadní jsou režimy: mode: development prefixuje názvy resources [dev uživatel], pozastaví všechny scheduly a povolí souběžné běhy — dev nasazení si nešlape po produkci. mode: production naopak validuje shodu Git branche a doporučuje deploy přes service principal:

YAML
targets:
  dev:
    default: true
    mode: development
    variables:
      environment: development
  staging:
    presets:                       # jemne ladeni bez plneho rezimu
      name_prefix: staging_
      trigger_pause_status: PAUSED
  prod:
    mode: production
    workspace:
      host: https://adb-prod.azuredatabricks.net
    variables:
      environment: production
Bundle konfigurace v Pythonu (Public Preview)▼

Vedle YAML lze bundle definovat i jako Python kód — joby a resources popíšete programově. V době psaní jde o Public Preview a YAML zůstává nejběžnější cestou; aktuální stav ověřte v dokumentaci.

12.5

Deploy bundlu přes Databricks CLI

Nasazení řídí Databricks CLI čtyřmi kroky: validace, náhled, deploy, ověření. CLI si při deployi ukládá stav do workspace — ví, co vytvořilo, a při dalším nasazení resources aktualizuje, doplní nové a smaže ty, které z konfigurace zmizely.

BASH
# autentizace vuci workspace
databricks auth login --host https://adb-1234567890123456.7.azuredatabricks.net

databricks bundle validate            # kontrola syntaxe a konfigurace
databricks bundle plan                # nahled: co se vytvori / zmeni / smaze
databricks bundle deploy -t dev       # nasazeni do dev targetu
databricks bundle summary             # prehled nasazenych resources + URL
databricks bundle open etl_pipeline   # otevre resource v prohlizeci

# produkce v CI/CD: bez interaktivnich potvrzeni
databricks bundle deploy -t prod --auto-approve
PříkazCo dělá
bundle validateověří syntaxi, vypíše identitu bundlu (name, target, workspace, path)
bundle planukáže plánované akce (create/update/delete) bez provedení změn
bundle deploynahraje artefakty a vytvoří/aktualizuje resources v targetu (-t)
bundle summaryvypíše nasazené resources s přímými odkazy do UI
bundle run / bundle destroyspustí job z bundlu / odstraní nasazené resources
Bundle: jedna definice, více prostředí Bundle projekt (Git) databricks.yml resources/*.yml notebooks/ · src/ · tests/ variables + targets Databricks CLI validate → plan → deploy stav uložen ve workspace Dev workspace mode: development názvy s prefixem [dev user] scheduly pozastaveny deploy -t dev Prod workspace mode: production validace Git branche deploy pod service principalem CI/CD pipeline po merge do main --auto-approve deploy -t prod stejná definice resources — jiné hodnoty variables a jiný režim podle targetu
Tok nasazení bundlu: z Git projektu přes Databricks CLI do dev workspace ručně a do produkce přes CI/CD pod service principalem.
⚠️
Pozor: Identita nasazení = název bundlu + target + identita nasazujícího uživatele. Když do sdíleného prostředí deployuje každý člen týmu sám za sebe, vzniknou konfliktní paralelní nasazení. Domluvte si, kdo (ideálně který service principal) nasazuje do sdílených targetů.

Nejčastější zádrhely: chyby autentizace (řeší databricks auth login), lock konflikt po přerušeném nasazení (--force-lock), běžící joby z bundlu v okamžiku deploye (chování řídí --fail-on-active-runs) a varování o neznámých properties — obvykle stará verze CLI proti novějšímu schématu.

✓
Shrnutí: Celý lifecycle do sebe zapadá: kód žije v Git folders (12.1), změny jdou přes feature branch a PR (12.2), CI spouští pytest testy (12.3), a po merge nasadí pipeline tentýž bundle nejdřív do dev a pak do prod (12.4–12.5). Žádné ruční klikání konfigurace jobů v produkci — vše je v repozitáři. Orchestraci samotných jobů popisuje kapitola 11.
12.6

Lab 12: Implement Development Lifecycle Processes (45 minut)

Převezmete order-processing pipeline (čištění objednávek, normalizace status kódů, výpočet totálů s daní) a dotáhnete ji k produkční zralosti: napíšete pytest unit a integrační testy k modulu transforms.py, zabalíte job do Declarative Automation Bundle s dev/prod targety a nasadíte ho přes Databricks CLI (validate → plan → deploy).

▶ Otevřít lab na GitHubu (EN) · Learn modul k tématu — s krátkými výukovými videy

ℹ️
Poznámka: na kurzu lab prochází lektor jako demo. Postup je krokový a samoobslužný — pokud se na něj v rámci dne nedostane, projdete si ho samostatně.
✓
Sebekontrola: 1) Proč Databricks doporučuje držet transformační funkce v .py modulech mimo notebooky a jak to souvisí s pytest? 2) Co všechno automaticky změní mode: development na nasazených resources a proč? 3) Jaký je rozdíl mezi bundle plan a bundle deploy a kdy plan zachrání produkci?