# Great Expectations 2026: Kiểm Tra Chất Lượng Dữ Liệu và Câu Hỏi Phỏng Vấn > Hướng dẫn toàn diện về framework Great Expectations 1.22 để kiểm tra chất lượng dữ liệu trong pipeline Python, bao gồm tích hợp Airflow và câu hỏi phỏng vấn data engineering. - Published: 2026-09-13 - Updated: 2026-09-13 - Author: Anthony Fillion-Maillet - Tags: great-expectations, data-quality, python, airflow, data-engineering - Reading time: 12 min --- Great Expectations (GX) là framework mã nguồn mở tiêu chuẩn để kiểm tra chất lượng dữ liệu trong các pipeline dữ liệu dựa trên Python. Phiên bản 1.22, phát hành vào tháng 8 năm 2026, củng cố các thay đổi API được giới thiệu trong GX 1.0 và thêm hỗ trợ thử nghiệm Python 3.14, trở thành công cụ quan trọng cho các data engineer xây dựng pipeline cấp sản xuất. > **GX Core vs GX Cloud** > > GX Core là thư viện mã nguồn mở (giấy phép Apache 2.0) với hơn 11.400 GitHub stars. GX Cloud là nền tảng SaaS được quản lý xây dựng trên nền tảng đó, cung cấp các công cụ cộng tác và bảng điều khiển giám sát thời gian thực. Bài viết này tập trung vào GX Core. ## Vấn Đề Great Expectations Giải Quyết Trong Pipeline Dữ Liệu Các pipeline dữ liệu thường thất bại một cách âm thầm. Một thay đổi schema ở upstream, một giá trị null ở nơi không nên có, một định dạng ngày thay đổi từ ISO sang Unix timestamp: những vấn đề này thường đến dashboard hoặc mô hình ML trước khi ai đó nhận ra. Great Expectations xử lý dữ liệu như code, áp dụng các assertion (gọi là Expectation) chạy tự động tại các checkpoint trong pipeline. Framework này tích hợp với [Apache Airflow](/blog/data-engineering/apache-airflow-pipeline-orchestration-dags-interview-2026), Databricks, Snowflake, và các dịch vụ lưu trữ đám mây như AWS S3 và Azure Blob Storage. Mỗi lần kiểm tra tạo ra Data Docs, các báo cáo HTML mà các stakeholder phi kỹ thuật có thể đọc được. ## Khái Niệm Cốt Lõi: Data Context, Data Sources, và Expectations GX 1.22 tổ chức việc kiểm tra xung quanh bốn thành phần: Data Context, Data Sources, Data Assets, và Expectation Suites. **Data Context** là đối tượng cấu hình trung tâm. Nó lưu trữ metadata cho Data Sources, Expectation Suites, Checkpoints, và Validation Results lịch sử. Trong hầu hết các dự án, một thư mục `gx/` duy nhất chứa các file cấu hình YAML và Data Docs được tạo ra. **Data Source** đại diện cho kết nối đến database, data warehouse, hoặc file system. **Data Asset** là tập hợp logic các record trong source đó, tương tự như một bảng hoặc result set của một query. ```python # gx_setup.py import great_expectations as gx # Initialize or load an existing Data Context context = gx.get_context() # Add a Pandas Data Source for local files data_source = context.data_sources.add_pandas("local_files") # Define a Data Asset pointing to a specific CSV pattern data_asset = data_source.add_csv_asset( name="user_events", filepath_or_buffer="data/user_events_*.csv" # Glob pattern ) ``` Cấu hình này cho phép GX kiểm tra bất kỳ CSV nào khớp với `user_events_*.csv` trong thư mục `data/`. ## Xây Dựng Expectation Suite Để Kiểm Tra Cột Expectation Suite là tập hợp các assertion đối với Data Asset. Mỗi Expectation khai báo một điều kiện phải đúng cho dữ liệu, chẳng hạn như "cột `user_id` không bao giờ được null" hoặc "cột `age` phải chứa giá trị từ 0 đến 120." ```python # build_suite.py import great_expectations as gx context = gx.get_context() # Create or retrieve an Expectation Suite suite = context.suites.add( gx.ExpectationSuite(name="user_events_suite") ) # Add Expectations to the suite suite.add_expectation( gx.expectations.ExpectColumnToExist(column="user_id") ) suite.add_expectation( gx.expectations.ExpectColumnValuesToNotBeNull(column="user_id") ) suite.add_expectation( gx.expectations.ExpectColumnValuesToBeBetween( column="age", min_value=0, max_value=120 ) ) suite.add_expectation( gx.expectations.ExpectColumnValuesToMatchRegex( column="email", regex=r"^[\w.-]+@[\w.-]+\.\w+$" ) ) # Save the suite to the Data Context context.suites.save(suite) ``` GX 1.0+ sử dụng API dựa trên class cho Expectations. Cú pháp dựa trên dictionary cũ (`expect_column_to_exist`) vẫn khả dụng nhưng cách tiếp cận dựa trên class cung cấp autocompletion IDE và type safety tốt hơn. ## Chạy Kiểm Tra Với Checkpoints Checkpoint kết nối Data Asset, Expectation Suite, và các Actions tùy chọn được kích hoạt khi kiểm tra thành công hoặc thất bại. Checkpoints là điểm vào chính cho kiểm tra tự động trong sản xuất. ```python # run_checkpoint.py import great_expectations as gx context = gx.get_context() # Create a Checkpoint checkpoint = context.checkpoints.add( gx.Checkpoint( name="user_events_checkpoint", validation_definitions=[ gx.ValidationDefinition( name="validate_user_events", data=context.data_sources.get("local_files") .get_asset("user_events") .build_batch_request(), suite=context.suites.get("user_events_suite") ) ], actions=[ gx.checkpoint.UpdateDataDocsAction(name="update_docs"), ] ) ) # Run the Checkpoint result = checkpoint.run() # Check overall success if result.success: print("All validations passed") else: print("Validation failures detected") for validation_result in result.run_results.values(): for expectation_result in validation_result.results: if not expectation_result.success: print(f" Failed: {expectation_result.expectation_config}") ``` Khi Checkpoint chạy, GX tải batch, áp dụng từng Expectation, và cập nhật Data Docs. Các kiểm tra thất bại có thể kích hoạt thông báo Slack, cảnh báo PagerDuty, hoặc dừng pipeline tùy thuộc vào Actions được cấu hình. ## Tích Hợp GX Với Apache Airflow DAGs Hầu hết các pipeline dữ liệu sản xuất sử dụng orchestrator như Apache Airflow. GX cung cấp [tích hợp Airflow chính thức](https://docs.greatexpectations.io/docs/core/introduction/community_resources/#integrations) bọc việc thực thi Checkpoint trong một operator. ```python # dags/user_events_pipeline.py from airflow import DAG from airflow.operators.python import PythonOperator from datetime import datetime import great_expectations as gx def validate_user_events(): """Run GX Checkpoint for user events data.""" context = gx.get_context(context_root_dir="/opt/airflow/gx") checkpoint = context.checkpoints.get("user_events_checkpoint") result = checkpoint.run() if not result.success: # Raise exception to fail the Airflow task raise ValueError("Data validation failed. Check Data Docs for details.") with DAG( dag_id="user_events_pipeline", start_date=datetime(2026, 1, 1), schedule_interval="@daily", catchup=False ) as dag: validate_task = PythonOperator( task_id="validate_user_events", python_callable=validate_user_events ) # Downstream tasks depend on validation passing # transform_task >> load_task ``` Đặt kiểm tra trước các task transformation ngăn dữ liệu xấu lan truyền xuống downstream. Mô hình này, đôi khi được gọi là "shift-left testing," bắt lỗi tại thời điểm ingestion thay vì sau khi các công việc compute tốn kém hoàn thành. ## Câu Hỏi Phỏng Vấn Phổ Biến Về Great Expectations Các cuộc phỏng vấn data engineering năm 2026 thường bao gồm câu hỏi về công cụ chất lượng dữ liệu. Dưới đây là các câu hỏi xuất hiện trong technical screen, cùng với câu trả lời phân biệt ứng viên có kinh nghiệm với junior. ### "Làm thế nào để triển khai data quality checks trong pipeline sản xuất?" Câu trả lời mạnh mẽ đề cập đến việc nhúng kiểm tra như một giai đoạn pipeline, không phải như một dashboard riêng biệt. Cụ thể: - Kiểm tra schema tại ingestion bắt các vấn đề cấu trúc ngay lập tức, ví dụ một string xuất hiện ở nơi integer được mong đợi - Kiểm tra business logic kiểm tra các ràng buộc domain như giá dương và phạm vi ngày - Cảnh báo tự động thông báo cho engineer trực khi kiểm tra thất bại, ngăn ngừa hỏng dữ liệu âm thầm - [dbt tests](/blog/data-engineering/dbt-data-transformations-testing-interview-2026) xử lý các kiểm tra lớp transformation trong khi GX xử lý kiểm tra ingestion và output ### "Sự khác biệt giữa Expectation Suite và Checkpoint là gì?" Expectation Suite chứa các assertion: cột nào phải tồn tại, phạm vi giá trị nào chấp nhận được, mẫu regex nào phải khớp. Nó định nghĩa *cái gì* cần kiểm tra. Checkpoint định nghĩa *khi nào* và *như thế nào* để chạy các kiểm tra đó. Nó kết nối Data Asset cụ thể (dữ liệu cần kiểm tra), Expectation Suite (quy tắc cần áp dụng), và Actions (điều gì xảy ra sau kiểm tra). ### "Làm thế nào để xử lý Expectations thay đổi theo môi trường?" Dữ liệu sản xuất thường có đặc điểm khác với dữ liệu staging. Hai cách tiếp cận: 1. **Parameterized Expectations**: Sử dụng biến môi trường hoặc tham số runtime để điều chỉnh ngưỡng. Ví dụ, `min_value=int(os.getenv("AGE_MIN", 0))`. 2. **Multiple Suites**: Duy trì các suite riêng biệt cho staging và production. Staging có thể cho phép null trên các field tùy chọn để kiểm tra luồng dữ liệu không đầy đủ. ### "Điều gì xảy ra khi Checkpoint thất bại trong pipeline được lên lịch?" Checkpoint trả về `CheckpointResult` với `success=False`. Hành vi pipeline phụ thuộc vào cách orchestrator xử lý thất bại: - Trong Airflow, raising exception đánh dấu task là thất bại, chặn các task downstream - Trong Databricks, notebook có thể thoát với trạng thái lỗi - Actions gắn vào Checkpoint có thể gửi tin nhắn Slack, tạo ticket Jira, hoặc kích hoạt thủ tục rollback ## Custom Expectations Cho Kiểm Tra Domain-Specific GX bao gồm hơn 300 Expectations tích hợp sẵn, nhưng các quy tắc domain-specific thường yêu cầu triển khai tùy chỉnh. Custom Expectation mở rộng base class và triển khai logic kiểm tra. ```python # custom_expectations/expect_valid_iso_country_code.py from great_expectations.expectations import Expectation from great_expectations.core import ExpectationConfiguration import pycountry class ExpectValidIsoCountryCode(Expectation): """Expect column values to be valid ISO 3166-1 alpha-2 country codes.""" column: str @classmethod def _prescriptive_template(cls) -> str: return "Column {column} values must be valid ISO country codes" def _validate(self, metrics, runtime_configuration=None, execution_engine=None): column_values = metrics.get("column_values") valid_codes = {c.alpha_2 for c in pycountry.countries} invalid_values = [ v for v in column_values if v is not None and v not in valid_codes ] return { "success": len(invalid_values) == 0, "result": { "observed_value": len(invalid_values), "unexpected_list": invalid_values[:10] # Sample } } ``` Đăng ký Custom Expectations bằng cách đặt chúng trong thư mục `great_expectations/plugins/` hoặc thêm module vào `plugins_directory` trong `great_expectations.yml`. ## Data Docs: Truyền Đạt Chất Lượng Đến Stakeholder Data Docs là các trang HTML tĩnh được tạo từ kết quả kiểm tra. Mỗi lần chạy tạo ra một trang hiển thị Expectations nào đã pass hoặc fail, với chi tiết drill-down về các giá trị không mong đợi. ```python # Generate and open Data Docs context = gx.get_context() context.build_data_docs() context.open_data_docs() # Opens browser ``` Đối với hệ thống sản xuất, Data Docs có thể được host trên S3, GCS, hoặc Azure Blob Storage với các kiểm soát truy cập phù hợp. [Nền tảng GX Cloud](https://greatexpectations.io/) cung cấp Data Docs được host với các tính năng cộng tác nhóm. ## Migration GX 1.0: Breaking Changes Từ 0.x Các team nâng cấp từ GX 0.x đối mặt với thay đổi API. Các khác biệt chính: | GX 0.x | GX 1.0+ | |--------|--------| | `context.create_expectation_suite()` | `context.suites.add()` | | `context.add_datasource()` | `context.data_sources.add_*()` | | Dictionary-based Expectations | Class-based Expectations | | `context.run_checkpoint()` | `checkpoint.run()` | [Hướng dẫn migration chính thức](https://docs.greatexpectations.io/docs/core/introduction/gx_overview/) bao gồm từng thay đổi. Đối với codebase lớn, migration từng bước sử dụng compatibility shims giảm thiểu rủi ro. ## Điểm Chính Về Chất Lượng Dữ Liệu Với GX 1.22 - Great Expectations 1.22 (Tháng 8 năm 2026) hỗ trợ Python 3.10 đến 3.13, với hỗ trợ thử nghiệm 3.14 thông qua biến môi trường `GX_PYTHON_EXPERIMENTAL` - Expectation Suites định nghĩa *cái gì* cần kiểm tra, Checkpoints định nghĩa *khi nào* và *như thế nào* - Nhúng Checkpoints như giai đoạn pipeline trong [DAGs Airflow](/blog/data-engineering/apache-airflow-pipeline-orchestration-dags-interview-2026) hoặc notebooks Databricks để bắt dữ liệu xấu tại ingestion - Custom Expectations xử lý các quy tắc domain-specific mà Expectations tích hợp không thể bao phủ - Data Docs cung cấp báo cáo HTML có thể đọc được bởi stakeholder; host trên cloud storage để truy cập sản xuất - Câu trả lời phỏng vấn nên nhấn mạnh chất lượng dữ liệu như một giai đoạn pipeline được nhúng, không phải dashboard bổ sung --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/vi/blog/data-engineering/great-expectations-data-quality-validation-interview-2026