類型
製造資料引擎 (MDE) 可透過剖析,將一類來源訊息轉換為特定類型的記錄。
類型是設定實體,代表剖析作業的目標,並說明一組結構和語意相似的記錄,這些記錄具有共同的精細程度,且 (視需要) 共用特定中繼資料環境。

舉例來說,您可以建立「機器狀態」和「震動感應器讀數」類型。第一種可用於模擬機器狀態變化事件,例如「執行中」、「閒置」、「排定的維護作業」和「未排定的維護作業」,第二種則可用於模擬一連串的數值震動感應器讀數。
MDE 隨附一組預設型別,但您可以建立新的型別。類型是由下列特徵定義:
- 名稱:類型的名稱。
- 原型:類型所依據的原型名稱。MDE 中的型別一律只會與一個原型相關聯
- 儲存空間規格:每個資料接收器的設定清單。儲存空間規格可供您設定是否要將記錄寫入資料接收器,以及提供更多接收器專屬設定。
- 選用設定參數,包括:
- 資料欄位的 JSON 結構定義 (僅適用於離散和連續原型類型)。
- 中繼資料 bucket 關聯:中繼資料 bucket 清單,這類 bucket 的記錄必須提供執行個體參照。
類型和資料接收器
系統會透過為類型啟用的資料接收器,處理特定類型的記錄串流。您可以啟用 (或停用) 類型資料接收器。舉例來說,您可以設定將某類型的記錄寫入 BigQuery,但不要寫入 Cloud Storage。
支援的資料接收器
MDE 支援下列資料接收器:
- BigQuery
- Bigtable/Federation API
- Cloud Storage
- Pub/Sub (JSON 和 Protobuf)
BigQuery 資料接收器
建立新類型時,MDE 會在 mde_data 資料集中自動建立對應的類型資料表。每種記錄都會寫入對應的類型資料表。
Cloud Storage 資料接收器
記錄會儲存在名為 <project_id>-gcs-ingestion 的 Cloud Storage bucket 中,並使用 Hive 分割功能,以 AVRO 檔案格式儲存。每個視窗為 10 分鐘,每個視窗有 10 個分割區。記錄會依類型分組到資料夾中。
Pub/Sub 資料接收器
Pub/Sub 接收器會將記錄發布至專屬主題。Pub/Sub 訊息結構定義請參閱「Pub/Sub 接收器訊息結構定義」。
中繼資料具體化
您可以設定類型上的每個資料接收器,在記錄中具體化中繼資料。如果啟用這項設定,系統會將中繼資料例項參照解析為中繼資料例項物件,並將物件納入記錄。中繼資料的保存或輸出方式取決於資料接收器。舉例來說,在 BigQuery 中,具體化的中繼資料會寫入 materialized_metadata_field,並採用下列結構定義:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"additionalProperties": {
"type": "object",
"description": "Metadata instance"
}
}
原型
原型代表類型的超類別,每個原型都旨在為記錄提供最佳的處理和儲存模型。原型會定義剖析器發出的特定類型記錄中,必須存在的必要核心欄位。MDE 隨附一組六個系統定義的標準和叢集原型,並分為三種原型系列:
- 數值資料序列 (NDS)
- 離散資料序列 (DDS)
- 連續資料集 (CDS)

MDE 中的型別一律只會與一個原型相關聯,且型別的原型是在建立時定義。
除了原型施加的限制外,您還可以使用型別,進一步定義剖析器發出的 Proto 記錄限制。舉例來說,您可以為型別指定 data 欄位的形狀,也可以定義型別的記錄必須由特定中繼資料進行情境化。
總而言之,proto 記錄結構定義包含下列項目:
- 原型結構定義
- 輸入結構定義
原型家族
每個典型案例系列都包含兩種典型案例:
- 標準
- 已分群
MDE 1.3 版導入了叢集原型的概念,可擴充標準原型的功能。叢集原型提供四個通用欄位,可在 剖析器中填入值。每個資料接收器都會使用這四個欄位,提供額外的查詢和資料存取功能:
- BigQuery:BigQuery 中的叢集類型資料表會依序以四個通用欄位叢集。這可讓您根據叢集欄位,有效率地篩選 BigQuery 中的資料。
- Bigtable Federation API:Federation API 會使用叢集欄位在 Bigtable 中建構資料列鍵,啟用新的資料存取模式。
- Pub/Sub:Pub/Sub 訊息會將欄位做為 Pub/Sub 訊息中的第一層欄位傳遞。
數字原型系列
數字原型系列旨在做為類型基礎,用來模擬一系列帶有時間戳記的數字訊息,例如溫度感應器發出的一連串讀數。
原型標準版和叢集版會定義下列基本記錄結構定義:
標準
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
value |
數字 | 是 |
eventTimestamp |
整數 (格式為 epoch ms) | 是 |
已分群
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
value |
數字 | 是 |
eventTimestamp |
整數 (格式為 epoch ms) | 是 |
clustered_column_1 |
字串 | 否 |
clustered_column_2 |
字串 | 否 |
clustered_column_3 |
字串 | 否 |
clustered_column_4 |
字串 | 否 |
離散原型系列
離散原型系列旨在做為類型基礎,用來模擬帶有時間戳記的事件,例如特定機器或程序中由操作人員驅動的參數變更。
原型標準版和叢集版會定義下列基本記錄結構定義:
標準
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
data |
JSON 物件 | 是 |
eventTimestamp |
整數 (格式為 epoch ms) | 是 |
已分群
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
data |
JSON 物件 | 是 |
eventTimestamp |
整數 (格式為 epoch ms) | 是 |
clustered_column_1 |
字串 | 否 |
clustered_column_2 |
字串 | 否 |
clustered_column_3 |
字串 | 否 |
clustered_column_4 |
字串 | 否 |
連續原型系列
連續原型系列旨在做為類型基礎,用來模擬由開始和結束時間戳記定義的一連串連續狀態,例如機器在一段連續時間內的運作狀態。
原型標準版和叢集版會定義下列基本記錄結構定義:
標準
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
data |
JSON 物件 | 是 |
eventTimestampStart |
整數 (格式為 epoch ms) | 是 |
eventTimestampEnd |
整數 (格式為 epoch ms) | 是 |
已分群
| 欄位 | 資料類型 | 必填 |
|---|---|---|
tagName |
字串 | 是 |
data |
JSON 物件 | 是 |
eventTimestampStart |
整數 (格式為 epoch ms) | 是 |
eventTimestampEnd |
整數 (格式為 epoch ms) | 是 |
clustered_column_1 |
字串 | 否 |
clustered_column_2 |
字串 | 否 |
clustered_column_3 |
字串 | 否 |
clustered_column_4 |
字串 | 否 |
[Data] (資料) 欄位
「離散資料序列」和「連續資料序列」原型接受 data 欄位的 JSON 結構定義。如果已定義欄位的 JSON 結構定義,系統會在執行階段根據結構定義,驗證剖析器發出的記錄所含 data 欄位的值。舉例來說,假設您為離散時間序列類型定義下列結構定義:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"eventName": {
"type": "string"
}
},
"required": ["eventName"]
}
使用離散時間序列類型的先前結構定義時,剖析器發出的下列 (部分) 記錄無效:
{
"data": {
"complex": {
"machineName": "example"
}
}
}
如果資料驗證失敗,記錄會移至死信佇列。無效信件佇列中的記錄稍後可手動處理。
中繼資料 bucket
類型可以參照中繼資料值區。型別上的中繼資料 bucket 參照會定義記錄是否可以或必須 (視 required 屬性的值而定) 提供中繼資料 bucket 執行個體的參照。
類型上的中繼資料 bucket 參照會定義該類型記錄的中繼資料合約。舉例來說,您可以定義某類型所有記錄都必須與裝置中繼資料建立關聯 (在名為「device」的中繼資料 bucket 中提供中繼資料例項的參照)。
如果中繼資料 bucket 與某個型別相關聯,且 required 標記設為 true,則剖析器發出的該型別記錄若未提供中繼資料 bucket 執行個體的參照,就會移至無法傳送的郵件佇列。詳情請參閱「如何重新處理訊息」。
類型版本管理
版本控管類型有很多種,以下各節將逐一說明。
建立新類型版本
您可以為特定類型建立新版本。每個新版本都可以指定其他中繼資料值區關聯,或修改資料欄的結構定義。不過,為確保類型生命週期內資料的一致性,新類型版本只能向前演進,且必須遵守版本管理規則。新版型別可以進行下列變更:
5 月:
- 在資料結構定義中新增選填欄位。
- 將資料結構定義的必填欄位標示為選填。
- 新增中繼資料值區參照。
可能無法:
- 從資料結構定義中移除欄位。
- 變更資料結構定義中現有欄位的資料類型。
- 在資料架構中,將選用屬性標示為必要屬性。
- 移除中繼資料 bucket 參照。
編輯現有類型版本
您可以在現有類型版本中更新儲存規格和轉換,不必建立新的類型版本。
輸入編輯
如要對類型執行大部分作業,必須建立新的類型版本或編輯現有類型版本。您只能啟用或停用與版本無關的類型。停用類型後,該類型的所有版本都會停止接受資料。
類型命名限制
型別名稱可由下列項目組成:
- 字母 (大寫和小寫)、數字和特殊字元
-和_。 - 長度上限為 255 個半形字元。
您可以使用下列規則運算式進行驗證:^[a-z][a-z0-9\\-_]{1,255}$。
如果您嘗試建立違反命名限制的實體,系統會顯示 400 error。