레코드를 메타데이터 인스턴스에 연결

이 가이드에서는 레코드를 메타데이터 인스턴스에 연결하는 방법을 설명합니다. Manufacturing Data Engine (MDE)은 메타데이터 버킷의 instance_id를 레코드에 작성하여 레코드를 메타데이터 인스턴스에 연결합니다. 하지만 파서의 프로토 기록에서 instance_id을 직접 설정하지는 않습니다. 대신 MDE는 프로토 레코드에 제공된 입력을 기반으로 instance_id를 자동으로 확인합니다. MDE는 instance_id에서 해결하는 두 가지 방법을 제공합니다.

  1. 메타데이터 인스턴스 기본 키별
  2. 메타데이터 인스턴스 값

기본 키로 메타데이터 instance_id 확인

메타데이터 버킷의 각 메타데이터 인스턴스에는 기본 키가 있으며 기본 키에 대한 인스턴스가 두 개 이상 있을 수 있습니다. 파서의 프로토 레코드에 자연 키를 제공하여 자연 키의 최신 메타데이터 인스턴스에 레코드를 연결할 수 있습니다. MDE는 제공된 자연 키의 최신 인스턴스를 가져오고 인스턴스의 instance_id을 레코드에 삽입합니다.

예를 들어 버킷 번호가 1machine라는 레코드 메타데이터 버킷에 다음 메타데이터 인스턴스가 있다고 가정해 보겠습니다.

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

다음 휘슬 스크립트:

package mde

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

다음 proto 레코드가 생성됩니다.

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

MDE가 프로토 레코드 처리를 완료하면 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 해결

또는 파서의 프로토 레코드에 전체 메타데이터 인스턴스 객체를 제공하여 자연 키의 latest 메타데이터 인스턴스에 레코드를 연결할 수 있습니다. 선택적으로 자연 키를 제공할 수 있습니다. 자연 키를 생략하면 MDE는 버킷 유형에 따라 자연 키를 추론합니다.

  • tag 버킷의 메타데이터 인스턴스 값을 제공하고 기본 키를 생략하면 MDE가 태그 이름을 기본 키로 자동 사용합니다.
  • record 버킷의 메타데이터 인스턴스 값을 제공하고 기본 키를 생략하면 MDE가 인스턴스 객체의 해시 값을 기본 키로 자동 설정합니다.

파서에서 프로토 레코드를 구성한 후 MDE는 제공된 메타데이터 인스턴스 객체를 제공된 기본 키의 최신 메타데이터 인스턴스 객체와 비교합니다.

인스턴스 객체가 동일한 경우 MDE는 자연 키의 최신 메타데이터 인스턴스의 instance_id를 레코드에 삽입합니다.

인스턴스 객체가 동일하지 않으면 MDE는 프로토 레코드에서 제공한 메타데이터 인스턴스를 사용하여 지정된 기본 키의 새 메타데이터 인스턴스를 만듭니다. 그러면 MDE가 새로 생성된 인스턴스의 instance_id을 레코드에 삽입합니다.

인스턴스 값으로 메타데이터 instance_id를 확인하는 것은 에지 소스에서 정규화된 메시지를 제공하는 경우에 특히 유용합니다. 이 메타데이터 인스턴스 해결 방법을 사용하면 이미 있는 인스턴스를 참조할 수 있을 뿐만 아니라 새 메타데이터 인스턴스를 동적으로 만들 수 있습니다.

값으로 기존 인스턴스 참조

버킷 번호가 1인 태그 메타데이터 버킷 asset의 메타데이터 인스턴스 예:

[
  {
    "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 스크립트를 적용하면 다음 프로토 레코드가 생성됩니다.

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

값으로 새 인스턴스 만들기

프로토 레코드에 제공된 메타데이터 인스턴스가 제공된 기본 키의 최신 메타데이터 인스턴스와 동일하지 않으면 MDE는 새 인스턴스를 만듭니다.

버킷의 instanceOverwriteMode 설정을 사용하여 새 인스턴스가 생성되는 방식을 구성할 수 있습니다.

  • instanceOverwriteMode이 true로 설정되면 새 인스턴스가 프로토 레코드에 제공된 인스턴스 객체에서 생성됩니다. 새 인스턴스가 버킷의 스키마 유효성 검사를 통과하면 메타데이터 버킷에 저장됩니다.
  • instanceOverwriteMode이 false로 설정되면 자연 키의 가장 최근 인스턴스를 프로토 레코드에 제공된 인스턴스 객체와 병합하여 새 인스턴스가 생성됩니다. 결과 객체는 버킷의 스키마 유효성 검사를 통과하는 경우 메타데이터 버킷에 새 메타데이터 인스턴스로 저장됩니다.

예를 들어 버킷 번호가 1이고 태그 메타데이터 버킷이 asset인 경우 다음 메타데이터 인스턴스가 제공됩니다.

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

다음 휘슬 스크립트를 사용합니다.

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 스크립트를 적용하면 다음 프로토 레코드가 생성됩니다.

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