בדיקת איכות הנתונים

במאמר הזה מוסבר איך להשתמש ב-Dataform core כדי ליצור טענות לגבי טבלאות ב-Dataform ולבדוק את קוד תהליך העבודה.

מידע על הצהרות

טענה היא שאילתת בדיקה של איכות הנתונים שמאתרת שורות שמפירות תנאי אחד או יותר שצוינו בשאילתה. אם השאילתה מחזירה שורות כלשהן, הטענה נכשלת. ‫Dataform מריץ הצהרות בכל פעם שהוא מעדכן את תהליך העבודה, והוא מתריע אם הצהרה כלשהי נכשלת.

‫Dataform יוצר באופן אוטומטי תצוגות ב-BigQuery שמכילות את התוצאות של שאילתות טענות שעברו קומפילציה. כפי שהוגדר בקובץ הגדרות תהליך העבודה,‏ Dataform יוצר את התצוגות האלה בסכימת טענות, שבה אפשר לבדוק את תוצאות הטענות.

לדוגמה, עבור סכימת ברירת המחדל dataform_assertions, ‏ Dataform יוצר תצוגה ב-BigQuery בפורמט הבא: dataform_assertions.assertion_name.

אפשר ליצור הצהרות לכל סוגי הטבלאות ב-Dataform: טבלאות, טבלאות מצטברות, תצוגות (views) ותצוגות חומריות (materialized views).

אפשר ליצור הצהרות בדרכים הבאות:

לפני שמתחילים

  1. נכנסים לדף Dataform במסוף Google Cloud .

    מעבר לדף Dataform

  2. בוחרים מאגר או יוצרים מאגר.

  3. בוחרים או יוצרים סביבת עבודה לפיתוח.

  4. יצירת טבלה

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת טענות נכוֹנוּת (assertion), צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד Dataform Editor (roles/dataform.editor) בסביבות עבודה. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יצירת טענות מובנות

אפשר להוסיף הצהרות מובנות של Dataform לבלוק config של טבלה. ‫Dataform מריץ את ההצהרות האלה אחרי יצירת הטבלה. אחרי ש-Dataform יוצר את הטבלה, אפשר לראות אם האימות עבר בהצלחה בכרטיסייה Workflow execution logs (יומני ביצוע של תהליך העבודה) בסביבת העבודה.

אפשר ליצור את הטענות הבאות בבלוק config של טבלה:

  • nonNull

    התנאי הזה קובע שהעמודות שצוינו לא יכולות להיות ריקות בכל השורות בטבלה. התנאי הזה משמש לעמודות שלעולם לא יכולות להיות null.

    בדוגמת הקוד הבאה מוצגת טענת nonNull בבלוק config של טבלה:

config {
  type: "table",
  assertions: {
    nonNull: ["user_id", "customer_id", "email"]
  }
}
SELECT ...
  • rowConditions

    התנאי הזה קובע שכל השורות בטבלה פועלות לפי הלוגיקה המותאמת אישית שהגדרתם. כל תנאי שורה הוא ביטוי SQL בהתאמה אישית, וכל שורה בטבלה מוערכת לפי כל תנאי שורה. הטענה נכשלת אם שורה כלשהי בטבלה מחזירה את הערך false.

    בדוגמת קוד הבאה מוצגת טענת נכוֹנוּת (assertion) rowConditions בהתאמה אישית בבלוק config של טבלה מצטברת:

config {
  type: "incremental",
  assertions: {
    rowConditions: [
      'signup_date is null or signup_date > "2022-08-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...
  • uniqueKey

    התנאי הזה קובע שבעמודה שצוינה, לאף שורה בטבלה אין את אותו הערך.

    בדוגמה הבאה של קוד אפשר לראות טענת uniqueKey בבלוק config של תצוגה:

config {
  type: "view",
  assertions: {
    uniqueKey: ["user_id"]
  }
}
SELECT ...
  • uniqueKeys

    התנאי הזה קובע שבשום שורה בטבלה לא מופיע אותו ערך בעמודות שצוינו. האימות נכשל אם יש יותר משורה אחת בטבלה עם אותם ערכים בכל העמודות שצוינו.

    בדוגמת הקוד הבאה מוצגת טענת uniqueKeys בבלוק config של טבלה:

config {
  type: "table",
  assertions: {
    uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
  }
}
SELECT ...

הוספת טענות נכוֹנוּת (assertions) לבלוק config

כדי להוסיף הצהרות לבלוק ההגדרות של טבלה, פועלים לפי השלבים הבאים:

  1. בסביבת העבודה לפיתוח, בחלונית Files (קבצים), בוחרים קובץ SQLX של הגדרת טבלה.
  2. בבלוק config של קובץ הטבלה, מזינים assertions: {}.
  3. בתוך assertions: {}, מוסיפים את הטענות.
  4. אופציונלי: לוחצים על עיצוב.

בדוגמת הקוד הבאה אפשר לראות את התנאים שנוספו לבלוק config:

config {
  type: "table",
  assertions: {
    uniqueKey: ["user_id"],
    nonNull: ["user_id", "customer_id"],
    rowConditions: [
      'signup_date is null or signup_date > "2019-01-01"',
      'email like "%@%.%"'
    ]
  }
}
SELECT ...

יצירת טענות ידניות באמצעות SQLX

טענות ידניות הן שאילתות SQL שכותבים בקובץ SQLX ייעודי. שאילתת SQL של טענת נכונות ידנית חייבת להחזיר אפס שורות. אם השאילתה מחזירה שורות כשהיא מופעלת, הטענה נכשלת.

כדי להוסיף הצהרות ידניות בקובץ SQLX חדש, פועלים לפי השלבים הבאים:

  1. בחלונית קבצים, לצד definitions/, לוחצים על סמל האפשרויות הנוספות .
  2. לוחצים על יצירת קובץ.
  3. בשדה Add a file path (הוספת נתיב קובץ), מזינים את שם הקובץ ואחריו את התו .sqlx. לדוגמה, definitions/custom_assertion.sqlx.

    שמות הקבצים יכולים לכלול רק מספרים, אותיות, מקפים וקווים תחתונים.

  4. לוחצים על יצירת קובץ.

  5. בחלונית Files, לוחצים על הקובץ החדש.

  6. בקובץ, מזינים את הפרטים הבאים:

    config {
      type: "assertion"
    }
    
  7. מתחת לבלוק config, כותבים את שאילתת ה-SQL או כמה שאילתות.

  8. אופציונלי: לוחצים על עיצוב.

בדוגמת הקוד הבאה מוצגת טענה ידנית בקובץ SQLX, שקובעת שהשדות A, ‏ B ו-c אף פעם לא יהיו NULL ב-sometable:

config { type: "assertion" }

SELECT
  *
FROM
  ${ref("sometable")}
WHERE
  a IS NULL
  OR b IS NULL
  OR c IS NULL

המאמרים הבאים