Menautkan rekaman ke instance metadata

Panduan ini menjelaskan cara menautkan data ke instance metadata. Manufacturing Data Engine (MDE) menautkan data ke instance metadata dengan menulis instance_id bucket metadata ke dalam data. Namun, Anda tidak menetapkan instance_id secara langsung dalam rekaman proto di parser. Sebagai gantinya, MDE akan otomatis menyelesaikan instance_id untuk Anda berdasarkan input yang Anda berikan dalam rekaman proto. MDE menyediakan dua cara untuk menyelesaikan masalah di instance_id:

  1. Menurut kunci alami instance metadata.
  2. Menurut nilai instance metadata.

Menyelesaikan instance_id metadata dengan kunci alami

Setiap instance metadata dalam bucket metadata memiliki kunci alami, dan mungkin ada lebih dari satu instance untuk kunci alami. Anda dapat mengaitkan rekaman ke instance metadata terbaru untuk kunci natural dengan memberikan kunci natural dalam rekaman proto di parser. MDE akan mengambil instance terbaru untuk kunci alami yang Anda berikan, dan menyisipkan instance_id instance dalam catatan.

Misalnya, dengan instance metadata berikut dalam bucket metadata rekaman yang disebut machine dengan nomor bucket 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"
  }
]

Dengan pesan sumber berikut sebagai contoh:

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

Skrip Whistle berikut:

package mde

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

Akan menghasilkan catatan proto berikut:

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

Setelah MDE selesai memproses rekaman proto, MDE akan menghasilkan rekaman (baris) berikut di BigQuery (dengan asumsi sink BigQuery dan materialisasi metadata diaktifkan):

[
  {
    "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"
  }
]

Menyelesaikan instance_id metadata menurut nilai instance

Atau, Anda dapat mengaitkan rekaman ke instance metadata terbaru untuk kunci alami dengan memberikan seluruh objek instance metadata dalam rekaman proto di parser. Anda dapat secara opsional memberikan kunci natural. Jika Anda tidak menyertakan kunci alami, MDE menyimpulkan kunci alami berdasarkan jenis bucket:

  • Jika Anda memberikan nilai instance metadata untuk bucket tag dan tidak menyertakan kunci alami, MDE akan otomatis menggunakan nama tag sebagai kunci alami.
  • Jika Anda memberikan nilai instance metadata untuk bucket rekaman dan menghilangkan kunci alami, MDE akan otomatis menggunakan nilai hash objek instance sebagai kunci alami.

Setelah Anda membuat rekaman proto di parser, MDE akan membandingkan objek instance metadata yang diberikan dengan objek instance metadata terbaru untuk kunci alami yang diberikan.

Jika objek instance identik, MDE akan menyisipkan instance_id dari instance metadata terbaru untuk kunci alami ke dalam catatan.

Jika objek instance tidak identik, MDE akan menggunakan instance metadata yang disediakan oleh rekaman proto untuk membuat instance metadata baru untuk kunci alami tertentu. Kemudian, MDE akan memasukkan instance_id instance yang baru dibuat ke dalam catatan.

Penyelesaian metadata instance_id menurut nilai instance sangat berguna saat sumber edge Anda mengirimkan pesan yang sepenuhnya memenuhi syarat. Dengan menggunakan metode ini untuk menyelesaikan instance metadata, Anda dapat mereferensikan instance yang sudah ada serta membuat instance metadata baru secara dinamis.

Mereferensikan instance yang ada berdasarkan nilai

Contoh instance metadata dalam bucket metadata tag yang disebut asset dengan nomor bucket 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"
  }
]

Mengingat pesan sumber berikut:

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

Dan skrip Whistle berikut:

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;
              }
            }
        }]
    }
]

Penerapan skrip Whistle akan menghasilkan rekaman proto berikut:

[
  {
    "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"
        }
      }
    ]
  }
]

Setelah MDE selesai memproses rekaman proto, MDE akan menghasilkan rekaman (baris) berikut di BigQuery (dengan asumsi sink BigQuery dan perwujudan metadata metadata diaktifkan):

[
  {
    "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"
  }
]

Membuat instance baru menurut nilai

Jika instance metadata yang diberikan dalam rekaman proto tidak identik dengan instance metadata terbaru untuk kunci alami yang diberikan, MDE akan membuat instance baru.

Anda dapat mengonfigurasi cara instance baru dibuat menggunakan setelan instanceOverwriteMode di bucket:

  • Jika instanceOverwriteMode disetel ke benar (true), instance baru dibuat dari objek instance yang disediakan dalam rekaman proto. Instance baru disimpan di bucket metadata jika lulus validasi skema bucket.
  • Jika instanceOverwriteMode disetel ke salah (false), instance baru dibuat dengan menggabungkan instance terbaru untuk kunci natural dengan objek instance yang diberikan dalam rekaman proto. Objek yang dihasilkan disimpan sebagai instance metadata baru di bucket metadata jika lulus validasi skema bucket.

Misalnya, dengan instance metadata berikut dalam bucket metadata tag bernama asset dengan nomor bucket 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"
  }
]

Serta pesan sumber berikut:

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

Dengan skrip Whistle berikut:

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;
              }
            }
        }]
    }
]

Penerapan skrip Whistle akan menghasilkan rekaman proto berikut:

[
  {
    "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"
        }
      }
    ]
  }
]

Karena instance metadata yang diberikan tidak sama dengan instance metadata terbaru untuk kunci alami, MDE akan membuat instance metadata baru. Bucket metadata kini memiliki dua instance:

[
  {
    "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"
  }
]

Setelah MDE selesai memproses rekaman proto, MDE akan menghasilkan rekaman (baris) berikut di BigQuery (dengan asumsi sink BigQuery dan perwujudan metadata metadata diaktifkan):

[
  {
    "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"
  }
]