dbt et Snowflake forment la stack analytique la plus répandue en 2025. En entretien Senior, on évalue la capacité à architecturer cette stack de manière robuste, testée et économique.
Décrivez l architecture complète d une stack dbt + Snowflake bien structurée.
# Architecture dbt + Snowflake de référence
SNOWFLAKE
├── RAW_DB # données brutes, jamais modifiées
│ ├── FIVETRAN/ # ingestion via Fivetran
│ └── AIRBYTE/ # ingestion via Airbyte
├── DEV_DB # environnement de développement
│ └── ANALYTICS/ # schémas dbt dev (par développeur)
└── PROD_DB # production
├── STAGING/ # modèles staging dbt
├── INTERMEDIATE/# modèles intermédiaires
└── MARTS/ # tables consommées par la BI
# dbt profiles.yml
my_project:
target: dev
outputs:
dev:
type: snowflake
account: mon_compte
database: DEV_DB
schema: '{{ env_var("DBT_SCHEMA", "analytics_" ~ env_var("USER")) }}'
warehouse: DEV_WH
prod:
database: PROD_DB
schema: MARTS
warehouse: PROD_WHComment organisez-vous staging, intermediate et marts dans un projet dbt ?
# dbt_project.yml - configuration par layer
models:
mon_projet:
staging:
+schema: staging
+materialized: view # vues légères
+tags: ['staging']
intermediate:
+schema: intermediate
+materialized: view
+tags: ['intermediate']
marts:
+schema: marts
+materialized: table # tables pour la BI
finance:
+materialized: table
marketing:
+materialized: table
+tags: ['marts']
seeds:
+schema: seeds
+tags: ['seed']Quels paramètres Snowflake optimisez-vous pour vos modèles dbt ?
-- Cluster Key sur les grandes tables marts
ALTER TABLE PROD_DB.MARTS.FCT_ORDERS
CLUSTER BY (order_date, region);
-- Incremental model dbt optimisé
{{ config(
materialized='incremental',
unique_key='order_id',
cluster_by=['order_date'],
on_schema_change='append_new_columns',
snowflake_warehouse='TRANSFORM_WH_M'
) }}
SELECT *
FROM {{ ref('stg_orders') }}
{% if is_incremental() %}
WHERE order_date > (SELECT MAX(order_date) FROM {{ this }})
{% endif %}Comment mettez-vous en place le slim CI dbt pour limiter les coûts Snowflake en CI ?
# .github/workflows/dbt-ci.yml
jobs:
dbt_slim_ci:
steps:
- name: dbt build (models modifiés uniquement)
run: |
dbt build \
--select state:modified+ \
--defer \
--state ./prod-artifacts \
--target ci \
--exclude tag:slow
env:
SNOWFLAKE_ACCOUNT: ${{ secrets.SF_ACCOUNT }}
SNOWFLAKE_USER: ${{ secrets.SF_USER }}
SNOWFLAKE_PASSWORD: ${{ secrets.SF_PASSWORD }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dbt-artifacts
path: target/manifest.jsonComment réduisez-vous les coûts Snowflake de vos pipelines dbt ?
Comment assurez-vous que votre projet dbt reste maintenable dans le temps ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | Structure staging/marts, tests, déploiement manuel | A structuré un projet dbt en 3 layers, a configuré Snowflake warehouses | Met toute la logique dans les marts sans staging |
| Senior | Incremental models, slim CI, coûts maîtrisés, gouvernance | A mis en place le slim CI, utilise des incremental models, monitore les coûts | Ne sait pas ce qu est un incremental model, ne connaît pas le slim CI |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.