0Pricing
SQL Academy · บทเรียน

การทดสอบ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน DBT (เครื่องมือสร้างข้อมูล)
  2. SQLFluff และการตรวจรูปแบบโค้ด
  3. การทดสอบ SQL: การทดสอบ dbt, Great Expectations
  4. CI สำหรับการเปลี่ยนแปลงโครงสร้างข้อมูล (GitHub Actions)
← กลับไปที่ SQL Academy