AccueilBlogTest technique Databricks Workflows : orchestration et MLOps
Guide recrutement data

Test technique Databricks Workflows : orchestration et MLOps

Databricks Workflows est l orchestrateur natif de Databricks. En entretien, on évalue la capacité à l utiliser efficacement pour orchestrer des pipelines complexes avec des dépendances et du CI/CD.

Data Builder·Juin 2025·6 min de lecture·Data Engineer
Sommaire
  1. Concepts Workflows
  2. Tasks et dépendances
  3. Git integration
  4. Asset Bundles
  5. CI/CD Databricks
  6. Optimiser les coûts
  7. Grille

1Databricks Workflows vs Airflow

Question discriminante

Quand choisissez-vous Databricks Workflows plutôt qu'Airflow ?

  • Databricks Workflows — orchestrateur natif intégré dans la plateforme. Zéro infrastructure à gérer, monitoring dans l'UI Databricks, accès direct aux clusters
  • Avantages vs Airflow — pas de DAG Python à maintenir, clusters partagés entre tasks, monitoring unifié avec les notebooks, retry natif avec reprise depuis la task échouée
  • Limites vs Airflow — moins de connecteurs (pas de provider ecosystem), difficile d'orchestrer des ressources hors Databricks, moins mature pour les pipelines complexes
  • Règle pratique — si 90% de votre traitement est dans Databricks : Workflows. Si vous orchestrez des services externes (Fivetran, dbt Cloud, APIs) : Airflow ou Prefect
  • Coexistence — beaucoup d'équipes utilisent Airflow pour orchestrer et déclenchent des jobs Databricks via l'opérateur DatabricksSubmitRunOperator
# Déclencher un job Databricks depuis Airflow from airflow.providers.databricks.operators.databricks import DatabricksSubmitRunOperator dbt_task = DatabricksSubmitRunOperator( task_id='run_dbt_databricks', databricks_conn_id='databricks_default', new_cluster={ 'spark_version': '14.3.x-scala2.12', 'node_type_id': 'i3.xlarge', 'num_workers': 4 }, notebook_task={ 'notebook_path': '/Repos/production/dbt_run', 'base_parameters': {'env': 'production', 'target': 'prod'} } )

2Tasks et dépendances complexes

Question discriminante

Quels types de tasks Databricks Workflows supporte-t-il ? Comment gérez-vous les dépendances ?

  • Notebook task — exécuter un notebook Databricks avec des paramètres. Le type le plus courant
  • Python script — exécuter un script .py depuis un repo Git ou un volume Unity Catalog
  • dbt task — intégration native avec dbt Core ou dbt Cloud. Lance les modèles dbt sur un cluster Databricks
  • SQL task — exécuter des requêtes SQL sur un SQL Warehouse (serverless ou classique)
  • Pipeline task — déclencher un pipeline Delta Live Tables
  • Conditions run-if — ALL_SUCCESS (défaut), AT_LEAST_ONE_SUCCESS, NONE_FAILED, ALL_DONE, AT_LEAST_ONE_FAILED. Permet des branches conditionnelles
# Exemple de workflow JSON (config as code) { "name": "pipeline-data-quotidien", "tasks": [ { "task_key": "ingestion", "notebook_task": {"notebook_path": "/Repos/prod/ingestion"}, "job_cluster_key": "ingestion-cluster" }, { "task_key": "transformation", "depends_on": [{"task_key": "ingestion"}], "dbt_task": { "project_directory": "/Repos/prod/dbt_project", "commands": ["dbt run --select tag:daily"] }, "job_cluster_key": "transform-cluster" }, { "task_key": "notification", "depends_on": [{"task_key": "transformation"}], "run_if": "ALL_SUCCESS", "notebook_task": {"notebook_path": "/Repos/prod/notify_success"} } ] }

3Git integration dans Databricks

Question discriminante

Comment intégrez-vous Git avec Databricks Repos pour un workflow CI/CD ?

  • Databricks Repos — cloner un repo GitHub/GitLab/Bitbucket directement dans Databricks. Synchronisation manuelle ou via API
  • Branches par environnement — main → production, develop → staging, feature/* → dev personnel
  • Jobs pointent sur des branches — le job de prod pointe sur main, le job de staging sur develop. Promotion = merge PR
  • Code review obligatoire — les notebooks sont des fichiers Python dans le repo. Pull requests normales avec revue de code
# Mettre à jour un repo Databricks via API (depuis CI/CD) import requests def update_databricks_repo(repo_id, branch): resp = requests.patch( f"{DATABRICKS_HOST}/api/2.0/repos/{repo_id}", headers={"Authorization": f"Bearer {TOKEN}"}, json={"branch": branch} ) return resp.json() # Dans GitHub Actions : update repo → trigger job update_databricks_repo(PROD_REPO_ID, "main") trigger_job(PROD_JOB_ID)

4Asset Bundles : IaC pour Databricks

Question discriminante

Qu'est-ce que Databricks Asset Bundles ? Pourquoi remplacer les configurations manuelles ?

  • DAB (Databricks Asset Bundles) — définir jobs, pipelines DLT, permissions, clusters en YAML versionné dans Git
  • Environnements — dev/staging/prod avec des variables différentes (cluster size, credentials, targets) dans le même fichier
  • Deploy via CLIdatabricks bundle deploy synchronise la configuration dans l'environnement cible
  • vs configuration manuelle — la config manuelle dans l'UI n'est pas versionnée, pas reproductible, pas testable
# databricks.yml - Asset Bundle bundle: name: pipeline-ventes variables: cluster_size: default: "Small" targets: dev: mode: development variables: cluster_size: "Small" prod: mode: production variables: cluster_size: "Large" resources: jobs: pipeline_quotidien: name: "Pipeline Ventes Quotidien" schedule: quartz_cron_expression: "0 0 6 * * ?" tasks: - task_key: ingestion notebook_task: notebook_path: ./notebooks/ingestion.py

5CI/CD avec Databricks Asset Bundles

Question discriminante

Comment configurez-vous un pipeline CI/CD pour déployer des jobs Databricks ?

# .github/workflows/deploy.yml name: Deploy Databricks on: push: branches: [main] pull_request: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Databricks CLI uses: databricks/setup-cli@main - name: Validate bundle (PR) if: github.event_name == 'pull_request' run: databricks bundle validate --target staging env: DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }} DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }} - name: Deploy to production (main) if: github.ref == 'refs/heads/main' run: databricks bundle deploy --target prod env: DATABRICKS_HOST: ${{ secrets.DATABRICKS_PROD_HOST }} DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_PROD_TOKEN }}

6Optimiser les coûts des Workflows

Question discriminante

Comment réduire les coûts de vos jobs Databricks en production ?

  • Job clusters vs All-purpose — toujours utiliser des job clusters pour la production. Ils s'éteignent à la fin du job. Les all-purpose restent actifs et coûtent en permanence
  • Spot instances pour les workers — économie de 50-80%. Configurer un fallback on-demand si les spots ne sont pas disponibles
  • Photon Engine — activer Photon sur les tasks SQL/DataFrame. Jusqu'à 12x plus rapide = moins de DBUs consommés
  • Serverless pour les tâches SQL — SQL Warehouse serverless : facturation à la seconde, démarrage rapide, zéro gestion
  • Taille de cluster adaptée — commencer petit (2-4 workers) et mesurer. Beaucoup de pipelines n'ont pas besoin de 8 workers

7Grille par niveau

NiveauMaîtriseSignal GONO-GO
ConfirméJobs Workflows, types de tasks, Git integration, job clustersA configuré des jobs avec dépendances, utilise des job clusters, pointe sur des branches GitExécute en production sur des all-purpose clusters, config manuelle dans l'UI
SeniorAsset Bundles, CI/CD GitHub Actions, optimisation coûts, spot instancesA mis en place un pipeline CI/CD avec DAB, réduit les coûts via spot + PhotonNe sait pas ce que sont les Asset Bundles, pas de CI/CD sur les jobs Databricks

Vous recrutez un Data Engineer Databricks ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.