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.

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 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, 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.
# 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."
# 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.
# 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.
Sẵn sàng chinh phục phỏng vấn Data Engineering?
Luyện tập với mô phỏng tương tác, flashcards và bài kiểm tra kỹ thuật.
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 bọc việc thực thi Checkpoint trong một operator.
# 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 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:
-
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)). -
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.
# 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.
# 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 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 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.
Bắt đầu luyện tập!
Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.
Đ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 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
Bạn có tìm ra lỗi trong Data Engineering không?
Một đoạn mã thật, một lỗi ẩn, mỗi ngày một lượt. Không cần tài khoản để thử.

Viết bởi
Anthony Fillion-MailletNgười sáng lập SharpSkill
Lập trình viên fullstack hơn 10 năm. Anh điều hành SharpSkill và chịu trách nhiệm về mọi nội dung đăng tại đây.
Cập nhật ngày 13 tháng 9, 2026
Thẻ
Chia sẻ
Bài viết liên quan

Apache Spark với Python: Xây dựng Data Pipeline từng bước
Hướng dẫn xây dựng data pipeline ETL với PySpark 4.0 - từ đọc dữ liệu thô, làm sạch DataFrame đến tối ưu hiệu suất. Kèm ví dụ code thực tế.

Apache Beam vs Spark 2026: So Sánh Pipeline Hợp Nhất và Câu Hỏi Phỏng Vấn
Hướng dẫn toàn diện so sánh Apache Beam 2.76 và Spark 4.2 cho data engineering. Tìm hiểu sự khác biệt về kiến trúc, windowing, hiệu suất và các câu hỏi phỏng vấn thường gặp.

Apache Airflow năm 2026: Điều phối Pipeline, DAG và Câu hỏi Phỏng vấn
Hướng dẫn Apache Airflow 3.2 dành cho kỹ sư dữ liệu: xây dựng DAG với Task SDK, điều phối pipeline dữ liệu, asset partition, async task và câu hỏi phỏng vấn thực tế cho năm 2026.