本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Timestream 規則動作會將MQTT訊息中的屬性 (量值) 寫入 Amazon Timestream 資料表。如需 Amazon Timestream 的詳細資訊,請參閱什麼是 Amazon Timestream?。
注意
Amazon Timestream 並非所有 AWS 區域皆可用。若 Amazon Timestream 無法在您的區域中使用,則不會顯示於規則動作清單中。
此規則儲存於 Timestream 資料庫中的屬性是規則查詢陳述式所產生的屬性。剖析查詢陳述式結果中每個屬性值,以推斷其資料類型 (如 DynamoDBv2 動作中所示)。每個屬性值都會寫入其在 Timestream 表格中的記錄。如要指定或變更屬性的資料類型,請使用查詢陳述式中的 cast() 函數。如需每個 Timestream 記錄內容的詳細資訊,請參閱 Timestream 記錄內容。
注意
使用 SQL V2 (2016-03-23),整數的數值,例如 10.0
,會轉換其整數表示法 (10
)。將其明確轉換為 Decimal
值,例如使用 cast() 函數不能阻止此種行為,結果仍是一個 Integer
值。這可能會造成類型不相符的錯誤,導致資料無法記錄於 Timestream 資料庫中。若要將整數數值處理為Decimal
值,請針對規則查詢陳述式使用 SQL V1 (2015-10-08)。
注意
可以寫入 Amazon Timestream 表格的最大 Timestream 規則動作值為 100。如需詳細資訊,請參閱 Amazon Timestream 配額參考。
要求
此規則動作具有下列需求:
-
AWS IoT 可以擔任以執行
timestream:DescribeEndpoints
和timestream:WriteRecords
操作IAM的角色。如需詳細資訊,請參閱授予 AWS IoT 規則所需的存取權。在 AWS IoT 主控台中,您可以選擇、更新或建立角色, AWS IoT 以允許 執行此規則動作。
-
如果您使用客戶 AWS KMS 加密 Timestream 中的靜態資料,服務必須具有代表發起人使用 AWS KMS key 的許可。如需詳細資訊,請參閱 AWS 服務使用方式 AWS KMS。
參數
使用此動作建立 AWS IoT 規則時,您必須指定下列資訊:
databaseName
-
Amazon Timestream 資料庫的名稱,其中包含用於接收此動作所建立之記錄的資料表。另請參閱
tableName
。AWS CLI 僅支援替代範本: API和
dimensions
-
寫入每個量測記錄的時間序列的中繼資料屬性。例如,EC2執行個體的名稱和可用區域或風力發電機製造商的名稱是維度。
roleArn
-
授予 AWS IoT 寫入 Timestream 資料庫資料表許可之角色的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱要求。
支援替代範本:否
tableName
-
要寫入測量記錄的資料庫表格名稱。另請參閱
databaseName
。AWS CLI 僅支援替代範本: API和
timestamp
-
要用於項目的 timestamp 的值。若為空白,則會使用處理項目的時間。
unit
-
value
中所述運算式產生的 timestamp 值的精確度。有效值:
SECONDS
|MILLISECONDS
|MICROSECONDS
|NANOSECONDS
。預設值為MILLISECONDS
。 value
-
傳回一個很長的 Epoch 時間值的表達式。
您可使用 time_to_epoch(String, String) 函數,從訊息承載中傳遞的日期或時間建立有效的時間戳記。
Timestream 記錄內容
此動作寫入 Amazon Timestream 表格的資料包括時間戳記、來自 Timestream 規則動作的中繼資料,及規則查詢陳述式的結果。
對於查詢陳述式結果中的每個屬性 (測量),此規則動作會將記錄寫入具有這些欄的指定 Timestream 表格。
欄名稱 |
屬性類型 |
Value |
說明 |
---|---|---|---|
|
DIMENSION |
指定於 Timestream 規則動作項目中的值。 |
指定於規則動作項目中的每個維度都會於 Timestream 資料庫中建立一個具維度名稱的欄。 |
measure_name |
MEASURE_NAME |
屬性名稱 |
查詢陳述式結果中的屬性名稱,其值指定於 |
measure_value:: |
MEASURE_VALUE |
查詢陳述式結果中的屬性值。屬性名稱位於 |
此值會進行解譯* 並轉換為最適合下列的比對項目: |
time |
TIMESTAMP |
資料庫中記錄的日期和時間。 |
此值是由規則引擎或 |
* 從訊息承載讀取的屬性值解譯如下。請參閱 範例,以取得每個案例的說明。
-
將
true
或false
的未加引號值解釋為boolean
類型。 -
將十進位數字解釋為
double
類型。 -
將未帶小數點的十進位數值解釋為
bigint
類型。 -
將帶引號的字串解釋為
varchar
類型。 -
物件和陣列值會轉換為JSON字串,並儲存為
varchar
類型。
範例
下列JSON範例使用規則中的替代範本定義 Timestream AWS IoT 規則動作。
{
"topicRulePayload": {
"sql": "SELECT * FROM 'iot/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"timestream": {
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_timestream",
"tableName": "devices_metrics",
"dimensions": [
{
"name": "device_id",
"value": "${clientId()}"
},
{
"name": "device_firmware_sku",
"value": "My Static Metadata"
}
],
"databaseName": "record_devices"
}
}
]
}
}
上一個範例中定義的 Timestream 主題規則動作與下列訊息承載搭配使用會導致 Amazon Timestream 記錄寫入後續表格中。
{
"boolean_value": true,
"integer_value": 123456789012,
"double_value": 123.456789012,
"string_value": "String value",
"boolean_value_as_string": "true",
"integer_value_as_string": "123456789012",
"double_value_as_string": "123.456789012",
"array_of_integers": [23,36,56,72],
"array of strings": ["red", "green","blue"],
"complex_value": {
"simple_element": 42,
"array_of_integers": [23,36,56,72],
"array of strings": ["red", "green","blue"]
}
}
下表會顯示使用指定主題規則動作處理先前訊息承載建立的資料庫欄和記錄。device_firmware_sku
和 device_id
資料欄是在主題規則動作中DIMENSIONS定義的。Timestream 主題規則動作會建立 time
欄及 measure_name
和 measure_value::*
欄,其中其會填入主題規則動作查詢陳述式結果的值。
device_firmware_sku | device_id | measure_name | measure_value::bigint | measure_value::varchar | measure_value::double | measure_value::boolean | time |
---|---|---|---|---|---|---|---|
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | complex_value | - | {"simple_element":42,"array_of_integers":[23,36,56,72],"字串陣列":["紅","綠","藍"]} | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | integer_value_as_string | - | 123456789012 | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | boolean_value | - | - | - | TRUE | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | integer_value | 123456789012 | - | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | string_value | - | 字串值 | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | array_of_integers | - | [23,36,56,72] | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | 字串陣列 | - | ["紅","綠","藍"] | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | boolean_value_as_string | - | TRUE | - | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | double_value | - | - | 123.456789012 | - | 2020-08-26 22:42:16.423000000 |
我的靜態中繼資料 | iotconsole-159EXAMPLE738-0 | double_value_as_string | - | 123.45679 | - | - | 2020-08-26 22:42:16.423000000 |