מטא-נתונים
מטא-נתונים הם מושג מרכזי ב-Manufacturing Data Engine (MDE). הוא מייצג נתונים הקשריים לגבי עובדות. לדוגמה, קריאות של חיישנים או אירועים. בעזרת מטא-נתונים אפשר לענות על שאלות כמו:
- איזה תג פלט קריאה מספרית?
- איזה מוצר עבר עיבוד בזמן שבו נלקחה קריאה מספרית?
- לאיזה מכשיר שייך החיישן?
- מה הייתה המשמרת שהייתה פעילה בזמן שהתרחש אירוע?
- איזה מתכון היה פעיל בזמן הקריאה?
ה-MDE מבחין בין שני סוגים של מטא-נתונים על סמך קצב השינוי שלהם:
- מטא-נתונים בענן שמשתנים לאט.
- שינוי מהיר של מטא-נתונים מוטמעים.
מטא-נתונים בענן
מטא נתונים שמשתנים לאט מייצגים נתונים הקשריים שלא משתנים לאורך תקופה ממושכת, למשל הקשר של נכס שמתאר את המכונה, התא, הקו והמפעל של חיישן נתון. MDE מאפשר לכם ליצור מודלים של מטא נתונים שמשתנים לאט, לנהל אותם ולחקור אותם, ולקשר אותם לרשומות. אחרי שמקשרים מטא-נתונים לרשומות, אפשר לעיין ברשומות באמצעות ההקשר המשויך.
מטא-נתונים שמשתנים לאט ב-MDE נקראים מטא-נתונים בענן. המטא-נתונים בענן משמשים לשתי פונקציות בפתרון:
- כדי להוסיף הקשר לרשומות ולסווג אותן.
- כמקור לנתוני אב עם ניהול גרסאות לגבי ישויות ייצור, כמו חיישנים, מכשירים וקווי ייצור.
MDE מאפשרת לאחזר מטא-נתונים בענן מהקצה, ליצור אותם באופן ידני באמצעות ממשק האינטרנט של MDE או ליצור אותם באופן פרוגרמטי באמצעות ה-API. האפשרות השנייה מאפשרת לכם להשתמש במטא-נתונים ממערכות קיימות לניהול נכסים בארגון (EAM) או לניהול נתוני בסיס (MDM).
קטגוריות של מטא-נתונים
קטגוריות של מטא-נתונים בענן (נקראות גם "קטגוריות" או "קטגוריות של מטא-נתונים") הן ישויות הגדרה שמייצגות קבוצה קשורה של נתונים הקשריים שמשתנים לאט. לדוגמה, באקט יכול להציג את המאפיינים של תג או מתכון. אפשר לחשוב על קטגוריות כעל מאפייני נתונים בתחום של ניתוח נתונים.
מאפיין המפתח של קטגוריית מטא-נתונים הוא הסכימה שלה. הסכימה (שמוצגת כאובייקט סכימת JSON) מגדירה ומגבילה את המבנה של מופעים של מטא-נתונים שכלולים בה. אפשר ליצור גרסה חדשה של קטגוריית מטא-נתונים, אבל גרסאות חדשות צריכות לעמוד בכללים של ניהול גרסאות של קטגוריות מטא-נתונים בענן.
הדליים הם גלובליים, כלומר אפשר להפנות אליהם מכל סוג.
מופעים של מטא-נתונים
מופעים של מטא-נתונים מייצגים את ה "תוכן" של קטגוריות של מטא-נתונים בענן. כל מופע מתאר ישות מסוימת, כמו נכס, תהליך או היבט של הרשומות שמתועדות. למופעים יש שני סוגים של מזהים:
- UUID (מזהה ייחודי אוניברסלי) שנוצר על ידי המערכת ומזהה את המופע ב-MDE.
- מפתח טבעי שמזהה את הישות מחוץ ל-MDE (לדוגמה, מספר סידורי של חיישן).
הגרסאות של מופעי המטא-נתונים מבוססות על המפתח הטבעי. כלומר, מערכת MDE עוקבת אחרי השינויים במאפיינים של מפתח טבעי מסוים. לדוגמה, תג עם מפתח טבעי tag-123 עשוי להתחיל בתא X, אבל בהמשך לעבור לתא Y. ב-MDE כל מופע נשמר עם חותמת זמן ומקבל מזהה UUID ייחודי. ה-UUID הייחודי הזה מאפשר לאחזר את ההיסטוריה של המופעים עבור מפתח טבעי, להוסיף הקשר לרשומות עם המופע הנכון בזמן ההטמעה, וגם להחיל מופע באופן רטרואקטיבי על רשומות קודמות בזמן השאילתה.
החל מגרסה 1.5.0, מופעים של מטא-נתונים הם בעלי גרסה ומעובדים על סמך event-time ולא על סמך processing time. כששולחים מופעים של מטא-נתונים עם רשומות היסטוריות, MDE יוצר גרסאות של המופעים האלה על סמך eventTimestamp של ההודעה, וכך אפשר לשמור את המטא-נתונים ההיסטוריים והעדכניים בלי לשנות את המופעים האחרונים. מידע נוסף זמין במאמר בנושא ניהול גרסאות של קטגוריות מטא-נתונים.
ב-MDE אפשר להוסיף מופעים לקטגוריה רק אם הם תואמים לסכימה של גרסה ספציפית של אותה קטגוריה.
סכימת קטגוריות של מטא-נתונים
כל גרסה של מאגר מטא-נתונים מכילה סכימה, ואפשר להוסיף מופעים של מטא-נתונים רק לגרסה ספציפית של מאגר. סכימות מגבילות עוד יותר את המבנה של מופעי מטא-נתונים שאפשר להוסיף לגרסה של קטגוריה.
סכימות של קטגוריות מטא-נתונים מבוטאות כאובייקטים של סכימת JSON בהתאם לגרסה 2019-09 של מפרט סכימת JSON.
לדוגמה, אם הסכימה נוספה מאוחר יותר לגרסת דלי, יצוין שכל אובייקט מופע חייב לכלול מאפיין בשם deviceName עם ערך string, והמאפיין הזה הוא חובה. מקרה לדוגמה:
{
"$schema": "https://json-schema.org/draft/2019-09/schema#",
"type": "object",
"properties": {
"deviceName": {
"type": "string"
}
},
"required": ["deviceName"]
}
אימות מופע של מטא-נתונים
כדי להוסיף מופעים של מטא נתונים, הם צריכים להיות תואמים לסכימה שהוגדרה לגרסה ספציפית של מאגר מטא נתונים.
סוגים של מאגרי מידע
MDE מגדיר שלושה סוגים של מאגרי נתונים:
- קטגוריות תגים
- קטגוריות של רשומות
- קטגוריות חיפוש
סוג הקטגוריה מוגדר בזמן היצירה שלה, ואי אפשר לשנות אותו אחר כך.
תיוג קטגוריות
מאגרי תגים מייצגים מאגרים שנותנים הקשר לתגים. כלומר, המפתח הטבעי של המופעים שנכללים בקטגוריה חייב להיות שם התג.
קטגוריות ביומן
מאגרי רשומות מייצגים מאגרים שיכולים לספק הקשר לכל קבוצה של רשומות שיש להן מפתח טבעי משותף. המפתח הטבעי של מופעים של דלי רשומות יכול להיות כל ערך.
חיפוש קטגוריות
דליים של חיפוש מייצגים דליים שלא מספקים הקשר ישיר לרשומות, אלא מספקים נתוני הפניה שאפשר להשתמש בהם בניתוח. המפתח הטבעי של מופעי דלי חיפוש יכול להיות כל ערך.
אי אפשר לקשר בין מופעים של קטגוריות רשומות לבין רשומות. במקום זאת, אפשר לאחזר מופעים מדליק חיפוש על ידי קריאה לפונקציה mde::lookupByKey בסקריפט Whistle. הפונקציה מקבלת את הארגומנטים bucketName, bucketVersion ו-naturalKey, ומחזירה את מופע המטא-נתונים האחרון של המפתח הטבעי שצוין. אפשר להשתמש במופע כדי לאכלס שדות ברשומה של פרוטו במנתח התחביר.
ניהול גרסאות של קטגוריות מטא-נתונים
הסכימה של קטגוריות מטא-נתונים יכולה להתפתח, אבל כדי לשנות את הסכימה צריך ליצור גרסה חדשה של קטגוריה. הפעולה הזו לא משפיעה על גרסאות קיימות של קטגוריות ועל ישויות הגדרה קיימות שמפנות לגרסאות קודמות של קטגוריה. כדי להבטיח עקביות של הנתונים לאורך חיי קטגוריית המטא-נתונים, גרסאות חדשות של סכימות של קטגוריות מטא-נתונים כפופות למגבלות הבאות:
בגרסאות חדשות יכול להיות:
- מוסיפים שדות אופציונליים חדשים.
- סימון שדה חובה כשדה אופציונלי.
הגרסאות החדשות לא יכולות:
- מסירים שדות.
- שינוי סוג הנתונים של שדות קיימים.
- סימון מאפיין אופציונלי כמאפיין חובה.
החל מגרסה 1.5.0, הרזולוציה של מופעי המטא-נתונים מבוססת גם על חותמת הזמן של האירוע. המשמעות היא ש-MDE פותר את מופע המטא-נתונים שהיה האחרון בהשוואה לזמן האירוע של הרשומה. הפעולה הזו מכלילה את הרעיון של מטא-נתונים של קישור MDE כדי לפעול בזמנים שונים, שנשלטים על ידי הודעת המקור.
כדי לשפר את קריאות השאילתה של מופעי המטא-נתונים, ב-MDE v1.5.0 נוסף שדה חדש בשם validFrom שמציין את השעה שבה מופע מטא-נתונים מסוים נכנס לתוקף. השדה הזה משמש את MDE כדי לבדוק איזו מופע של מטא-נתונים לבחור על סמך שעת האירוע של הודעת המקור.
לדוגמה, אם יש לכם מפתח טבעי sensor-a, נניח שאתם שולחים היום ל-MDE מופע אחד של מטא-נתונים עם הערך הבא:
{
"naturalKey": "sensor-a",
"instance": {
"site": "ONE",
"factory": "ONE",
"floor": "ONE",
"line": "ONE",
"cell": "ONE"
}
}
MDE יקבע את הגרסה של המופע הזה על סמך eventTimestamp
הערך של ההודעה הנכנסת, שבה נשלח מופע המטא-נתונים הזה, ומכיוון שחותמת הזמן הוגדרה להיום, MDE יתייחס למופע הזה כאל המופע האחרון ביותר שהתקבל עד עכשיו עבור המפתח הטבעי הזה.
הערך של validFrom במטא-נתונים החדשים האלה יהיה הערך של eventTimestamp בהודעה הנכנסת.
נניח שאתם שולחים מופע היסטורי של מטא-נתונים (לדוגמה, מהשנה שעברה) לאותו מפתח טבעי sensor-a עם הערך הבא:
{
"naturalKey": "sensor-a",
"instance": {
"site": "OLD",
"factory": "OLD",
"floor": "OLD",
"line": "OLD",
"cell": "OLD"
}
}
בדוגמה הזו, MDE יוצר גרסה של המופע הזה על ידי השוואה שלו למופעי המטא-נתונים האחרונים שהיו זמינים בתאריך הקבלה eventTimestamp או לפניו (לדוגמה, בשנה שעברה), והוא יכניס אותו למקום הנכון בציר הזמן.זה ההבדל העיקרי בין גרסה 1.4.x לגרסה 1.5.0. כש-MDE מקבל אירועים של רשומות היסטוריות, הוא יפתור את רשומת המטא-נתונים ההיסטורית שהייתה האחרונה בזמן האירוע. הדיאגרמה הבאה מציגה את הלוגיקה של העיבוד והקישור:

קישור מופעים של מטא-נתונים בענן לרשומות
הוספת הקשר לרשומה כוללת קישור של רשומה למופע של מטא-נתונים. כדי לעשות את זה, המערכת מאחסנת ברשומה הפניה למזהה הייחודי האוניברסלי (UUID) של מופע המטא-נתונים. ב-MDE יש שתי דרכים ליצור את הקישור הזה במנתח התוכן:
- על ידי ציון המפתח הטבעי של מופע.
- על ידי אספקת מופע של מטא-נתונים מסוג proto.
לדוגמה, ה-data sink של BigQuery מאחסן הפניות למופעי מטא-נתונים לכל קטגוריה בשדה שנקרא cloud_metadata_ref. הנה דוגמה לאופן שבו מופיע הפניה למופע של מטא-נתונים ברשומה ב-BigQuery:
{
"id": "e4b66cb9-7c60-4473-b1a1-1954eca92405",
"tag_name": "primepaintingrobot-01-airpressure",
"type_version": "1",
"event_timestamp": "2023-06-20 07:11:59.757000 UTC",
"value": "762.53",
"embedded_metadata": {},
"materialized_cloud_metadata": {
"device-metadata": {
"deviceName": "example-device"
}
},
"cloud_metadata_ref": {
"device-metadata": {
"bucket_number": 143,
"bucket_version": 1,
"instance_id": "50e156a0-dbd9-4f9b-bdc8-1e77574bc4b1"
}
},
"ingest_timestamp": "2023-06-20 07:12:06.335000 UTC",
"source_message_id": "8434396321424812"
}
קישור רשומה למופע של מטא-נתונים בענן באמצעות מפתח טבעי
כדי לקשר רשומה למופע של מטא-נתונים, צריך לספק במנתח נתונים הפניה לגרסה של קטגוריית מטא-נתונים בענן ולמפתח הטבעי של המופע ברשומת הפרוטו. MDE מחליף אוטומטית את המפתח הטבעי ב-UUID של המופע, אם קיים כזה, ושומר את הקישור ברשומה. אם יש כמה מופעים למפתח הטבעי שצוין, MDE בוחר את המופע האחרון (המופע עם created_timestamp האחרון).
אם הקטגוריה שאליה מתייחסים היא קטגוריית TAG, אפשר לא לציין מפתח טבעי.
אם לא מציינים מפתח טבעי, MDE משתמש בערך של השדה tagName כברירת מחדל.
במאמר פתרון בעיה במטא-נתונים instance_id באמצעות מפתח טבעי מוסבר איך לקשר רשומות למופעי מטא-נתונים באמצעות מפתח טבעי.
קישור רשומה למופע מטא-נתונים בענן באמצעות מופע מטא-נתונים של פרוטו
אפשר לקשר רשומה למופע של מטא-נתונים על ידי מתן הפניה לגרסה של קטגוריית מטא-נתונים בענן, וציון מופע של מטא-נתונים מסוג proto, ואופציונלית, מפתח טבעי ברשומת ה-proto במנתח התחביר. השיטה הזו של קישור מופעים של מטא-נתונים שימושית במיוחד אם הודעות המקור כבר מכילות מידע הקשרי לבניית מופע פרוטו תקין.
כשמקשרים רשומה למופע של מטא-נתונים בענן באמצעות מופע של מטא-נתונים מסוג proto, כדאי לשים לב לנקודות הבאות:
- אם לא מציינים מפתח טבעי, MDE בוחר באופן אוטומטי מפתח בשבילכם בהתאם לסוג הדלי.
- אם משמיטים את המפתח הטבעי במופע של פרוטו בהקשר של
TAGbucket, MDE בוחר אוטומטית אתtagNameכמפתח הטבעי. - אם משמיטים את המפתח הטבעי במופע של פרוטו בהקשר של קטגוריית
RECORD, MDE יוצר באופן אוטומטי ערך hash של אובייקט ההודעה ומשתמש בו כמפתח הטבעי. - אם מופע הפרוטו שסופק תואם למופע המטא-נתונים האחרון של המפתח הטבעי שסופק, MDE מחליף את מופע הפרוטו שסופק ב-UUID של המופע התואם ומאחסן את ה-UUID ברשומה.
- אם מופע הפרוטו שסופק לא תואם למופע המטא-נתונים האחרון של המפתח הטבעי שסופק, MDE יוצר מופע מטא-נתונים חדש עבור המפתח הטבעי שסופק ושומר את ה-UUID של המופע החדש ברשומה. ההתנהגות הזו של המערכת מאפשרת לאכלס באופן דינמי קטגוריות של מטא-נתונים עם מקרים שנוצרו מהודעות מקור.
במאמר פתרון של מזהה מופע של מטא-נתונים לפי ערך המופע מוסבר איך לקשר רשומות למופעים של מטא-נתונים באמצעות מופע של מטא-נתונים מסוג proto.
מהותיות של מכונות
במקום לאחסן רק את ה-UUID של מופע מטא-נתונים, אפשר לכלול ברשומות את המופע כולו. הפעולה הזו נקראת מימוש. אפשר להגדיר את ההתנהגות הזו לכל יעד ברמת הסוג, על ידי הגדרת הערך של השדה materializeCloudMetadata ליעד כ-true.
לדוגמה, אם מפעילים את התכונה 'יצירת תצוגה חומרית של מטא-נתונים' ב-sink של BigQuery, נוצרת שורה כמו זו שבהמשך עבור רשומה שמכילה הפניה למופע של מטא-נתונים:
{
"id": "e4b66cb9-7c60-4473-b1a1-1954eca92405",
"tag_name": "primepaintingrobot-01-airpressure",
"type_version": "1",
"event_timestamp": "2023-06-20 07:11:59.757000 UTC",
"value": "762.53",
"embedded_metadata": {},
"materialized_cloud_metadata": {
"tag":{
"bucket_number":143,
"bucket_version":1,
"instance":{
"datatype":"float",
"deviceID":"ppr-01",
"deviceName":"primepaintingrobot-01",
"vendor":"KUKA"
}
}
},
"cloud_metadata_ref": {
"device-metadata": {
"bucket_number": 143,
"bucket_version": 1,
"instance_id": "50e156a0-dbd9-4f9b-bdc8-1e77574bc4b1"
}
},
"ingest_timestamp": "2023-06-20 07:12:06.335000 UTC",
"source_message_id": "8434396321424812"
}
מטא-נתונים מוטמעים
מטא-נתונים שמשתנים במהירות מייצגים נתונים הקשריים שמשתנים בקצב מהיר. דוגמאות טיפוסיות למטא-נתונים שמשתנים במהירות כוללות מונימנטים ומזהים שמתעדכנים אוטומטית, למשל מספרים סידוריים או מזהי עסקאות.
הכלי MDE מאפשר לכם לתת מבנה למטא-נתונים שמשתנים במהירות, להפוך אותם להרמוניים ולשנות אותם באמצעות Whistle, ולהטמיע אותם ישירות ברשומה על ידי מילוי השדה embeddedMetadata ברשומת הפרוטו בכלי הניתוח.
כל יעד הנתונים הנתמך של MDE מאפשר גישה למטא-נתונים מוטמעים. לדוגמה, אם מאכלסים את השדה embeddedMetadata ברשומת הפרוטו במנתח התחביר, תיווצר שורה כמו זו עבור הרשומה שמתקבלת ב-BigQuery:
{
"id": "e4b66cb9-7c60-4473-b1a1-1954eca92405",
"tag_name": "primepaintingrobot-01-airpressure",
"type_version": "1",
"event_timestamp": "2023-06-20 07:11:59.757000 UTC",
"value": "762.53",
"embedded_metadata": {
"transactionNumber": "1234"
},
"materialized_cloud_metadata": {},
"cloud_metadata_ref": {},
"ingest_timestamp": "2023-06-20 07:12:06.335000 UTC",
"source_message_id": "8434396321424812"
}
מחיקה אוטומטית של מטא-נתונים
במקרה של רשומה וגם של מטא-נתונים של תג, MDE עוקב אחרי השינויים שמתרחשים בכל מפתח טבעי על ידי השוואה בין כל מופע חדש למופע הישן. אם יש שינוי באחד ממאפייני המופע, MDE יוצר גרסה חדשה ומסמן אותה כגרסה העדכנית של המופע. כברירת מחדל, התג ומטא-נתוני הרשומה צפויים להיות ברמת פירוט של אלפים ופחות ממאה אלף. המגבלות האלה מאפשרות ל-MDE לאנדקס את מופעי המטא-נתונים כשהם מגיעים מהקצה או מה-API, בלי להשפיע על קצב העיבוד.
לפעמים, בגלל שגיאות בהגדרות, כלי הניתוח יחדיר שדה עם עוצמה גבוהה, כמו חותמת זמן, למופע של המטא-נתונים, וכתוצאה מכך ייווצרו במהירות הרבה גרסאות לכל מפתח טבעי. אחרי סף מסוים, זה משפיע לרעה על הביצועים של ההטמעה. במקרים מסוימים, זה עלול להוביל להפסקה מוחלטת של העיבוד עד שאדמין הפתרון יבצע שינוי גודל של שירותי תשתית הענן הבסיסיים.
החל מגרסה 1.4.0, MDE אוכף מספר מקסימלי של מופעים לכל מפתח טבעי כדי להבטיח ביצועים עקביים. כשהמספר של המפתחות הטבעיים מתקרב לסף הזה (ברירת המחדל היא 200), MDE ישלח אזהרה ל-API החדש של ההתראות כדי ליידע את המשתמש לגבי המפתחות הטבעיים שיש להם מספר גבוה של גרסאות של מופעי מטא-נתונים. אם גודל המופע של המפתחות הטבעיים חורג מהסף, MDE ימחק אוטומטית את המופעים הישנים מהאחסון הפנימי. בנוסף, הוא ישלח התראה נוספת ל-Notifications API כדי ליידע את המשתמש על המפתחות הטבעיים שנמחקו.
גם האזהרה וגם פעולות המחיקה מדווחות ביומן, שאפשר להשתמש בו כדי ליצור מדיניות התראות ב-Cloud Monitoring של הפרויקט.
מגבלות על שמות של קטגוריות מטא-נתונים
שם של קטגוריית מטא-נתונים יכול להכיל את התווים הבאים:
- אותיות (רישיות וקטנות), מספרים והתווים המיוחדים
-ו-_. - יכול להכיל עד 255 תווים.
אפשר להשתמש בביטוי הרגולרי הבא לאימות: ^[a-z][a-z0-9\\-_]{1,255}$.
אם תנסו ליצור ישות שתפר את מגבלות השמות, תקבלו את השגיאה 400 error.