การทดสอบ SQL: การทดสอบ dbt, Great Expectations
เขียนการทดสอบคุณภาพข้อมูลด้วย dbt (unique, not_null, accepted_values) และเขียนการตรวจสอบที่ละเอียดขึ้นด้วย Great Expectations
การทดสอบ SQL: การทดสอบ dbt, Great Expectations เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องทดสอบ SQL
ข้อมูลที่ไม่ดีมักมองไม่เห็นจนกว่าจะทำให้เกิดการตัดสินใจที่ผิดพลาด การทดสอบช่วยตรวจจับสิ่งต่อไปนี้:
- การเปลี่ยนแปลงของสคีมา (คอลัมน์ถูกลบ ชนิดข้อมูลเปลี่ยนแปลง)
- คุณภาพข้อมูล (NULL ในตำแหน่งที่ห้ามเป็น NULL ค่าซ้ำ ค่าอยู่นอกช่วง)
- ปัญหาการอ้างอิง (แถวกำพร้า)
- เงื่อนไขคงที่ทางธุรกิจ (รายได้ ≥ 0 ยอดรวมตรงกัน)
การทดสอบของ dbt: แบบติดตั้งมาให้
ประกาศการทดสอบแยกตามคอลัมน์ใน YAML:
# models/orders.yml
version: 2
models:
- name: orders
columns:
- name: id
tests:
- unique
- not_null
- name: user_id
tests:
- not_null
- relationships:
to: ref('users')
field: id
- name: status
tests:
- accepted_values:
values: ['pending', 'paid', 'cancelled']การเรียกใช้การทดสอบของ dbt
เรียกใช้การทดสอบทั้งหมด:
dbt test
dbt test --select orders
dbt build # = run + testการทดสอบแบบเดี่ยวที่กำหนดเอง
การทดสอบคือคำสั่ง SELECT ที่คืนค่าแถวเมื่อไม่ผ่าน:
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0การทดสอบทั่วไป
การทดสอบแบบมีพารามิเตอร์เพื่อใช้ซ้ำกับหลายคอลัมน์:
-- tests/generic/test_in_range.sql
{% test in_range(model, column_name, min, max) %}
SELECT * FROM {{ model }}
WHERE {{ column_name }} < {{ min }} OR {{ column_name }} > {{ max }}
{% endtest %}
-- Use it in YAML:
columns:
- name: age
tests:
- in_range:
min: 0
max: 120แพ็กเกจ dbt-utils
เพิ่มการทดสอบอื่น ๆ เช่น ชุดค่าผสมที่ไม่ซ้ำกัน expression_is_true, equal_rowcount และอื่น ๆ:
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
ทางเลือกที่มีความซับซ้อนมากกว่า — เฟรมเวิร์ก Python ที่มีไลบรารีข้อคาดหวังจำนวนมากและรายงานที่ละเอียด:
import great_expectations as ge
suite = context.add_or_update_expectation_suite('orders')
batch = context.get_validator(batch_request, expectation_suite_name='orders')
batch.expect_column_values_to_not_be_null('id')
batch.expect_column_values_to_be_between('total', 0, 10000)
results = context.run_checkpoint('orders_checkpoint')ควรใช้แต่ละแบบเมื่อใด
- การทดสอบของ dbt — ตัวเลือกแรกเมื่อใช้งาน dbt อยู่แล้ว มีน้ำหนักเบาและใช้ SQL เท่านั้น
- Great Expectations — เมื่อจำเป็นต้องมีรายงานที่ละเอียด การตรวจสอบที่ครอบคลุมกว่า หรือรูปแบบที่นอกเหนือจาก SQL (CSV/parquet)
ระดับความรุนแรงของการทดสอบ
dbt 1.0+ รองรับระดับความรุนแรงแบบเตือนเทียบกับข้อผิดพลาด:
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"การผสานรวมอย่างต่อเนื่อง
เรียกใช้การทดสอบในทุกคำขอผสาน — ห้ามผสานเมื่อไม่ผ่าน:
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"แดชบอร์ดคุณภาพข้อมูล
dbt-utils + dbt-expectations + Elementary สามารถเปลี่ยนผลการทดสอบให้เป็นแดชบอร์ด Grafana / Looker ได้
การทดสอบสคีมาเทียบกับการทดสอบแถว
ตรวจจับการถดถอยของสคีมาด้วย “snapshot” ของชนิดคอลัมน์ใน dbt ส่วนการทดสอบแถวช่วยตรวจจับข้อผิดพลาดของข้อมูล
สรุป
การทดสอบเปลี่ยน SQL จาก “เชื่อผมเถอะ” ให้เป็น “ผ่านการตรวจสอบแล้ว”
- การทดสอบของ dbt สำหรับการกำหนดแบบประกาศและการทำงานในคลังข้อมูล
- Great Expectations สำหรับการตรวจสอบที่ครอบคลุมและละเอียดกว่า
- เรียกใช้ในการผสานรวมอย่างต่อเนื่อง และหยุดกระบวนการเมื่อไม่ผ่าน
- ติดตามผลลัพธ์ในระยะยาว
ตรวจสอบความเข้าใจ
คุณต้องการสร้างการทดสอบของ dbt ที่ไม่ผ่านหากมีแถวใดก็ตามที่มีค่า total < 0 แนวทางที่ง่ายที่สุดคืออะไร
คำถามที่พบบ่อย
บทเรียน “การทดสอบ SQL: การทดสอบ dbt, Great Expectations” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทดสอบ SQL: การทดสอบ dbt, Great Expectations” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทดสอบ SQL: การทดสอบ dbt, Great Expectations”
เขียนการทดสอบคุณภาพข้อมูลด้วย dbt (unique, not_null, accepted_values) และเขียนการตรวจสอบที่ละเอียดขึ้นด้วย Great Expectations คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การทดสอบ SQL: การทดสอบ dbt, Great Expectations” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน DBT (เครื่องมือสร้างข้อมูล)
- SQLFluff และการตรวจรูปแบบโค้ด
- การทดสอบ SQL: การทดสอบ dbt, Great Expectations
- CI สำหรับการเปลี่ยนแปลงโครงสร้างข้อมูล (GitHub Actions)