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.
Quand choisissez-vous Databricks Workflows plutôt qu'Airflow ?
# 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'}
}
)Quels types de tasks Databricks Workflows supporte-t-il ? Comment gérez-vous les dépendances ?
# 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"}
}
]
}Comment intégrez-vous Git avec Databricks Repos pour un workflow CI/CD ?
# 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)Qu'est-ce que Databricks Asset Bundles ? Pourquoi remplacer les configurations manuelles ?
databricks bundle deploy synchronise la configuration dans l'environnement cible# 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.pyComment 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 }}Comment réduire les coûts de vos jobs Databricks en production ?
| Niveau | Maîtrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | Jobs Workflows, types de tasks, Git integration, job clusters | A configuré des jobs avec dépendances, utilise des job clusters, pointe sur des branches Git | Exécute en production sur des all-purpose clusters, config manuelle dans l'UI |
| Senior | Asset Bundles, CI/CD GitHub Actions, optimisation coûts, spot instances | A mis en place un pipeline CI/CD avec DAB, réduit les coûts via spot + Photon | Ne sait pas ce que sont les Asset Bundles, pas de CI/CD sur les jobs Databricks |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.