קישור רשומות למופעי מטא-נתונים

במדריך הזה מוסבר איך לקשר רשומות למופעי מטא-נתונים. ‫Manufacturing Data Engine ‏ (MDE) מקשר רשומות למופעי מטא-נתונים על ידי כתיבת instance_id של קטגוריית המטא-נתונים ברשומה. עם זאת, לא מגדירים את התג instance_id ישירות ברשומה של פרוטו במנתח התחביר. במקום זאת, MDE פותר באופן אוטומטי את instance_id בשבילכם על סמך הקלט שסיפקתם ברשומת הפרוטו. ב-MDE יש שתי דרכים לפתור בעיות ב-instance_id:

  1. לפי מפתח טבעי של מופע מטא-נתונים.
  2. לפי ערך מופע של מטא-נתונים.

פתרון של מטא-נתונים instance_id באמצעות מפתח טבעי

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

לדוגמה, אם יש לכם את מופעי המטא-נתונים הבאים בקטגוריית מטא-נתונים של רשומה בשם machine עם מספר הקטגוריה 1:

[
  {
    "instance_id": "a614e25d-fded-41c3-9a56-3222cd30070d",
    "bucket_number": "1",
    "bucket_name": "machine",
    "bucket_version": "1",
    "natural_key": "m-234",
    "instance": {
      "machineName": "CNC Mill"
    },
    "created_timestamp": "2023-06-27 20:00:29.603000 UTC"
  },
  {
    "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529",
    "bucket_number": "1",
    "bucket_name": "machine",
    "bucket_version": "1",
    "natural_key": "m-234",
    "instance": {
      "machineName": "5 Axis CNC Mill"
    },
    "created_timestamp": "2023-06-28 20:00:29.632000 UTC"
  }
]

בהינתן הודעת המקור הבאה כדוגמה:

{
  "sensor": "rotation-speed-sensor",
  "machine": "m-234",
  "timestamp": "1687973092857",
  "value": 1200
}

הסקריפט הבא של Whistle:

package mde

[
    {
        tagName: $root.machine + "-" + $root.sensor;
        data: {
            numeric: $root.value;
        };
        timestamps: {
            eventTimestamp: $root.timestamp;
        }
        cloudMetadata: [{
            bucketReference: {
                bucketName: "machine";
                version: 1;
            }
            naturalKey: $root.machine
        }]
    }
]

תיווצר רשומת הפרוטו הבאה:

[
  {
    "tagName": "m-234-rotation-speed-sensor",
    "data": {
      "numeric": 1200
    },
    "timestamps": {
      "eventTimestamp": "1687973092857"
    },
    "cloudMetadata": [
      {
        "bucketReference": {
          "bucketName": "machine",
          "number": 1
        },
        "naturalKey": "m-234"
      }
    ]
  }
]

אחרי ש-MDE מסיים לעבד את רשומת ה-proto, הוא יוצר את הרשומה (השורה) הבאה ב-BigQuery (בהנחה שהפלט של BigQuery והמטא-נתונים של המטא-נתונים מופעלים):

[
  {
    "id": "6e008960-7f25-4418-899c-75b05c3d3186",
    "tag_name": "m-234-rotation-speed-sensor",
    "type_version": "1",
    "event_timestamp": "2023-06-28 17:24:52.526000 UTC",
    "value": "1200",
    "embedded_metadata": {},
    "materialized_cloud_metadata": {
      "machine": {
        "machineName": "5 Axis CNC Mill"
      }
    },
    "cloud_metadata_ref": {
      "machine": {
        "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529"
      }
    },
    "event_timestamp": "2023-06-28 17:24:53.526000 UTC",
    "source_message_id": "8511923697775002"
  }
]

פתרון בעיה במטא-נתונים instance_id לפי ערך מופע

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

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

אחרי שיוצרים רשומת פרוטו במנתח, MDE משווה את אובייקט מופע המטא-נתונים שסופק לאובייקט מופע המטא-נתונים האחרון של המפתח הטבעי שסופק.

אם אובייקטי המופע זהים, MDE מוסיף לרשומה את instance_id של מופע המטא-נתונים האחרון עבור המפתח הטבעי.

אם האובייקטים של המופע לא זהים, MDE משתמש במופע המטא-נתונים שסופק על ידי רשומת הפרוטו כדי ליצור מופע מטא-נתונים חדש עבור המפתח הטבעי הנתון. לאחר מכן, MDE מוסיף את instance_id של המופע החדש לרשומה.

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

הפניה למופע קיים לפי ערך

דוגמה למופעים של מטא-נתונים בקטגוריה של מטא-נתונים של תג שנקרא asset עם מספר הקטגוריה 1:

[
  {
    "instance_id": "a614e25d-fded-41c3-9a56-3222cd30070d",
    "bucket_number": "1",
    "bucket_name": "asset",
    "bucket_version": "1",
    "natural_key": "s-446-pressure",
    "instance": {
      "machineName": "Stamping M. 446"
    },
    "created_timestamp": "2023-06-27 20:00:29.603000 UTC"
  },
  {
    "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529",
    "bucket_number": "1",
    "bucket_name": "asset",
    "bucket_version": "1",
    "natural_key": "s-446-pressure",
    "instance": {
      "machineName": "Stamping Machine 446"
    },
    "created_timestamp": "2023-06-28 20:00:29.632000 UTC"
  }
]

הודעת המקור:

{
  "sensor": "pressure",
  "machine": "s-446",
  "timestamp": "1687973092857",
  "machineName": "Stamping Machine 446",
  "value": 24
}

והסקריפט הבא של Whistle:

package mde

var tagName: $root.machine + "-" + $root.sensor;

[
    {
        tagName: tagName;
        data: {
            numeric: $root.value;
        };
        timestamps: {
            eventTimestamp: $root.timestamp;
        }
        cloudMetadata: [{
            bucketReference: {
                bucketName: "asset";
                version: 1;
            }
            instance: {
              // optional. Since bucketReference points to a tag bucket, if omitted, the natural is inferred to be tagName
              naturalKey: tagName
              attributes: {
                machineName: $root.machineName;
              }
            }
        }]
    }
]

הפעלת סקריפט Whistle יוצרת את רשומת ה-proto הבאה:

[
  {
    "tagName": "s-446-pressure",
    "data": {
      "numeric": 24
    },
    "timestamps": {
      "eventTimestamp": "1687973092857"
    },
    "cloudMetadata": [
      {
        "bucketReference": {
          "bucketName": "asset",
          "number": 1
        },
        "naturalKey": "s-446-pressure",
        "attributes": {
          "machineName": "Stamping Machine 446"
        }
      }
    ]
  }
]

אחרי ש-MDE מסיים לעבד את רשומת הפרוטו, הוא יוצר את הרשומה (השורה) הבאה ב-BigQuery (בהנחה שהפלט של BigQuery והמטא-נתונים של המטא-נתונים מופעלים):

[
  {
    "id": "6e008960-7f25-4418-899c-75b05c3d3186",
    "tag_name": "s-446-pressure",
    "type_version": "1",
    "event_timestamp": "2023-06-28 17:24:52.526000 UTC",
    "value": "24",
    "embedded_metadata": {},
    "materialized_cloud_metadata": {
      "asset": {
        "machineName": "Stamping Machine 446"
      }
    },
    "cloud_metadata_ref": {
      "asset": {
        "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529"
      }
    },
    "event_timestamp": "2023-06-28 17:24:53.526000 UTC",
    "source_message_id": "8511923697775002"
  }
]

יצירת מופע חדש לפי ערך

אם מופע המטא-נתונים שסופק ברשומת ה-proto לא זהה למופע המטא-נתונים האחרון של המפתח הטבעי שסופק, MDE יוצר מופע חדש.

אפשר להגדיר איך המופע החדש נוצר באמצעות ההגדרה instanceOverwriteMode בקטגוריות:

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

לדוגמה, אם יש לכם מופע מטא-נתונים בקטגוריית מטא-נתונים של תגים בשם asset עם מספר הקטגוריה 1:

[
  {
    "instance_id": "a614e25d-fded-41c3-9a56-3222cd30070d",
    "bucket_number": "1",
    "bucket_name": "asset",
    "bucket_version": "1",
    "natural_key": "s-446-pressure",
    "instance": {
      "machineName": "Stamping M. 446"
    },
    "created_timestamp": "2023-06-27 20:00:29.603000 UTC"
  }
]

והודעת המקור הבאה:

{
  "sensor": "pressure",
  "machine": "s-446",
  "timestamp": "1687973092857",
  "machineName": "Stamping Machine 446",
  "value": 24
}

עם סקריפט Whistle הבא:

package mde

var tagName: $root.machine + "-" + $root.sensor;

[
    {
        tagName: tagName;
        data: {
            numeric: $root.value;
        };
        timestamps: {
            eventTimestamp: $root.timestamp;
        }
        cloudMetadata: [{
            bucketReference: {
                bucketName: "asset";
                number: 1;
            }
            instance: {
              // optional. Since bucketReference points to a tag bucket, if omitted, the natural is inferred to be tagName
              naturalKey: tagName
              attributes: {
                machineName: $root.machineName;
              }
            }
        }]
    }
]

הפעלת סקריפט Whistle יוצרת את רשומת ה-proto הבאה:

[
  {
    "tagName": "s-446-pressure",
    "data": {
      "numeric": 24
    },
    "timestamps": {
      "eventTimestamp": "1687973092857"
    },
    "cloudMetadata": [
      {
        "bucketReference": {
          "bucketName": "asset",
          "number": 1
        },
        "naturalKey": "s-446-pressure",
        "attributes": {
          "machineName": "Stamping Machine 446"
        }
      }
    ]
  }
]

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

[
  {
    "instance_id": "a614e25d-fded-41c3-9a56-3222cd30070d",
    "bucket_number": "1",
    "bucket_name": "asset",
    "bucket_version": "1",
    "natural_key": "s-446-pressure",
    "instance": {
      "machineName": "Stamping M. 446"
    },
    "created_timestamp": "2023-06-27 20:00:29.603000 UTC"
  },
  {
    "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529",
    "bucket_number": "1",
    "bucket_name": "asset",
    "bucket_version": "1",
    "natural_key": "s-446-pressure",
    "instance": {
      "machineName": "Stamping Machine 446"
    },
    "created_timestamp": "2023-06-28 20:00:29.632000 UTC"
  }
]

אחרי ש-MDE מסיים לעבד את רשומת הפרוטו, הוא יוצר את הרשומה (השורה) הבאה ב-BigQuery (בהנחה שהפלט של BigQuery והמטא-נתונים של המטא-נתונים מופעלים):

[
  {
    "id": "6e008960-7f25-4418-899c-75b05c3d3186",
    "tag_name": "s-446-pressure",
    "type_version": "1",
    "event_timestamp": "2023-06-28 17:24:52.526000 UTC",
    "value": "24",
    "embedded_metadata": {},
    "materialized_cloud_metadata": {
      "asset": {
        "machineName": "Stamping Machine 446"
      }
    },
    "cloud_metadata_ref": {
      "asset": {
        "instance_id": "6cfdf894-2fb6-4951-82c6-c4eada587529"
      }
    },
    "event_timestamp": "2023-06-28 17:24:53.526000 UTC",
    "source_message_id": "8511923697775002"
  }
]