數據處理者的組態模式為何?
重要
已啟用 Azure Arc 的 Azure IoT 操作預覽版目前為預覽狀態。 請勿在生產環境使用此預覽版軟體。
當正式發行可供使用時,您將需要部署新的 Azure IoT 作業安裝,您將無法升級預覽安裝。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
多個管線階段常見的組態類型。 本文說明 路徑、 批次、 範本、 重試和 持續時間 設定模式。
路徑
數個管線階段會使用路徑來識別訊息中的位置,應該讀取或寫入資料的位置。 若要定義這些位置,您可以使用使用 jq 語法的 Path
欄位:
- 路徑會定義為 UI 中的字串,並使用 jq 語法。
- 路徑會定義相對於數據處理者訊息根目錄的路徑。 路徑
.
是指整個訊息。 - 所有路徑的開頭都是
.
。 - 路徑的每個區段可以是:
- 英數物件索引鍵的
.<identifier>
,例如.topic
。 - 任意物件索引鍵的
."<identifier>"
,例如."asset-id"
。 - 任意物件索引鍵的
["<identifier>"]
,例如["asset-id"]
。 - 陣列索引的
[<index>]
,例如[2]
。
- 英數物件索引鍵的
- 區段可以鏈結以形成複雜的路徑。
個別路徑區段必須符合下列規則運算式:
模式 | RegEx | 範例 |
---|---|---|
.<identifier> |
\.[a-zA-Z_][a-zA-Z0-9_]* |
.topic |
."<identifier>" |
\."(\\"\|[^"])*" |
."asset-id" |
["<identifier>"] |
\["(\\"\|[^"])*"\] |
["asset-id"] |
[<index>] |
\[-?[0-9]+\] |
[2] |
若要深入瞭解,請參閱 jq 指南中的路徑。
路徑範例
下列路徑是根據標準資料處理器訊息結構的範例:
.systemProperties
會傳回:{ "partitionKey": "foo", "partitionId": 5, "timestamp": "2023-01-11T10:02:07Z" }
.payload.humidity
會傳回:10
.userProperties[0]
會傳回:{ "key": "prop1", "value": "value1" }
.userProperties[0].value
會傳回:value1
期間
數個階段需要定義時間範圍持續時間。 例如,彙總階段的間隔和呼叫階段的逾時。 這些階段會使用 Duration
欄位來表示此值。
數個管線階段使用時間範圍持續時間。 例如,彙總階段具有間隔屬性,而呼叫階段有逾時屬性。 若要定義這些時間範圍,您可以使用 Duration
欄位:
持續時間是具有下列 <number><char><number><char>
格式的字串值,其中 `char`` 可以是:
h
:小時m
:分鐘s
:秒鐘ms
:毫秒us
,µs
:微秒ns
:奈秒
持續時間範例
2h
1h10m30s
3m9ms400ns
範本
數個階段會要求您使用動態和靜態值的混合來定義字串。 這些階段使用範本值。
數據處理者範本會使用 Mustache 語法 來定義字串中的動態值。
範本中可用的動態系統值如下:
instanceId
;資料處理器執行個體識別碼。pipelineId
:階段所屬的管線識別碼。YYYY
:目前這一年。MM
:目前月份。DD
:目前日期。HH
:目前的小時。mm
:目前的分鐘。
目前,您可以使用範本在目的地階段定義檔案路徑。
靜態和動態欄位
某些階段需要定義可以是靜態字串的值,或是衍生自 Path
Message 中 之 的動態值。 若要定義這些值,您可以使用靜態或動態欄位。
靜態或動態欄位一律會寫入為具有 static
或 dynamic
這兩個值的 type
欄位的物件。 結構描述會根據 type
而有所不同。
靜態欄位
靜態定義的 type
固定值為 static
。 實際值固定為 value
。
欄位 | 類型 | 描述 | 是必要欄位 | 預設 | 範例 |
---|---|---|---|---|---|
type | const 字串 | 欄位的類型。 | Yes | - | static |
value | 任意 | 要用於設定的靜態值 (通常是字串)。 | Yes | - | "static" |
下列範例顯示一些靜態欄位定義:
{
"some-field": {
"type": "static",
"value": "some-static-value"
}
}
{
"some-boolean-field": {
"type": "static",
"value": true
}
}
{
"some-complex-field": {
"type": "static",
"value": {
"some": [
"nested",
"data"
]
}
}
}
動態欄位
固定值為 type
dynamic
。 值為 jq 路徑。
欄位 | 類型 | 描述 | 是必要欄位 | 預設 | 範例 |
---|---|---|---|---|---|
type | const 字串 | 欄位的類型 | Yes | - | dynamic |
value | 路徑 | 每個訊息中的路徑,其中可以動態擷取欄位的值。 | Yes | - | .systemProperties.partitionKey |
下列範例顯示動態欄位定義:
{
"some-field": {
"type": "dynamic",
"value": ".systemProperties.topic"
}
}
重試
呼叫外部服務的階段可以使用重試來處理暫時性失敗並改善可靠性。 您可以在設定階段時覆寫預設重試原則。
有四個可能的重試原則:
default
:預設重試原則是使用指數輪詢重試與三次重試和 500 毫秒的初始重試間隔。none
:不會執行重試。fixed
:固定的重試原則會在每次重試之間重試固定間隔的固定次數。exponential
:指數重試原則會重試固定次數,每次重試之間以指數遞增的間隔。
如果您選擇 default
或 none
,則不需要再提供任何組態。 如果您選擇 fixed
或 exponential
,則必須提供更多組態:
已修正
欄位 | 類型 | 描述 | 是必要的嗎? | 預設 | 範例 |
---|---|---|---|---|---|
type |
字串 | 重試類型的名稱: fixed |
Yes | N/A | fixed |
interval |
期間 | 每次重試之間的初始時間週期。 | No | 500ms |
2s |
maxRetries |
int | 重試次數,從 1 到 20 |
No | 3 |
20 |
指數
欄位 | 類型 | 描述 | 是必要的嗎? | 預設 | 範例 |
---|---|---|---|---|---|
type |
字串 | 重試類型的名稱: exponential |
Yes | N/A | exponential |
interval |
期間 | 每次重試之間的初始時間週期。 | No | 500ms |
2s |
maxRetries |
int | 重試次數,從 1 到 20 |
No | 3 |
20 |
maxInterval |
期間 | 每次重試之間的最大時間週期。 | No | 無 | 100s |
指數重試時間的計算方式如下:如果間隔以 開頭 500ms
,則接下來的重試間隔為 randInt(500ms, 500ms * 2^1)
、 randInt(500ms, 500ms * 2^2)
...、 randInt(500ms, 500ms * 2^maxRetries)
。
Batch
輸出階段中的數個目的地可讓您在訊息寫入目的地之前批次處理訊息。 這些目的地會使用批次來定義批次處理參數。
目前,您可以根據時間定義批次。 若要定義批次處理,您必須指定時間間隔和路徑。 Path
定義要包含在批次輸出中的傳入訊息部分。
欄位 | 類型 | 描述 | 是必要欄位 | 預設 | 範例 |
---|---|---|---|---|---|
Time | 期間 | 批次處理資料的時間長短 | No | 60s (在強制執行批次處理的目的地) |
120s |
路徑 | 路徑 | 要包含在輸出中之每個訊息中的值路徑。 | No | .payload |
.payload.output |