Inhaltsverzeichnis28 Abschnitte
- Die zwei Paradigmen
- Databricks Notebooks
- IDE-basierte Entwicklung (VS Code, PyCharm)
- Side-by-Side-Vergleich
- Wann Notebooks nutzen
- 1. Datenexploration und EDA
- 2. Ad-hoc-Analyse
- 3. Teaching und Dokumentation
- 4. Delta-Live-Tables-Pipelines
- Wann IDE + Databricks Connect
- Databricks Connect aufsetzen (DBR 13.0+)
- Testbaren Code schreiben
- Voller Debugger-Support in VS Code
- Das Beste aus beiden Welten: Hybrid-Workflow
- Schritt 1: In Notebooks erkunden
- Schritt 2: Nach Python-Modulen extrahieren
- Schritt 3: In der IDE entwickeln
- Schritt 4: Via DABs deployen
- Databricks Repos für Notebook-Versionierung
- VS-Code-Extension: Die fehlende Brücke
- Entscheidungs-Framework
- FAQ
- Soll ich für Produktion in Notebooks oder Wheels gehen?
- Wie schwer ist Databricks Connect aufzusetzen?
- Können meine Tests lokal laufen, wenn ich nur Notebooks habe?
- Wie behandle ich Geheimnisse in lokalen IDE-Workflows?
- Was kostet Databricks Connect extra?
- Schluss
TL;DR: Notebooks für Exploration und Ad-hoc, IDE (VS Code + Databricks Connect) für produktiven Code. Reife Teams nutzen beides: in Notebooks erkunden, in
.py-Files extrahieren, in der IDE refaktorisieren und über DABs deployen.
Jeder Databricks-Data-Engineer steht früher oder später vor derselben Frage: Soll ich das in einem Notebook bauen oder einen richtigen IDE-Workflow aufsetzen? Die ehrliche Antwort: es kommt drauf an — und immer öfter nutzen die besten Teams beides strategisch. Dieser Guide zerlegt die Trade-offs und zeigt, wie du IDE-basierte Entwicklung mit Databricks-Clustern integrierst.
Die zwei Paradigmen
Databricks Notebooks
Databricks Notebooks sind browser-basierte, Cell-by-Cell-Execution-Environments, die direkt auf Databricks-Clustern laufen. Sie unterstützen Python, Scala, SQL, R und Shell-Commands in einem Dokument.
Kerneigenschaften:
- Live-Cluster-Verbindung out-of-the-box
- Reiche Visualisierungen und
display()-Command - Magic-Commands (
%sql,%scala,%sh,%run) - Kollaborativ (mehrere User, Comments)
- Versioniert via Databricks Repos oder Git
- Kein Local-Setup nötig
IDE-basierte Entwicklung (VS Code, PyCharm)
IDE-Workflows nutzen lokale Dev-Tools, verbunden mit Databricks via Databricks Connect — eine Library, die Spark-Operationen von deinem Laptop auf einen Remote-Databricks-Cluster proxyt.
Kerneigenschaften:
- Volles Language-Tooling (Autocomplete, Type-Checking, Refactoring)
- Lokale Test-Execution mit Mocking
- Standard-Git-Workflows
- CI/CD-Pipeline-Integration
- Unit-Testing-Frameworks (pytest)
- Code-Review via Pull-Requests
Side-by-Side-Vergleich
| Dimension | Databricks Notebooks | IDE + Databricks Connect |
|---|---|---|
| Setup-Zeit | Null | 30–60 Minuten |
| Autocomplete | Basic | Voll (IntelliSense, Pylance) |
| Refactoring | Manuell | Automatisiert (Rename, Extract) |
| Debugging | Print-Statements / display() | Voller Debugger mit Breakpoints |
| Testing | Manuelle Cell-Execution | pytest, unittest, Fixtures |
| Code-Review | Notebook-Diffs (begrenzt) | Volle PR-Diffs |
| Versionskontrolle | Databricks Repos | Natives Git |
| Kollaboration | Realtime-Co-Editing | Standard-Git-Branching |
| Datenexploration | Exzellent | Braucht Display-Workarounds |
| SQL-Support | Nativ %sql | Via SparkSession.sql() |
| Deployment | Direkter Run / Workflows | DABs, CI/CD-Pipelines |
| Lokales Testing | Nicht möglich | Möglich mit Mocking |
Wann Notebooks nutzen
Notebooks glänzen bei exploratorischer und interaktiver Arbeit:
1. Datenexploration und EDA
# Quick EDA workflow — notebooks shine here
df = spark.read.table("prod.silver.events")
# Interactive profiling
display(df.summary())
display(df.groupBy("event_type").count().orderBy("count", ascending=False))
-- Mixed SQL in the same environment
%sql
SELECT event_date, COUNT(*) as events, SUM(amount) as revenue
FROM prod.silver.events
WHERE event_date >= '2024-01-01'
GROUP BY event_date
ORDER BY event_date
2. Ad-hoc-Analyse
Wenn ein Stakeholder eine schnelle Antwort braucht, ist ein Notebook hochzufahren schneller als ein Python-Projekt mit Tests aufzusetzen.
3. Teaching und Dokumentation
Notebooks als lebende Dokumente — Narrative-Text, Code und Visualisierungen mischen:
# %md
# ## Revenue Analysis - Q1 2024
# Diese Sektion analysiert den Umsatzeinbruch vom 15. März.
# Root-Cause: ein Pricing-Engine-Bug (siehe JIRA-1234).
df = spark.sql("""
SELECT DATE(event_timestamp) as date, SUM(amount) as daily_revenue
FROM prod.silver.events
WHERE event_type = 'PURCHASE'
AND event_timestamp BETWEEN '2024-03-10' AND '2024-03-20'
GROUP BY 1 ORDER BY 1
""")
display(df) # renders inline chart
4. Delta-Live-Tables-Pipelines
DLT-Pipelines werden in Notebooks definiert:
import dlt
from pyspark.sql.functions import col, to_timestamp
@dlt.table
def silver_events():
return (
dlt.read("bronze_events_raw")
.withColumn("event_timestamp", to_timestamp(col("event_ts")))
.filter("event_type IS NOT NULL")
)
Wann IDE + Databricks Connect
IDEs gewinnen für produktionsreifen, wartbaren Code:
Databricks Connect aufsetzen (DBR 13.0+)
# Install Databricks Connect
pip install databricks-connect==14.3.*
# Configure
databricks configure
# Or set environment variables
export DATABRICKS_HOST="https://adb-WORKSPACE_ID.azuredatabricks.net"
export DATABRICKS_TOKEN="dapi..."
export DATABRICKS_CLUSTER_ID="your-cluster-id"
# your_module.py — runs locally, executes on Databricks cluster
from databricks.connect import DatabricksSession
spark = DatabricksSession.builder.getOrCreate()
def get_daily_revenue(start_date: str, end_date: str):
"""
Compute daily revenue for a date range.
"""
return spark.sql(f"""
SELECT
DATE(event_timestamp) AS event_date,
SUM(amount) AS total_revenue,
COUNT(*) AS transaction_count
FROM prod.silver.events
WHERE event_type = 'PURCHASE'
AND DATE(event_timestamp) BETWEEN '{start_date}' AND '{end_date}'
GROUP BY 1
ORDER BY 1
""")
Testbaren Code schreiben
# tests/test_revenue.py — runs entirely locally with mocked Spark
import pytest
from unittest.mock import patch
from pyspark.sql import SparkSession
@pytest.fixture(scope="session")
def local_spark():
return (
SparkSession.builder
.master("local[2]")
.appName("unit_tests")
.getOrCreate()
)
def test_get_daily_revenue_filters_correctly(local_spark):
test_data = [
("2024-01-15T10:00:00", "PURCHASE", 100.0),
("2024-01-16T11:00:00", "PURCHASE", 200.0),
("2024-01-17T12:00:00", "CLICK", 0.0), # should be excluded
]
df = local_spark.createDataFrame(
test_data,
["event_timestamp", "event_type", "amount"]
)
with patch("your_module.spark") as mock_spark:
mock_spark.sql.return_value = df.filter("event_type = 'PURCHASE'")
from your_module import get_daily_revenue
result = get_daily_revenue("2024-01-15", "2024-01-16")
assert result.count() == 2 # CLICK excluded
Voller Debugger-Support in VS Code
Breakpoints in VS Code setzen (F9) und durch PySpark-Code interaktiv steppen — Execution wird auf den Databricks-Cluster proxiert, während der Debugger lokal läuft. Du inspizierst DataFrames, prüfst Variablen-State und findest Bugs ohne deinen Code mit print()-Statements zu fluten.
Das Beste aus beiden Welten: Hybrid-Workflow
Die meisten reifen Teams nutzen einen Hybrid-Ansatz:
Exploration -> Notebook -> Extract to .py -> IDE -> Test -> Deploy
| | | | | |
Quick EDA Prototype Produktionisieren Refactor CI/CD Workflows
Schritt 1: In Notebooks erkunden
Notebooks für Discovery und schnelle Iteration. Code-Qualität noch egal.
Schritt 2: Nach Python-Modulen extrahieren
Sobald Logik stabil ist, vom Notebook in .py-Files extrahieren:
# Export notebook to Python script
databricks workspace export /Users/user@company.com/exploration/revenue_analysis \
--format SOURCE \
--output ./src/revenue_analysis.py
Schritt 3: In der IDE entwickeln
Refaktorisieren, Type Hints ergänzen, Tests schreiben, SOLID anwenden.
Schritt 4: Via DABs deployen
databricks bundle deploy --target prod
databricks bundle run nightly_revenue_job
Databricks Repos für Notebook-Versionierung
Wenn du manche Arbeit in Notebooks halten willst, nutze Databricks Repos:
# Push local changes to Databricks Repos
git push origin main
# Databricks Repos auto-syncs from Git
# Or sync via CLI
databricks repos update \
--path /Repos/user@company.com/your-repo \
--branch main
VS-Code-Extension: Die fehlende Brücke
Die Databricks-VS-Code-Extension überbrückt beide Welten:
- Workspace-Files und Cluster aus VS Code browsen
- Notebooks aus VS Code laufen lassen
- Lokale Files in den Databricks-Workspace synchen
- An laufende Cluster attachen
{
"databricks.host": "https://adb-WORKSPACE_ID.azuredatabricks.net",
"databricks.token": "dapi...",
"databricks.clusterId": "your-cluster-id"
}
Entscheidungs-Framework
Als Leitfaden für die Workflow-Wahl deines Teams:
Ist das exploratorisch / einmalig?
-> JA -> Notebook
-> NEIN -> Geht das in Produktion?
-> JA -> IDE + Databricks Connect
-> VLLT -> In Notebook starten, in IDE migrieren, wenn stabil
Codebase-Größe zählt auch:
- < 200 Zeilen, ein Zweck -> Notebook ist okay
- 200–500 Zeilen -> Notebook mit
%run-Imports - 500+ Zeilen, mehrere Module -> IDE
FAQ
Soll ich für Produktion in Notebooks oder Wheels gehen?
Wheels. Notebooks sind für Exploration und DLT-Pipelines. Wheels für reguläre produktive Jobs — testbar, versionierbar, mit Pinned Dependencies.
Wie schwer ist Databricks Connect aufzusetzen?
30–60 Minuten beim ersten Mal. Die Version muss zur DBR-Version des Clusters passen. Danach ist es transparent — du schreibst Code lokal, er läuft remote.
Können meine Tests lokal laufen, wenn ich nur Notebooks habe?
Schwierig. Notebook-Code lässt sich nicht direkt mit pytest testen. Daher die Empfehlung, in .py-Module zu extrahieren — das gibt dir lokale Test-Execution.
Wie behandle ich Geheimnisse in lokalen IDE-Workflows?
Datenbank-Tokens als Env-Vars (DATABRICKS_TOKEN), niemals in Code commiten. .env-Files in .gitignore. Für Produktion: Databricks Secret Scopes plus Service Principal.
Was kostet Databricks Connect extra?
Nichts — du zahlst weiterhin für die Cluster-Zeit. Aber: Compute geht auf den Cluster, nicht auf deinen Laptop. Plane Cluster-Laufzeit ein, wenn du oft Spark-Sessions startest.
Schluss
Weder Notebooks noch IDEs sind universell überlegen — sie sind komplementäre Werkzeuge für unterschiedliche Phasen des Data-Engineering-Lifecycles. Die produktivsten Teams nutzen Notebooks für Exploration und Kollaboration, IDEs für produktive Code-Qualität, und Databricks Connect, um die Grenze zwischen beiden zu verwischen.
Der entscheidende Shift: Notebooks als REPLs behandeln, nicht als Produktions-Artefakte. Logik extrahieren, testen und als richtige Python-Packages deployen — Notebooks als interaktiven Layer obenauf.
Tools wie Harbinger Explorer geben dir Sichtbarkeit darüber, welche Notebooks und Jobs in Produktion laufen, damit du immer weißt, was live ist und was noch in Entwicklung.
Stand: 14. Mai 2026.
Geschrieben von
Harbinger Team
Cloud-, Data- und AI-Engineer in DACH. Schreibt seit 2018 über infrastrukturkritische Tech-Entscheidungen — keine Marketing- Folien, sondern echte Trade-offs aus Production-Workloads.
Hat dir das geholfen?
Jede Woche ein neuer Artikel über DACH-Cloud, Data und AI — direkt in dein Postfach. Kein Spam, kein Marketing-Sprech.
Kein Spam. 1-Klick-Abmeldung. Datenschutz bei Loops.so.