ב-Knowledge Catalog (לשעבר Dataplex Universal Catalog) אתם יכולים לייבא מטא-נתונים תפעוליים, סמנטיים ושל שושלת נתונים מ-dbt Core, מ-dbt Cloud ומ-MetricFlow באמצעות Google Cloud CLI וקובצי פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של dbt. במקום להשאיר את המטא-נתונים של הטרנספורמציה מבודדים בסביבה של dbt, אתם יכולים לרכז אותם כדי לעזור למהנדסי מערכות מידע, למהנדסי ניתוח נתונים ולמנהלי מדיניות מידע ארגונית לגלות את הנתונים הארגוניים ולנהל אותם.
מטא-נתונים מיובאים ותרחישי שימוש
dbt Core פועל כמנוע טרנספורמציה ולא כמערכת אחסון כמו Oracle או PostgreSQL, ולכן ייבוא המטא-נתונים שלו תומך בתרחישי שימוש שונים. אתם מייבאים מטא-נתונים של Oracle או PostgreSQL כדי לענות על השאלה "אילו נתונים גולמיים יש לנו?", ומייבאים מטא-נתונים של dbt Core כדי לענות על השאלה "איך הנתונים שלנו עוברים טרנספורמציה, האם הם מהימנים ומה המשמעות שלהם לעסק?"
כשמפעילים את השילוב של dbt, מתועדים המטא-נתונים הבאים:
- מטא-נתונים טכניים: חיפוש נתונים ארגוניים על ידי עיון במשאבים מרכזיים (מקורות, מקורות ראשוניים, מודלים) ובמאפיינים הטכניים שלהם (שמות עמודות, סוגי נתונים, ספירת שורות).
- מטא-נתונים עסקיים וסמנטיים: מספקים הקשר לכלי BI ולסוכני AI על ידי בחינת הגדרות ולוגיקה עסקית שמופעלות על ידי dbt MetricFlow, כמו מודלים סמנטיים, מדדים ושאילתות שמורות.
- מטא-נתונים תפעוליים ואיכותיים: מעקב אחרי תקינות צינור עיבוד הנתונים ופתרון בעיות בנתונים באמצעות בדיקת מטא-נתונים של ביצוע, כמו תזמון, סטטוס הצלחה או כישלון, עדכניות הנתונים ותוצאות הבדיקה.
- מטא-נתונים של שושלת וקשרים: ביצוע ניתוח השפעה במורד הזרם ומעקב אחר שורש הבעיה באמצעות בדיקת תרשימי טרנספורמציה (DAG) ותלויות בין משאבי dbt, שושלת פיזית שעוקבת אחרי בלוקים של טרנספורמציה פיזית ומקשרת ביניהם, מפתחות איחוד ואיחודים דינמיים וקשרי הורה-צאצא.
- מטא-נתונים של צריכה: פתרון בעיות שקשורות לאופן שבו אפליקציות במורד הזרם צורכות נתונים שעברו טרנספורמציה, על ידי בדיקת מטא-נתונים שמתועדים בחשיפות שממפות את אופן השימוש בנתונים מחוץ ל-dbt.
מגבלות
- תמיכה ב-dbt Core גרסה 1 (אומת מול גרסאות 1.11 ו-1.12), ב-dbt Core גרסה 2 וב-dbt Fusion.
- גרסה 586.0.0 ואילך של ה-CLI של gcloud תומכת בשילוב של dbt ו-Knowledge Catalog. כדי להתקין או לעדכן את ה-CLI, קראו את המאמר התקנת Google Cloud CLI.
- אין חיבור ישיר ל-dbt Cloud. כדי לייבא מטא-נתונים ממשימה ב-dbt Cloud, קודם צריך לקבל את פריטי המידע שנוצרו בתהליך הפיתוח (Artifacts) של המשימה. ייבוא מטא-נתונים מהרצות של dbt Cloud
- סכימות גדולות מאוד או סכימות עם רמות רבות של הטמעה נחתכות: היבט אחד לא יכול לחרוג ממגבלת הגודל לכל היבט, ולכן סכימות עם רמות רבות של הטמעה עלולות לאבד שדות נגררים.
--aspects-onlyיכול להוסיף ולרענן מטא-נתונים, אבל לא להסיר אותם. כדי למחוק משאב dbt, צריך להפעיל את הפרויקט באופן מלא.- השילוב הזה תומך רק באירועי שושלת נתונים של dbt במשאבי BigQuery בData Lineage API ובתרשים. רשומות dbt (מקורות, נתוני seed, מודלים) של מקורות חיצוניים של צד שלישי לא מתועדות בשושלת הנתונים.
- כדי להטמיע את כל אירועי שושלת היוחסין של dbt ב-Data Lineage API, השתמשו בשילוב של OpenLineage dbt. אחר כך משלבים את OpenLineage עם Knowledge Catalog כדי לייבא ולהציג את שושלת הנתונים מ-dbt.
לפני שמתחילים
לפני שאתם מייבאים מטא-נתונים מ-dbt Core ומ-MetricFlow, אתם צריכים לבצע את הפעולות הבאות:
- נותנים את התפקידים וההרשאות הנדרשים.
- מפעילים את Dataplex API.
- עומדים בדרישות המוקדמות של dbt.
- יוצרים את קבוצת הרשומות של היעד, אם היא עדיין לא קיימת.
- הסבר על התפקידים ב-Cloud Storage
תפקידים והרשאות של IAM
כדי ליצור ולנהל משימת קישור של Knowledge Catalog, אתם צריכים תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים הרשאות ל-Knowledge Catalog ול-Cloud Storage.
כדי לקבל את ההרשאות שדרושות להגדרת מחבר dbt, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
- כדי ליצור ולנהל קבוצות של רשומות וקישורים לרשומות:
אדמין של Dataplex Catalog
(
roles/dataplex.catalogAdmin), עריכה של Dataplex Catalog (roles/dataplex.catalogEditor) או בעלים של קבוצת רשומות ב-Dataplex (roles/dataplex.entryGroupOwner) בפרויקט. כדי להריץ את הפקודה
gcloudשל dbt וליצור משימות לייבוא מטא-נתונים: פועלים לפי העיקרון של הרשאות מינימליות ומקצים את התפקידים הבאים:- Dataplex Metadata Job Owner (
roles/dataplex.metadataJobOwner) בפרויקט. - Dataplex Entry Group Importer
(
roles/dataplex.entryGroupImporter) בקבוצת הרשומות או בפרויקט היעד. אם אתם מייבאים גם קישורים לרשומות, תנו לפרויקט את התפקיד בעלים של קבוצת רשומות ב-Dataplex (roles/dataplex.entryGroupOwner). בנוסף, צריך להקצות את התפקיד בעלים של רשומה ב-Dataplex (roles/dataplex.entryOwner) בכל פרויקט שמכיל את הטבלאות ב-BigQuery שאליהן מודלי ה-dbt כותבים. בתפקידים בהתאמה אישית, ההרשאות לקישור הכניסה הןdataplex.entryGroups.useReferenceEntryLink,dataplex.entryGroups.useSchemaJoinEntryLinkו-dataplex.entryLinks.reference.
לחלופין, אתם יכולים להקצות את התפקיד אדמין של Dataplex Catalog (
roles/dataplex.catalogAdmin) ואת התפקיד בעלים של משימות מטא-נתונים ב-Dataplex (roles/dataplex.metadataJobOwner) בפרויקט.- Dataplex Metadata Job Owner (
כדי להעלות מטא-נתונים שעברו טרנספורמציה לקטגוריית ה-Staging של הפלט (
--storage-uri): יצירת אובייקטים באחסון (roles/storage.objectCreator) או אדמין של אובייקטים באחסון (roles/storage.objectAdmin) בקטגוריית ה-Staging.כדי לקרוא פריטי dbt מקטגוריית קלט של Cloud Storage (
--artifacts-path, אם משתמשים ב-Cloud Storage): צפייה באובייקטים באחסון (roles/storage.objectViewer) או אדמין של אובייקטים באחסון (roles/storage.objectAdmin) בקטגוריית פריטי הקלט. אם יש לכם את התפקיד Storage Object Admin, אתם לא צריכים את התפקיד Storage Object Viewer.כדי לצפות במטא-נתונים של dbt: התפקיד Dataplex Catalog Viewer (
roles/dataplex.catalogViewer) בפרויקט.כדי לצפות ביומנים ב-Cloud Logging: התפקיד צפייה ביומנים (
roles/logging.viewer) בפרויקט.
אם יש לכם את ההרשאות הנדרשות לניהול הגישה ל-IAM בפרויקט, אתם יכולים להקצות את התפקידים האלה לחשבון המשתמש שלכם באמצעות הפקודות הבאות של gcloud:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:USER_EMAIL" \
--role="roles/dataplex.metadataJobOwner"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="user:USER_EMAIL" \
--role="roles/dataplex.entryGroupOwner"
gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
--member="user:USER_EMAIL" \
--role="roles/storage.objectCreator"
אם אתם מריצים את הייבוא באמצעות חשבון שירות, למשל בצינור עיבוד נתונים אוטומטי של CI/CD, אתם יכולים להקצות את התפקידים האלה לחשבון השירות על ידי הרצת הפקודות הבאות של gcloud:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
--role="roles/dataplex.metadataJobOwner"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
--role="roles/dataplex.entryGroupOwner"
gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
--member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
--role="roles/storage.objectCreator"
בנוסף, צריך להקצות לסוכן השירות של Knowledge Catalog (service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com) את התפקיד צפייה באובייקט אחסון (roles/storage.objectViewer) בקטגוריה של Cloud Storage להעברה של פלט (--storage-uri), כדי שמשימת הייבוא תוכל לקרוא את קובץ המטא-נתונים שהועבר:
gcloud storage buckets add-iam-policy-binding gs://STAGING_BUCKET \
--member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
USER_EMAIL: כתובת האימייל של חשבון המשתמש שלכם. -
SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות. -
STAGING_BUCKET: השם של קטגוריית ה-Staging של הפלט ב-Cloud Storage (--storage-uri). -
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
במאמר ניהול הגישה תוכלו לקרוא מידע נוסף על מתן תפקידים.
הפעלת ממשקי ה-API
מפעילים את Dataplex API.
דרישות מוקדמות ל-dbt
כדי לייבא את כל המטא-נתונים של dbt, מומלץ ליצור את כל ארבעת קובצי ה-JSON של פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של dbt. רק manifest.json נדרש. השאר מעשירים את הייבוא, והטרנספורמציה פועלת בצורה תקינה גם בלעדיהם:
-
manifest.json(חובה): מבנה הפרויקט העיקרי ותרשים הביצוע. הוא כולל גם את המודלים הסמנטיים, המדדים והשאילתות השמורות של MetricFlow. -
catalog.json: שמות העמודות וסוגי הנתונים. בליcatalog.json, היבט הסכימה מיובא עם עמודות ללא סוג. -
run_results.json: תוצאות הבדיקה ומטא-נתונים של ההפעלה. sources.json: עדכניות המקור.
במסוף המקומי, ב-Cloud Shell או בסביבת ה-CI/CD האוטומטית שבה מותקן dbt, עוברים לתיקיית השורש של פרויקט dbt ומריצים את פקודות ה-dbt הבאות לפי הסדר, מול פרופיל ויעד יחידים, כדי ליצור את קובצי ה-JSON המלאים של פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) של המטא-נתונים של dbt:
ב-dbt Core 2.x וב-dbt Fusion:
dbt source freshnessdbt builddbt parse --write-catalog
ב-dbt Core 1.x (שבו
dbt parseלא כותב קטלוג):dbt source freshnessdbt builddbt docs generate --no-compile
הסבר על התפקידים ב-Cloud Storage
ייבוא המטא-נתונים של dbt כולל שני מיקומים נפרדים ב-Cloud Storage, שלכל אחד מהם יש מטרה שונה ואין לבלבל ביניהם:
- קלט (פריטי מידע שנוצרו ב-dbt): המיקום של קובצי ה-JSON שנוצרו ב-dbt. זה יכול להיות נתיב לספרייה מקומית במכונה או ב-CI runner (למשל
./target/או.) או קידומת URI של קטגוריה של Cloud Storage (למשלgs://my-dbt-artifacts-bucket/target/). אתם מספקים את הנתיב הזה באמצעות הדגל--artifacts-path. הפקודהgcloudקוראת את קובצי הקלט האלה במהלך הכנת המשימה. אם משתמשים ב-Cloud Storage, הגורם שמפעיל את הפקודהgcloudצריך גישת קריאה (roles/storage.objectViewerאוroles/storage.objectAdmin). סוכן השירות של Knowledge Catalog לא צריך גישה לקטגוריית פריטי המידע של הקלט. - פלט (קטגוריית ה-Staging לייבוא של Knowledge Catalog): תחילית של URI של קטגוריה של Cloud Storage (למשל
gs://my-staging-bucket/dbt-imports/) שאליה הפקודהgcloudמעלה את קובץ הייבוא של המטא-נתונים שעברו טרנספורמציה (dbt_metadata.jsonl), וממנה משימת הייבוא של Knowledge Catalog קוראת במהלך הטמעת הנתונים. אתם מספקים את ה-URI הזה באמצעות הדגל--storage-uri. לגורם שמפעיל את הפקודהgcloudצריכה להיות גישת כתיבה (roles/storage.objectCreatorאוroles/storage.objectAdmin) כדי להעלות את הקובץ, ולסוכן השירות של Knowledge Catalog צריכה להיות גישת קריאה (roles/storage.objectViewer) כדי לייבא אותו.
ייבוא מטא-נתונים מהרצות של dbt Cloud
Knowledge Catalog לא מתחבר ישירות ל-dbt Cloud. מכיוון שמשימה ב-dbt Cloud יוצרת את אותם קובצי ארטיפקטים כמו dbt Core, אתם יכולים לייבא מטא-נתונים מ-dbt Cloud על ידי אחזור של קובצי הארטיפקטים האלה לספרייה מקומית או לקטגוריית קלט של Cloud Storage, והרצה של הפקודה gcloud.
לפני שמאחזרים את פריטי המידע שנוצרו, מגדירים את המשימה ב-dbt Cloud כדי ליצור את קבוצת פריטי המידע המלאה. אחרי שהגדרתם את dbt Cloud, אתם יכולים לאחזר את קובצי פריטי המידע שנוצרו מהרצת משימה ב-dbt Cloud באחת מהשיטות הבאות:
- הורדת פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) ממסוף dbt Cloud: הורדה ידנית של קובצי פריטי המידע שנוצרו בתהליך הפיתוח (Artifact) מהדף של פרטי הרצת המשימה בממשק המשתמש של dbt Cloud, לצורך ייבוא חד-פעמי או בדיקה ראשונית.
- הורדת פריטי מידע שנוצרו באמצעות ה-CLI של פלטפורמת dbt: מריצים פקודות dbt ב-dbt Cloud מהטרמינל המקומי כדי לשמור באופן אוטומטי את פריטי המידע שנוצרו בספריית הפרויקט המקומית במהלך הפיתוח.
- הורדת פריטי מידע שנוצרו בתהליך הפיתוח באמצעות dbt Administrative API: אחזור פרוגרמטי של פריטי מידע שנוצרו בתהליך הפיתוח מהרצות שהושלמו דרך HTTP, בשביל צינורות עיבוד נתונים אוטומטיים ומתוזמנים.
הגדרת המשימה ב-dbt Cloud
במסוף dbt Google Cloud , מגדירים את הגדרות המשימה כדי ליצור את קבוצת פריטי המידע המלאה של המטא-נתונים:
- בקטע Execution settings, בוחרים באפשרות Run source freshness.
dbt Cloud מריץ את
dbt source freshnessלפני פקודות המשימה כדי ליצור אתsources.json. - בקטע Commands, מוסיפים את
dbt build. - מוסיפים פקודה ליצירת
catalog.jsonעל סמך מסלול ההפצה:- במסלולי ההפצה של dbt Core 2.x ו-dbt Fusion: מוסיפים את
dbt parse --write-catalogכפקודת משימה. - במסלולי הפצה של dbt Core 1.x: מוסיפים את
dbt docs generate --no-compileכפקודת משימה במקום לבחור באפשרות Generate docs on run. תיבת הסימון Generate docs on run מריצה אתdbt docs generateבלי--no-compile, מה שמחליף את תוצאות הבדיקה מ-dbt build, כפי שמתואר בדרישות המוקדמות של dbt. שימו לב שאם שלב הפקודה נכשל, גם המשימה נכשלת, אבל שלב תיבת הסימון לא גורם למשימה להיכשל.
- במסלולי ההפצה של dbt Core 2.x ו-dbt Fusion: מוסיפים את
אם הפקודה dbt build נכשלת, למשל בגלל שגיאת בדיקה, dbt Cloud מדלג על הפקודות שאחריה ובמהלך ההרצה לא נוצר catalog.json. כדי ליצור תמיד קטלוג, צריך להוסיף את הפקודה catalog לפני dbt build. הקטלוג מתאר את הטבלאות כפי שהיו לפני ה-build.
למידע נוסף, קראו את המאמרים פקודות של משימות ומסלולי הפצה במסמכי התיעוד של dbt.
הורדת פריטי מידע שנוצרו מהמסוף של dbt Google Cloud
כדי להוריד ידנית פריטי מידע מהפעלה שהושלמה במסוףGoogle Cloud של dbt:
- במסוף dbt Google Cloud , פותחים את הרצת המשימה שהסתיימה.
- עוברים לכרטיסייה Artifacts כדי לראות את קובצי פריטי המידע שנוצרו.
- מורידים את
manifest.json,catalog.json,run_results.jsonו-sources.jsonלספרייה מקומית. - בטרמינל המקומי או ב-Cloud Shell, מריצים את פקודת הייבוא של
gcloudשמתוארת בקטע הגדרת הקישוריות של dbt ומגדירים את--artifacts-pathלספרייה שמכילה את הקבצים שהורדתם.
למידע נוסף, קראו את המאמר Run visibility במסמכי התיעוד של dbt.
הורדת פריטי מידע באמצעות ה-CLI של פלטפורמת dbt
ממשק שורת הפקודה (CLI) של פלטפורמת dbt (לשעבר dbt Cloud CLI) מריץ פקודות dbt בפלטפורמת dbt Cloud מהמסוף המקומי, ומוריד באופן אוטומטי את פריטי המידע שנוצרו לספרייה target/ של פרויקט dbt המקומי.
- בטרמינל המקומי, עוברים לתיקיית השורש של פרויקט ה-dbt ומריצים את שלוש הפקודות שמפורטות בקטע דרישות מוקדמות ל-dbt.
- מריצים את פקודת הייבוא של
gcloudשמתוארת בקטע הגדרת הקישוריות של dbt ומגדירים את--artifacts-pathלספריית הבסיס של הפרויקט או לספרייהtarget/.
ה-CLI פועל בסביבת הפיתוח באמצעות פרטי הכניסה האישיים שלכם למחסן הנתונים, כך שהמטא-נתונים שנוצרים משקפים את סכימת הפיתוח שלכם ולא את טבלאות הייצור שנוצרו על ידי משימה מתוזמנת. השתמשו ב-CLI לתהליכי עבודה של בדיקה או פיתוח, והשתמשו במשימת פריסה לייבוא מתוזמן של סביבת הייצור.
מידע נוסף זמין במאמר התקנת ה-CLI של פלטפורמת dbt במאמרי העזרה של dbt.
הורדת פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) באמצעות dbt Administrative API
אתם יכולים להשתמש ב-dbt Administrative API כדי לאחזר באופן פרוגרמטי פריטי מידע שנוצרו בעקבות הרצה של משימה שהושלמה. נקודת הקצה List Run Artifacts מחזירה את נתיבי הקבצים שנוצרו על ידי הרצה, ונקודת הקצה Retrieve Run Artifact מורידה קובץ פריט מידע שנוצר בתהליך הפיתוח ספציפי מכתובת ה-URL הבאה:
https://ACCESS_URL/api/v2/accounts/ACCOUNT_ID/runs/RUN_ID/artifacts/FILE
ACCESS_URL תלוי באזור שבו מתארח החשבון שלכם ב-dbt Cloud.
מאמתים את הבקשות באמצעות אסימון שירות של dbt Cloud. מידע נוסף זמין בדפים הבאים במסמכי התיעוד של dbt:
במסוף המקומי, ב-Cloud Shell או בסביבת תהליך העבודה האוטומטי, מורידים את manifest.json, catalog.json, run_results.json ו-sources.json לספרייה מקומית או לקטגוריה של Cloud Storage, ואז מריצים את הפקודה gcloud שמתוארת בקטע הגדרת הקישוריות של dbt בנתיב הזה.
כברירת מחדל, נקודת הקצה של פריט המידע שנוצר מחזירה פריטי מידע שנוצרו מהשלב האחרון של ההרצה, אלא אם מציינים את הפרמטר step של השאילתה. כשמגדירים את המשימה כמו שמתואר בקטע הגדרת המשימה ב-dbt Cloud, השלב האחרון הוא dbt parse --write-catalog או dbt docs generate --no-compile, שרק כותב את catalog.json ומשאיר את שלושת פריטי המידע האחרים ללא שינוי בשלב ברירת המחדל.
אחזור מזהה ההרצה
כדי להוריד את פריטי המידע שנוצרו בהפעלה ספציפית, צריך את מזהה ההפעלה. אפשר להעתיק את מזהה ההרצה מכתובת ה-URL של ההרצה במסוף dbt Google Cloud , או לשלוח שאילתה ל-API מהטרמינל או מסקריפט של תהליך העבודה כדי לקבל את ההרצה המוצלחת האחרונה של משימה:
GET https://ACCESS_URL/api/v2/accounts/ACCOUNT_ID/runs/?job_definition_id=JOB_ID&status=10&order_by=-finished_at&limit=1
בפרמטרים של השאילתה, status=10 מסנן הפעלות שהושלמו עם סטטוס Success. אתם יכולים לדגום את נקודת הקצה הזו לפי לוח זמנים כדי לזהות את ההפעלה המוצלחת האחרונה, להוריד את פריטי המידע שנוצרו בה ולהריץ את פקודת הייבוא של gcloud.
הפעלת הייבוא באמצעות תגובה לפעולה מאתר אחר (webhook)
במקום לדגום את ה-API, אתם יכולים להגדיר webhook של dbt Cloud כדי להפעיל ייבוא אוטומטי של מטא-נתונים בכל פעם שהרצת משימה מסתיימת. ה-webhook שולח מטען ייעודי (payload) לנקודת קצה (endpoint) של HTTP שאתם מספקים:
- במסוף dbt Google Cloud , נכנסים אל Account settings > Webhooks ולוחצים על Create webhook (או על Create new webhook). מגדירים את המינוי ל-webhook:
- אירועים: בוחרים באפשרות Run completed (
job.run.completed), שמופעלת רק אחרי שההרצה מסתיימת והפריטים שלה זמינים להורדה. - Jobs: בוחרים את משימות הפריסה של dbt Cloud שרוצים לעקוב אחריהן.
- נקודת קצה (endpoint): מזינים את כתובת ה-URL מסוג HTTPS של שירות שאתם מפעילים (לדוגמה, שירות Cloud Run או פונקציית Cloud Run).
- אירועים: בוחרים באפשרות Run completed (
- שומרים את האסימון הסודי של ה-webhook שמוצג ב-dbt Cloud. השירות שלכם משתמש בסוד הזה כדי לאמת את הכותרת
Authorization, שמכילה חתימת HMAC-SHA256 של גוף הבקשה. - בשירות שלכם, קוראים את
data.runIdמהמטען הייעודי (payload) בפורמט JSON, מורידים את פריטי המידע שנוצרו בהרצה באמצעות Administrative API כמו שמתואר למעלה, ומריצים את הפקודהgcloud dataplex dbt metadata-jobs create.
כשמטמיעים את ה-webhook handler, חשוב להביא בחשבון את הדברים הבאים:
- dbt Cloud ממתין לתגובה במשך 10 שניות לכל היותר. מכיוון שייבוא המטא-נתונים נמשך כמה דקות, קודם צריך להחזיר תגובת HTTP ולהריץ את הייבוא ברקע (לדוגמה, כמשימה של Cloud Run או באמצעות הדגל
--async). - האירוע
job.run.completedמופעל גם בהרצות שנכשלו, כך שהרצות עם בדיקות שנכשלו עדיין מיובאות. אל תירשמו ל-job.run.errored, כי הוא יכול לפעול לפני שהפריטים של ההרצה זמינים.
למידע נוסף על מטענים ייעודיים (payloads) של תגובות לפעולה מאתר אחר ואימות חתימה, ראו תגובות לפעולה מאתר אחר למשימות במסמכי התיעוד של dbt.
הגדרת הקישוריות של dbt
כדי ליצור קישוריות ל-dbt, קודם צריך להריץ את פקודות ה-dbt המתאימות כדי ליצור את פריטי המטא-נתונים. אחרי שקובצי ה-JSON מאוחסנים ונגישים, תהליך הייבוא מבצע את הפעולות הבאות:
- קריאת פריטי קלט: קריאת פריטי ה-JSON שנוצרו על ידי dbt Core ו-MetricFlow ממיקום הקלט (ספרייה מקומית או URI של Cloud Storage שצוין ב-
--artifacts-path). - המרת מטא-נתונים: המרת התוכן לפורמט הייבוא של המטא-נתונים של Knowledge Catalog (
dbt_metadata.jsonl). - העלאה ל-staging: מעלים את קובץ הייבוא של המטא-נתונים שעבר טרנספורמציה למיקום ה-staging של הפלט ב-Cloud Storage שצוין ב-
--storage-uri. - הפעלת משימת ייבוא: מפעילים משימת ייבוא של מטא-נתונים ב-Knowledge Catalog, שמורה לסוכן השירות של Knowledge Catalog לקרוא את המטא-נתונים שהועברו ל-
--storage-uriולהטמיע אותם במשאבים של Knowledge Catalog.
המסוף
במסוף Google Cloud , נכנסים לדף Connectors ב-Knowledge Catalog.
לוחצים על הוספת חיבור.
ברשימה Connectors, בוחרים בכרטיס dbt Core and MetricFlow.
כדי לראות את נכסי ה-dbt שיובאו, עוברים לדף Search או לדף Entry groups של היעד.
gcloud
כדי ליצור משימת מטא-נתונים של dbt:
- מוודאים שקובצי הארטיפקטים של המטא-נתונים של dbt מאוחסנים באופן מקומי או בקטגוריה של Cloud Storage.
- חשוב לוודא שיש לכם קטגוריה של Cloud Storage להכנת פלט, שמוגדרת עם ההרשאות המתאימות גם למבצע הקריאה החוזרת וגם לסוכן השירות של Knowledge Catalog.
מריצים את הפקודה
gcloudמ-Cloud Shell, מטרמינל מקומי או מכלי אוטומטי לתהליכי עבודה:gcloud dataplex dbt metadata-jobs create my-dbt-import \ --project=my-project \ --location=us-central1 \ --artifacts-path=. \ --entry-group=dbt-metadata-ingestion \ --storage-uri=gs://my-bucket/dbt-imports/דגלי חובה
-
--storage-uri=STORAGE_URI: הקידומת של ה-URI של Cloud Storage(gs://bucket/path/) (פלט/Staging), שאליו מועלה קובץ ה-JSONL שעבר טרנספורמציה, וממנו משימת הייבוא קוראת במהלך ההטמעה. למבצע הקריאה החוזרת צריכה להיות גישת כתיבה (roles/storage.objectCreatorאוroles/storage.objectAdmin), ולסוכן השירות של Knowledge Catalog צריכה להיות גישת קריאה (roles/storage.objectViewer).
דגלים אופציונליים
-
--artifacts-path=ARTIFACTS_PATH: (קלט) הנתיב לקובצי ה-dbt של המקור. הנתיב יכול להיות נתיב של ספרייה מקומית (כמו.או./target) או קידומת URI של Cloud Storage (כמוgs://my-bucket/dbt-artifacts/). הוא יכול להצביע על השורש של פרויקט dbt (ספריית המשנהtarget/מזוהה באופן אוטומטי) או ישירות על הספרייה שמכילה אתmanifest.json. ברירת המחדל היא.. אם צוין URI של Cloud Storage, למבצע הקריאה החוזרת צריכה להיות גישת קריאה (roles/storage.objectViewerאוroles/storage.objectAdmin) לקטגוריית הקלט. -
--async: חזרה מיידית, בלי להמתין שהפעולה תסתיים. -
--entry-group=ENTRY_GROUP: המזהה הקצר של קבוצת הרשומות שמקבלת את הרשומות של dbt. הוא חייב להיות קיים בפרויקט ובמיקום (ברירת המחדל היאdbt-metadata-ingestion). -
--aspects-only: עדכון רק של המטא-נתונים שהופקו בהרצה הזו של dbt, בלי לשנות את שאר קבוצת הרשומות. לא נוצרת, נמחקת או משויכת מחדש אף רשומה, לא נוצר קישור לרשומה, והיבט שקובץ ה-dbt שלו לא היה קיים בהרצה הזו שומר על הערך שניתן לו בהרצה קודמת. השיטה הזו מתאימה להטמעה שגרתית וחוזרת. איך מריצים מחדש את ההטמעה -
--include-entry-links: הפקת קישורים לרשומות של קשרי dbt. ההגדרה הזו מופעלת כברירת מחדל. כדי להשבית את האפשרות, משתמשים ב---no-include-entry-links. הפקודה מפיקה את סוגי הקישורים הבאים לרשומות:-
reference: משאב אחד תלוי במשאב אחר, מתאר אותו או משתמש בו. הוא כולל יחסי תלות של dbt בין צמתים, בדיקה והמשאב שהיא בודקת, מודל סמנטי או מדד והמשאב שעליו הוא מבוסס, צומת ופקודות המאקרו של הפרויקט שהוא קורא להן, וצומת והטבלה ב-BigQuery שהוא מתממש בה. schema-join: עמודות שאפשר לצרף, שהוגדרו בבדיקתrelationshipsdbt.
-
--skip-bigquery-link: דילוג עלreferenceקישורים (צומת dbt ← טבלה ב-BigQuery). כברירת מחדל, קישורreferenceנוצר לכל צומת dbt שנוצר (מודל, seed, תמונת מצב) שמערך הנתונים שלו ב-BigQuery נמצא במיקום הייבוא (--location). מקורות dbt לא מקבלים קישורreferenceלטבלה שלהם ב-BigQuery. קישורי רשומות יכולים להפנות רק לרשומות של@bigqueryבאותו אזור, כך שקבוצות נתונים באזור אחר נדלגות באופן אוטומטי. כדי לקבוע את האזור של כל מערך נתונים, הפקודה קוראת ל-BigQuery API, ולכן למבצע הקריאה נדרשת ההרשאהbigquery.datasets.getבמערכי הנתונים האלה. בלי ההרשאה הזו, הפקודה לא יכולה לדלג על מערכי נתונים באזורים אחרים והקישורים אליהם לא נפתרים. אם הטבלאות ב-BigQuery לא מקוטלגות ב-Knowledge Catalog, משתמשים ב---skip-bigquery-link.-
--validate-only: יוצרים ומעלים את קובץ ה-JSON ומאמתים את משימת המטא-נתונים, אבל לא מטמיעים בפועל.
-
מוודאים שמופיע הסטטוס Created.
REST
כדי לייבא מטא-נתונים של dbt באמצעות ה-API בארכיטקטורת REST:
- יוצרים את פריטי המידע של dbt וממירים אותם לקובץ הייבוא של Knowledge Catalog בפורמט JSON (
dbt_metadata.jsonl). - מעלים את הקובץ שעבר טרנספורמציה לקטגוריית ה-Staging ב-Cloud Storage (
gs://BUCKET_NAME/PATH/). מפעילים את השיטה
projects.locations.metadataJobs.create:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/metadataJobs?metadataJobId=JOB_ID \ -d '{ "type": "IMPORT", "importSpec": { "sourceStorageUri": "gs://BUCKET_NAME/PATH/", "entrySyncMode": "FULL", "aspectSyncMode": "INCREMENTAL", "scope": { "entryGroups": [ "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP" ], "entryTypes": [ "projects/dataplex-connector-types/locations/global/entryTypes/dbt-project", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-model", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-source", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-seed", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-snapshot", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-group", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-exposure", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-metric", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-macro", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-semantic-model", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-saved-query", "projects/dataplex-connector-types/locations/global/entryTypes/dbt-test" ], "aspectTypes": [ "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-node", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-project", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-model", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-source", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-seed", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-snapshot", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-group", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-exposure", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-metric", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-macro", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-semantic-model", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-saved-query", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-data-quality", "projects/dataplex-connector-types/locations/global/aspectTypes/dbt-model-contracts" ] } } }'מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו נמצאת קבוצת הרשומות.
- LOCATION: האזור של קבוצת הרשומות (לדוגמה,
us-central1). - JOB_ID: מזהה ייחודי של משימת המטא-נתונים.
- BUCKET_NAME/PATH: הקידומת של ה-URI של Cloud Storage שאליו הועלה הקובץ
dbt_metadata.jsonl. - ENTRY_GROUP: המזהה הקצר של קבוצת הרשומות ביעד.
כדי לעקוב אחרי הסטטוס של משימת הייבוא, משתמשים ב-method
projects.locations.metadataJobs.get:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/metadataJobs/JOB_ID
אחרי שיוצרים את המשימה, Knowledge Catalog מתזמן את ההרצה הראשונה בהתאם להגדרות שלכם, או שאתם יכולים להפעיל אותה ידנית.
הפעלה מחדש של ההטמעה
אחרי הייבוא הראשון, ברוב ההפעלות צריך רק לרענן את המטא-נתונים של המשאבים שכבר קיימים. משתמשים ב---aspects-only להפעלות האלה. הוא מעדכן רק את מה שהריצה של dbt זיהתה, ולא נוגע בשאר הדברים בקבוצת הרשומות. לכן אפשר להריץ אותו שוב ושוב, בכל לוח זמנים ומכמה משימות.
מריצים הטמעה מלאה (משמיטים את --aspects-only) כשקבוצת הרשומות משתנה:
- ההטמעה הראשונה בקבוצת רשומות.
- משאב dbt נוסף, נמחק או ששמו שונה.
- השם המוצג, התיאור או התוויות של רשומה משתנים.
- ההיררכיה של הרשומות משתנה.
- שינוי ביחסי התלות של dbt, למשל כשמוסיפים או מסירים
ref(),source(), בדיקה או קריאה למאקרו. הפעלות של--aspects-onlyלא יוצרות או מעדכנות קישורים לרשומות. - אתם משנים את
--include-entry-linksאו את--skip-bigquery-link.
הרצה מלאה משכתבת את ההיבטים הנדרשים של כל רשומה מהפריטים בדיסק, לכן צריך להריץ אותה מקבוצת פריטים מלאה ככל האפשר שהצינור יכול לייצר.
מריצים את --aspects-only כדי לרענן את התרחישים:
- אחרי כל פקודת dbt שצינור עיבוד הנתונים מריץ:
dbt build,dbt test,dbt source freshnessאו בנייה מחדש מצומצמת של--select. - עמודה נוספת, מוסרת, משתנה או מתוארת מחדש.
- ה-SQL של המודל השתנה, וההרצה גם כתבה את
catalog.json. - תוצאות בדיקה חדשות או עדכניות של המקור.
--aspects-only יכול להוסיף ולרענן מטא-נתונים, אבל לא להסיר אותם.
חיפוש וצפייה במטא-נתונים של dbt
המסוף
במסוף Google Cloud , נכנסים לדף Search ב-Knowledge Catalog.
בחלונית Filters, מסננים לפי נכסי dbt:
- בקטע System, בוחרים באפשרות Imported Context.
- בסעיף המשנה Managed Connectors שמופיע, בוחרים באפשרות dbt.
בשדה החיפוש, מזינים את השאילתה באמצעות מילת מפתח או חיפוש בשפה טבעית. לדוגמה, כדי לראות את כל נכסי ה-dbt באמצעות חיפוש של מילת מפתח, מזינים
system=DBTאוsystem=DBT AND type=dbt-model.בתוצאות החיפוש, לוחצים על נכס dbt כלשהו כדי לפתוח את דף פרטי הרשומה שלו ולראות את הסכימה, השושלת וההיבטים הטכניים שלו.
gcloud
כדי לחפש רשומות dbt בפרויקט, משתמשים בפקודה
gcloud dataplex entries search:gcloud dataplex entries search 'system=DBT' \ --project=PROJECT_IDכדי לסנן לפי סוג רשומה ספציפי של dbt (כמו מודלים או מקורות):
gcloud dataplex entries search 'system=DBT AND type=dbt-model' \ --project=PROJECT_IDכדי לראות את הפרטים וההיבטים המלאים של רשומת dbt ספציפית, משתמשים בפקודה
gcloud dataplex entries lookup:gcloud dataplex entries lookup ENTRY_ID \ --project=PROJECT_ID \ --location=LOCATION \ --entry-group=ENTRY_GROUP \ --view=FULLמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- LOCATION: המיקום של קבוצת הרשומות (לדוגמה,
us-central1). - ENTRY_GROUP: המזהה הקצר של קבוצת הרשומות ביעד (לדוגמה,
dbt-metadata-ingestion). - ENTRY_ID: המזהה הקצר או שם המשאב היחסי של רשומת ה-dbt.
REST
כדי לחפש רשומות dbt, מפעילים את השיטה
projects.locations:searchEntries:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/global:searchEntries \ -d '{ "query": "system=DBT" }'כדי לסנן לפי סוג ספציפי של משאב dbt:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/global:searchEntries \ -d '{ "query": "system=DBT AND type=dbt-model" }'כדי לאחזר את הפרטים וההיבטים המלאים של המטא-נתונים של רשומה ספציפית, מפעילים את השיטה
projects.locations.entryGroups.entries.get:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP/entries/ENTRY_ID?view=FULLכדי לאחזר הקשר של LLM למשאבי dbt ספציפיים, משתמשים ב-API
projects.locations:lookupContext:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:lookupContext \ -d '{ "resources": [ "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP/entries/ENTRY_ID" ] }'מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- LOCATION: המיקום של קבוצת הרשומות (לדוגמה,
us-central1). - ENTRY_GROUP: המזהה הקצר של קבוצת הרשומות ביעד (לדוגמה,
dbt-metadata-ingestion). - ENTRY_ID: המזהה הקצר או שם המשאב היחסי של רשומת ה-dbt.
כדי להציג את הקישורים של רשומת dbt, צריך לבצע קריאה ל-method projects.locations:lookupEntryLinks. לדוגמה, כדי לאחזר את הטבלה ב-BigQuery שאליה מודל dbt יוצר חומר:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:lookupEntryLinks?entry=ENTRY_NAME&entryMode=SOURCE&entryLinkTypes=projects/dataplex-types/locations/global/entryLinkTypes/reference"
ENTRY_NAME הוא השם המלא של המשאב ברשומת ה-dbt. התוצאות מחולקות לדפים, עם עד 10 קישורים בכל דף.
מידע נוסף על חיפוש משאבים זמין במאמר חיפוש משאבים ב-Knowledge Catalog. מידע נוסף על ביטויי שאילתות ומסננים זמין במאמר תחביר החיפוש של Knowledge Catalog.