檔案內容

本頁說明 Manufacturing Data Engine (MDE) 套件中每個設定套件資料夾的內容。

在每個設定套件資料夾中,MDE 預期會找到每個設定物件的 JSON 檔案。如要建立兩個值區,則應有兩個不同的檔案。系統會忽略檔案名稱。 不過,建議您以要建立的設定物件名稱為檔案命名。每個物件的實際 JSON 結構定義取決於要建立的設定實體類型,但會與對應 API 回應的 JSON 結構定義相符。

如要進一步整理設定套件,您可以參照要嵌入特定欄位下方檔案的其他 JSON 檔案。舉例來說,下列 JSON 會指定具有結構定義的 MDE 值區,而結構定義是在另一個 JSON 檔案中定義。這有助於提升設定套件的整體可讀性和可維護性。


{
  "type": "TAG",
  "name": "second-tag-bucket",
  "attributes": {
    "instanceOverwriteMode": "true"
  },
  "versions": [
    {
      "version": 1,
      "schema": "'{{schemas/generic-schema.json}}'",
      "provider": "local",
    }
  ]
}

如要參照其他檔案,可以使用 {{relative-path/file.json}} 指令,其中包含需要納入現有檔案的檔案相對路徑。MDE 會解析檔案,並將 JSON 內容做為具有參照指令的欄位值。上例中 schema 欄位的值會包含與檔案內容相符的內嵌 JSON 子物件。

對於特定物件,您需要將 JSON 內容嵌入為字串。舉例來說,bucket 物件中的 schema 欄位需要以字串形式嵌入 bucket 結構定義,在這種情況下,參照指令應以單引號 ' 括住,告訴 MDE 以未處理的內容嵌入字串;參照指令會是:'{{relative-path/file.json}}'

參照的檔案可以位於任何目錄,您可以建立不同目錄來整理檔案。舉例來說,上一個範例中名為 schemas 的目錄是任意資料夾結構,可將常見檔案分組。可嵌入的檔案類型為 Whistle 指令碼的 JSONWSTL

以下是每個 MDE 實體的設定範例。

值區

本節將分享 MDE 值區的設定範例。


{
  "type": "TAG",
  "name": "second-tag-bucket",
  "attributes": {
    "instanceOverwriteMode": "true"
  },
  "versions": [
    {
      "version": 1,
      "schema": "'{{schemas/generic-schema.json}}'",
      "provider": "local"
    }
  ]
}


擷取規格

本節將分享 MDE 擷取規格的設定範例。


{
    "name": "csv-full-ingestion-specification",
    "source": "CSV",
    "folderName": "test-csv-folder",
    "separator": ",",
    "skipRows": 10,
    "headers": {
        "headerNames": {
            "names": [
                "one",
                "two",
                "three"
            ]
        }
    },
    "insertMetadata": true,
    "disabled": false
}

訊息類別

本節提供 MDE 訊息類別的設定範例。


{
  "name": "default-numeric-message-class",
  "priority": 970,
  "expression": "#root.event['value'] instanceof T(Number) && #root.event['timestamp'] != null && #root.event['tagName'] != null && #root.event['cluster'] == null"
}

中繼資料執行個體

本節提供 MDE 中繼資料執行個體的設定範例。


{
    "bucketReference": {
        "bucketName": "default-tag-bucket",
        "bucketType": "TAG",
        "version": 1
    },
    "naturalKey": "cloud-natural-key",
    "instance": {
        "site": "simulated-site",
        "factory": "test-factory"
    }
}

剖析器

本節將分享 MDE 剖析器的設定範例。


{
  "name": "default-numeric-parser",
  "messageClassName": "default-numeric-message-class",
  "typeReference": {
    "name": "default-numeric-type",
    "version": 1
  },
  "disabled": false,
  "script": "'{{scripts/parser-script.wstl}}'"
}

類型

本節將分享 MDE 類型的設定範例。


{
  "archetype": "NUMERIC_DATA_SERIES",
  "name": "default-numeric-type",
  "disabled": false,
  "versions": [
    {
      "version": 1,
      "dataSchema": "",
      "storageSpecs": [
        {
          "sink": "PUBSUB_PROTO",
          "disabled": true,
          "materializeCloudMetadata": false
        },
        {
          "sink": "BIG_QUERY",
          "disabled": false,
          "materializeCloudMetadata": true
        },
        {
          "sink": "GCS",
          "disabled": false,
          "materializeCloudMetadata": false
        },
        {
          "sink": "PUBSUB_JSON",
          "disabled": true,
          "materializeCloudMetadata": false
        },
        {
          "sink": "BIG_TABLE",
          "disabled": false,
          "materializeCloudMetadata": false
        }
      ],
      "metadataBuckets": [
        {
          "bucketName": "default-record-bucket",
          "version": 1,
          "required": false
        },
        {
          "bucketName": "second-tag-bucket",
          "version": 1,
          "required": false
        },
        {
          "bucketName": "default-tag-bucket",
          "version": 1,
          "required": false
        }
      ],
      "transformations": [
        {
          "window": {
            "id": "10-minutes-window",
            "durationMinutes": 10,
            "valueExpression": "#message['data']['numeric'].toString()"
          }
        },
        {
          "eventChange": {
            "keyExpression": "#message['tagName']",
            "valueExpression": "#message['data']['numeric'].toString()"
          }
        }
      ]
    }
  ]
}