AccueilBlogTest technique Great Expectations avancé : suites complexes, profiling, CI
Guide recrutement data

Test technique Great Expectations avancé : suites complexes, profiling, CI

Au-delà des expectations basiques, Great Expectations permet des vérifications statistiques avancées et une intégration complète dans les pipelines CI/CD. En entretien Senior, on évalue ce niveau.

Data Builder·Juin 2025·6 min de lecture·Data Engineer · Analytics Engineer
Sommaire
  1. Profiling automatique
  2. Expectations statistiques
  3. Custom expectations
  4. CI/CD integration
  5. Alerting et notifications
  6. GE vs Soda vs dbt-expectations
  7. Grille

1Profiling automatique : générer des expectations

Question discriminante

Comment utilisez-vous le profiling GE pour générer automatiquement des expectations de départ ?

import great_expectations as gx from great_expectations.profile.basic_dataset_profiler import BasicDatasetProfiler context = gx.get_context() # Créer un batch depuis pandas source = context.sources.add_pandas('pandas_source') asset = source.add_dataframe_asset('orders') batch = asset.add_batch_parameters(dataframe=df_orders) # Profiling automatique : génère une suite d expectations profiler = BasicDatasetProfiler() suite, _ = profiler.profile(batch) # Résultat : suite d expectations basée sur les données réelles # - expect_column_values_to_not_be_null (si < 5% nulls) # - expect_column_values_to_be_between (min/max observés) # - expect_column_values_to_be_in_set (si faible cardinalité) context.save_expectation_suite(suite) print(f'Generated {len(suite.expectations)} expectations')

2Expectations statistiques avancées

Question discriminante

Quelles expectations GE utilisez-vous pour valider la distribution statistique des données ?

batch.expect_column_mean_to_be_between('amount', min_value=40, max_value=200) batch.expect_column_median_to_be_between('amount', min_value=30, max_value=150) batch.expect_column_stdev_to_be_between('amount', min_value=10, max_value=500) # Distribution : valider que les quantiles sont dans les bornes batch.expect_column_quantile_values_to_be_between( 'amount', quantile_ranges={ 'quantiles': [0.05, 0.25, 0.50, 0.75, 0.95], 'value_ranges': [[0, 10], [15, 40], [30, 100], [80, 200], [150, 500]] } ) # Correlation entre colonnes batch.expect_column_pair_values_to_be_equal( 'total_amount', 'quantity * unit_price' ) # Distribution des catégories batch.expect_column_most_common_value_to_be_in_set( 'status', ['completed', 'pending'] )

3Custom Expectations

Question discriminante

Comment créez-vous une custom expectation pour vérifier une règle métier spécifique ?

from great_expectations.expectations.expectation import ColumnPairMapExpectation from great_expectations.execution_engine import PandasExecutionEngine class ExpectDeliveryDateAfterOrderDate(ColumnPairMapExpectation): """Delivery date must be >= order date.""" map_metric = 'column_pair_values.a_greater_than_or_equal_b' examples = [{ 'data': { 'order_date': ['2024-01-01', '2024-01-02'], 'delivery_date': ['2024-01-03', '2024-01-01'] }, 'tests': [{ 'title': 'delivery after order', 'expect_success': False # la 2ème ligne échoue }] }] def validate_configuration(self, config): super().validate_configuration(config) # Utilisation dans schema.yml (via dbt-expectations style) batch.expect_delivery_date_after_order_date( column_A='delivery_date', column_B='order_date' )

4Intégration CI/CD complète

Question discriminante

Comment intégrez-vous GE dans votre pipeline CI/CD pour bloquer le déploiement si les données sont mauvaises ?

## GitHub Actions : validation GE avant déploiement dbt jobs: data_validation: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run Great Expectations run: | python -c " import great_expectations as gx context = gx.get_context(context_root_dir='./gx') result = context.run_checkpoint('daily_validation') if not result.success: print('DATA QUALITY FAILED') import sys; sys.exit(1) " env: SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }} - name: Run dbt if: success() # ne lancer dbt que si GE passe run: dbt run --target prod

5Alerting et notifications

Question discriminante

Comment configurez-vous des alertes GE qui notifient l équipe en cas d échec ?

## Checkpoint avec actions checkpoint = context.add_checkpoint( name='production_validation', validations=[{ 'batch_request': batch_request, 'expectation_suite_name': 'orders_suite' }], action_list=[ { 'name': 'store_validation_result', 'action': {'class_name': 'StoreValidationResultAction'} }, { 'name': 'slack_on_failure', 'action': { 'class_name': 'SlackNotificationAction', 'slack_webhook': '${ENV:SLACK_DATA_ALERTS_WEBHOOK}', 'notify_on': 'failure', 'renderer': { 'module_name': 'great_expectations.render.renderer', 'class_name': 'SlackRenderer' } } }, { 'name': 'update_data_docs', 'action': {'class_name': 'UpdateDataDocsAction'} } ] )

6GE vs Soda vs dbt-expectations

Question discriminante

Comment choisissez-vous entre Great Expectations, Soda et dbt-expectations ?

Great ExpectationsSodadbt-expectations
IntégrationPython, standaloneSaaS ou CLINative dbt YAML
ComplexitéÉlevéeFaibleFaible
Expectations customExcellentLimitéBon
Data DocsNatifVia CloudVia dbt docs
Idéal pourRègles complexes, Python-firstSimplicité, SLAÉquipes dbt-first

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméExpectations basiques, checkpoints, Data DocsA configuré un checkpoint avec alerte SlackN a utilisé que les tests YAML dbt basiques
SeniorProfiling automatique, custom expectations, CI/CD bloquantA créé des custom expectations, a intégré GE dans GitHub ActionsNe sait pas créer une custom expectation

Vous recrutez un Data Engineer ou Analytics Engineer ?

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