סקירה כללית על Dataform

במסמך הזה מוסברים המושגים והתהליכים של Dataform.

‫Dataform הוא שירות שמאפשר לנתח נתונים לפתח, לבדוק, לשלוט בגרסאות ולתזמן תהליכי עבודה מורכבים לשינוי נתונים ב-BigQuery.

בעזרת Dataform אתם יכולים לנהל את הטרנספורמציה של הנתונים בתהליך החילוץ, הטעינה והטרנספורמציה (ELT) לשילוב נתונים. אחרי ששולפים את הנתונים הגולמיים ממערכות המקור וטוענים אותם ל-BigQuery, אפשר להשתמש ב-Dataform כדי להמיר אותם לחבילה מוגדרת היטב, מתועדת ונבדקת של טבלאות נתונים.

‫Dataform מאפשר לבצע את פעולות השינוי הבאות בנתונים:

  • פיתוח והרצה של תהליכי עבודה לטרנספורמציה של נתונים.
  • שיתוף פעולה עם חברי הצוות בפיתוח תהליכי עבודה באמצעות Git.
  • לנהל מספר גדול של טבלאות ואת יחסי התלות שלהן.
  • הצהרה על נתוני המקור וניהול יחסי התלות של הטבלה.
  • הצגת המחשה ויזואלית של עץ התלות של זרימת העבודה.
  • ניהול נתונים באמצעות קוד SQL במאגר מרכזי.
  • שימוש חוזר בקוד באמצעות JavaScript.
  • בודקים את נכונות הנתונים באמצעות בדיקות איכות בטבלאות המקור והפלט.
  • ניהול גרסאות של קוד SQL.
  • לתעד טבלאות נתונים של מסמכים בתוך קוד SQL.

תהליכי טרנספורמציה של נתונים ב-Dataform

תהליך העבודה של המרת נתונים ב-Dataform הוא כזה:

  1. ב-Dataform אתם יכולים ליצור מאגרים כדי לנהל את הקוד שלכם.
  2. ב-Dataform אפשר ליצור סביבות עבודה לפיתוח.
  3. ב-Dataform אפשר לפתח תהליכי עבודה בסביבת עבודה לפיתוח.
  4. ‫Dataform מהדר את Dataform Core ל-SQL.
  5. ‫Dataform מריץ את עץ התלות.

‫Dataform מאפשר ליצור מאגרים לניהול הקוד

במאגר של Dataform, משתמשים ב-Dataform core, תוסף של SQL, כדי לכתוב קובצי SQLX שבהם מגדירים את תהליך העבודה. מאגרי Dataform תומכים בניהול גרסאות. אתם יכולים לקשר מאגר של Dataform לספק Git של צד שלישי.

ב-Dataform אפשר ליצור סביבות עבודה לפיתוח

אתם יכולים ליצור סביבות עבודה לפיתוח בתוך מאגר Dataform לפיתוח ליבה של Dataform. בסביבת עבודה לפיתוח, אתם יכולים לבצע שינויים במאגר, לקמפל, לבדוק ולדחוף אותם למאגר הראשי באמצעות Git.

ב-Dataform אתם יכולים לפתח את Dataform Core בסביבת עבודה לפיתוח

בסביבת עבודה לפיתוח, אתם יכולים להגדיר ולתעד טבלאות, את התלות שלהן ואת לוגיקת השינוי כדי לבנות את תהליך העבודה. אפשר גם להגדיר פעולות ב-JavaScript.

‫Dataform מבצע קומפילציה של Dataform Core

במהלך ההידור, מתבצעות ב-Dataform המשימות הבאות:

  • הידור של Dataform core לתהליך עבודה של SQL סטנדרטי.
  • הוספת הצהרות SQL סטנדרטיות, כמו CREATE TABLE או INSERT, לקוד בשורה עם הגדרת השאילתה.
  • הכלי מבצע טרנספילציה (קומפילציה ממקור למקור) של JavaScript ל-SQL.
  • הכלי פותר תלויות ובודק אם יש שגיאות, כולל תלויות חסרות או מעגליות.
  • יוצר את עץ התלות של כל הפעולות שיופעלו ב-BigQuery.

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

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

‫Dataform מריץ את עץ התלות

ב-BigQuery, ‏Dataform מבצע את המשימות הבאות:

  • מריץ פקודות SQL לפי הסדר של עץ התלות.
  • מריץ שאילתות של טענות על הטבלאות והתצוגות כדי לבדוק את נכונות הנתונים.
  • מריצה פעולות SQL אחרות שהגדרתם.
  • עדכון המטא-נתונים ב-Knowledge Catalog.

אחרי ההפעלה, תוכלו להשתמש בטבלאות ובתצוגות לכל מטרות הניתוח שלכם.

אתם יכולים לצפות ביומנים כדי לראות אילו טבלאות נוצרו, אם טענות הנכוֹנוּת (assertions) עברו או נכשלו, כמה זמן נמשכה כל פעולה ומידע נוסף. אפשר גם לראות את קוד ה-SQL המדויק שהופעל ב-BigQuery.

התכונות של Dataform

בעזרת Dataform, אפשר לפתח ולפרוס טבלאות, טבלאות מצטברות או תצוגות ב-BigQuery. ב-Dataform יש סביבת אינטרנט לפעילויות הבאות:

  • פיתוח תהליכי עבודה
  • חיבור ל-GitHub,‏ GitLab,‏ Azure DevOps Services ו-Bitbucket
  • אינטגרציה רציפה (CI) ופריסה רציפה (CD)
  • ביצוע של תהליך העבודה

בקטעים הבאים מפורטים המאפיינים העיקריים של Dataform.

מאגרים

כל פרויקט ב-Dataform מאוחסן במאגר. מאגר Dataform מכיל אוסף של קובצי תצורה בפורמט JSON, קובצי SQLX וקובצי JavaScript.

מאגרי Dataform מכילים את סוגי הקבצים הבאים:

  • קובצי תצורה

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

  • הגדרות

    הגדרות הן קובצי SQLX ו-JavaScript שמגדירים טבלאות חדשות, תצוגות ופעולות SQL נוספות להרצה ב-BigQuery.

  • כולל

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

כל מאגר Dataform צריך להיות מקושר לחשבון שירות מותאם אישית. אתם בוחרים חשבון שירות בהתאמה אישית כשאתם יוצרים מאגר. אפשר לערוך את חשבון השירות מאוחר יותר.

ניהול הגרסאות

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

כל מאגר Dataform יכול לנהל מאגר Git משלו, או להיות מחובר למאגר Git מרוחק. אתם יכולים לקשר מאגר Dataform למאגר GitHub,‏ GitLab,‏ Azure DevOps Services,‏ Bitbucket או Secure Source Manager (התמיכה ב-Secure Source Manager היא בגרסת Preview).

המשתמשים מנהלים גרסאות של קוד תהליך העבודה בסביבות העבודה של Dataform. בסביבת עבודה של Dataform, אתם יכולים למשוך שינויים מהמאגר, לבצע את כל השינויים או רק חלק מהם, ולדחוף אותם להסתעפויות Git של המאגר.

פיתוח תהליכי עבודה

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

בסביבת עבודה לפיתוח, אתם יכולים לפתח פעולות של תהליכי עבודה באמצעות Dataform core עם SQLX ו-JavaScript, או באמצעות JavaScript בלבד. אתם יכולים לעצב באופן אוטומטי את קוד הליבה של Dataform או את קוד ה-JavaScript.

כל רכיב בתהליך עבודה של Dataform, כמו טבלה או טענת נכוֹנוּת (assertion), תואם לפעולה ש-Dataform מבצע ב-BigQuery. לדוגמה, קובץ הגדרת טבלה הוא פעולה של יצירה או עדכון של הטבלה ב-BigQuery.

בסביבת עבודה של Dataform, אתם יכולים לפתח את הפעולות הבאות בתהליך העבודה:

אפשר להשתמש ב-JavaScript כדי לעשות שימוש חוזר בקוד של תהליך העבודה ב-Dataform בדרכים הבאות:

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

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

כדי לבדוק את כל תהליך העבודה שהוגדר בסביבת העבודה, אפשר לראות גרף אינטראקטיבי שעבר קומפילציה שבו מוצגות כל הפעולות שעברו קומפילציה בתהליך העבודה והקשרים ביניהן.

קומפילציה של תהליך עבודה

‫Dataform משתמש בהגדרות קומפילציה שמוגדרות כברירת מחדל, בקובץ ההגדרות של תהליך העבודה, כדי לבצע קומפילציה של קוד תהליך העבודה בסביבת העבודה ל-SQL בזמן אמת, וכך ליצור תוצאת קומפילציה של סביבת העבודה.

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

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

הגדרות הפצה מאפשרות לכם להגדיר תבניות של הגדרות הידור (compilation) כדי ליצור תוצאות הידור של מאגר Dataform. בהגדרת גרסה, אפשר לשנות את פרויקט Google Cloud שבו Dataform מריץ את תוצאות הקומפילציה, להוסיף קידומת לשמות של כל הטבלאות שעברו קומפילציה, להוסיף סיומת לסכימת ברירת המחדל ולהוסיף משתני קומפילציה. אפשר גם להגדיר את התדירות של יצירת תוצאות ההידור. כדי לתזמן הרצות של תוצאות קומפילציה שנוצרו בהגדרת פריט תוכן נבחר, אפשר ליצור הגדרת תהליך עבודה.

הרצה של תהליך עבודה

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

כדי ליצור או לרענן את הטבלאות והתצוגות שהוגדרו בתהליך העבודה ב-BigQuery, אתם יכולים להפעיל ידנית את תהליך העבודה בסביבת עבודה לפיתוח או לתזמן הפעלות.

כשמפעילים הרצה של תהליך עבודה, Dataform מבצע את הפעולות לפי הסדר שמוגדר ביחסי התלות שלהן. לכל פעולה, Dataform מבצע את השלבים הבאים:

  1. מריץ את ה-SQL המקומפל ב-BigQuery.
  2. מעדכנת את סטטוס הפעולה ביומן הביצוע.
  3. אחרי שפעולה מסתיימת בהצלחה, Dataform מפעיל באופן אוטומטי סנכרון של מטא-נתונים עם Knowledge Catalog. תהליך ההעשרה הזה מעדכן את Knowledge Catalog במטא-נתונים הסמנטיים שמוגדרים בתצורת SQLX. הסנכרון מתבצע באופן אסינכרוני ומשתמש במנגנון של ניסיון חוזר, כדי לוודא שעדכוני המטא-נתונים לא משפיעים על זמן האחזור של צינור עיבוד הנתונים או גורמים לכשלים בתהליך העבודה אם Dataplex API לא זמין באופן זמני.

אתם יכולים לתזמן הפעלות של Dataform ב-BigQuery בדרכים הבאות:

אפשר גם להפוך את ההרצות לאוטומטיות באמצעות טריגרים של Cloud Build.

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

Dataform core

‫Dataform core היא שפת-על מבוססת קוד פתוח ליצירת טבלאות וזרימות עבודה של SQL. ‫Dataform Core מרחיב את SQL על ידי מתן מערכת לניהול תלות, בדיקות אוטומטיות של איכות הנתונים ותיעוד נתונים.

אפשר להשתמש ב-Dataform core למטרות הבאות:

  • הגדרת טבלאות, תצוגות, תצוגות מהותיות או טבלאות מצטברות.
  • הגדרת הלוגיקה של טרנספורמציית הנתונים.
  • הצהרה על נתוני מקור וניהול של יחסי תלות בין טבלאות.
  • תיעוד של תיאורי הטבלה והעמודות בתוך הקוד.
  • שימוש חוזר בפונקציות ובמשתנים בשאילתות שונות.
  • כתיבת טענות נכונות (assertions) של נתונים כדי לאמת את עקביות הנתונים.

ב-Dataform, משתמשים בליבה של Dataform כדי לפתח תהליכי עבודה ולפרוס נכסים ב-BigQuery.

הליבה של Dataform היא חלק ממסגרת מודלים של נתונים ב-Dataform בקוד פתוח, שכוללת גם את Dataform CLI. אתם יכולים להדר ולהריץ את Dataform Core באופן מקומי באמצעות Dataform CLI מחוץ ל- Google Cloud.

כדי להשתמש ב-Dataform core, צריך לכתוב קובצי SQLX. כל קובץ SQLX מכיל שאילתה שמגדירה קשר בין מסדי נתונים ש-Dataform יוצר ומעדכן ב-BigQuery.

‫Dataform מקמפל את קוד הליבה של Dataform בזמן אמת כדי ליצור תוצאת קומפילציה של SQL שאפשר להריץ ב-BigQuery.

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

בלוק ההגדרות של קובץ SQLX

קובץ SQLX מורכב מבלוק config ומגוף. כל מאפייני ההגדרה ובלוק ההגדרה עצמו הם אופציונליים. לכן, כל קובץ SQL רגיל הוא קובץ SQLX תקין ש-Dataform מריץ כמו שהוא.

בבלוק ההגדרות, אפשר לבצע את הפעולות הבאות:

ציון מטא-נתונים של שאילתה

אתם יכולים להגדיר איך Dataform יוצרת תצוגות חומריות של שאילתות ב-BigQuery, למשל סוג טבלת הפלט, מסד הנתונים של היעד או תוויות, באמצעות מטא-נתונים של הגדרות.

נתוני מסמכים

אפשר לתעד את הטבלאות ואת השדות שלהן ישירות בבלוק config. התיעוד של הטבלאות נשלח ישירות ל-BigQuery ול-Knowledge Catalog. אתם יכולים לנתח את התיעוד הזה ולהעביר אותו לכלים אחרים.

בדוגמת הקוד הבאה מוסבר איך להגדיר את סוג טבלת הפלט, לתעד את הטבלה ולהוסיף מטא-נתונים ל-Knowledge Catalog בבלוק config של קובץ SQLX:

config {
  type: "table",
  description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order, for example, sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment, for example, pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
  metadata: {
    overview: "This table provides joined orders and payment data.",
    extraProperties: {
      generic: {
        system: "BigQuery",
        type: "table"
      }
    }
  }
}

הגדרת בדיקות לאיכות הנתונים

אתם יכולים להגדיר בדיקות לאיכות הנתונים, שנקראות טענות נכונות (assertions), כדי לבדוק אם יש ערכים ייחודיים, ערכי null או תנאי בהתאמה אישית. אחרי יצירת הטבלה, Dataform מוסיף את הטענות שמוגדרות בבלוק ההגדרות לעץ התלות של זרימת העבודה. אפשר גם להגדיר טענות נכונות (assertions) מחוץ לבלוק config, בקובץ SQLX נפרד.

בדוגמת הקוד הבאה אפשר לראות איך מגדירים בדיקת איכות בבלוק הגדרות בקובץ SQLX:

config {
  assertions: {
    uniqueKey: ["id"]
  }
}

גוף הקובץ של SQLX

בגוף של קובץ SQLX, אתם יכולים לבצע את הפעולות הבאות:

הגדרת טבלה

כדי להגדיר טבלה חדשה, אפשר להשתמש בהצהרות SQL SELECT ובפונקציה ref.

הפונקציה ref היא פונקציה מובנית של SQLX שחיונית לניהול יחסי תלות ב-Dataform. הפונקציה ref מאפשרת להפנות לטבלאות שהוגדרו בפרויקט Dataform, במקום להגדיר קידוד קשיח של הסכימה ושמות הטבלאות של טבלת הנתונים.

‫Dataform משתמש בפונקציה ref כדי ליצור עץ תלות של כל הטבלאות שצריך ליצור או לעדכן. אחרי ההידור, Dataform מוסיף הצהרות סטנדרטיות כמו CREATE, REPLACE או INSERT.

בדוגמת הקוד הבאה אפשר לראות איך מפנים לטבלה בקובץ SQLX באמצעות הפונקציה ref.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

הפלט אמור להיראות כך:

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

מידע נוסף על ניהול תלות נוסף, למשל על הפעלה של קוד בתנאי, באמצעות פונקציות מובנות אחרות של Dataform Core, זמין במאמר Dataform Core reference.

הגדרת פעולות SQL נוספות

כדי להגדיר את Dataform להריץ הצהרת SQL אחת או יותר לפני או אחרי יצירת טבלה או תצוגה, אתם יכולים לציין פעולות לפני שאילתה ואחרי שאילתה.

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

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

אנקפסולציה של קוד SQL

כדי להגדיר פונקציות שאפשר להשתמש בהן שוב ושוב ליצירת חלקים חוזרים של קוד SQL, אתם יכולים להשתמש בבלוקים של JavaScript. אפשר להשתמש שוב בקוד שמוגדר בבלוק JavaScript רק בתוך קובץ ה-SQLX שבו הבלוק מוגדר. כדי לעשות שימוש חוזר בקוד בכל המאגר, אפשר ליצור הכללות.

כדי לשנות שאילתה באופן דינמי, אפשר להשתמש ב-JavaScript מוטבע בכל מקום בגוף.

בדוגמת הקוד הבאה אפשר לראות איך מגדירים בלוק JavaScript בקובץ SQLX ומשתמשים בו בשורה בתוך שאילתה:

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

מגבלות

אלה המגבלות הידועות של Dataform:

  • ‫Dataform Google Cloud פועל בסביבת זמן ריצה רגילה של V8 ולא תומך ביכולות ובמודולים נוספים שמסופקים על ידי Node.js. אם בסיס הקוד הקיים שלכם דורש מודולים של Node.js, תצטרכו להסיר את התלות הזו.

    בפרויקטים שאין בהם שדה שם ב-package.json, נוצרים הבדלים ב-package-lock.json בכל פעם שמתקינים חבילות. כדי להימנע מכך, צריך להוסיף נכס name ב-package.json.

  • אין תמיכה בכתובות URL של יחסי תלות ב-package.json עם git+https://.

    צריך להמיר כתובות URL כאלה לכתובות URL פשוטות של ארכיון https://. לדוגמה, להמיר את git+https://github.com/dataform-co/dataform-segment.git#1.5 ל-https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • אי אפשר להריץ בדיקות יחידה באופן ידני.

  • אי אפשר לחפש תוכן של קבצים בסביבות עבודה לפיתוח.

  • החל מגרסה 3.0.0. של Dataform core, ‏Dataform לא מפיץ קובץ אימג' של Docker. אתם יכולים ליצור קובץ אימג' של Docker משלכם של Dataform, שבו תוכלו להשתמש כדי להריץ פקודות שוות ערך של Dataform CLI. כדי ליצור קובץ אימג' משלכם ב-Docker, אפשר לעיין במאמר העברת אפליקציה לקונטיינר במסמכי התיעוד של Docker.

  • השיטות הבאות של Dataform API לא תואמות להנחיות של AIP.134, כי הן מתייחסות לתו הכללי לחיפוש * כבקשה שגויה, ומעדכנות את כל השדות במקום את השדות שהוגדרו כשמשמיטים את field_mask:

  • אם הפעלה מתוזמנת של הגדרת תהליך עבודה לא מסתיימת לפני תחילת ההפעלה המתוזמנת הבאה, המערכת מדלגת על ההפעלה המתוזמנת הבאה ומסמנת אותה בשגיאה.

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