

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Timestream
<a name="timestream-rule-action"></a>

Timestream 규칙 작업은 MQTT 메시지의 속성(측정값)을 Amazon Timestream 테이블에 기록합니다. Amazon Timestream 에 대한 자세한 내용은 [Amazon Timestream 이란?](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html)을 참조하세요.

**참고**  
일부 AWS 리전에서는 Amazon Timestream을 사용할 수 없습니다. 리전에서 Amazon Timestream을 사용할 수 없는 경우 규칙 작업 목록에 해당 Timestream이 나타나지 않습니다.

이 규칙이 Timestream 데이터베이스에 저장하는 속성은 규칙의 쿼리 문에서 가져온 속성입니다. 쿼리 문의 결과에 있는 각 속성의 값은 데이터 유형을 추론하기 위해 구문 분석됩니다(예: [DynamoDBv2](dynamodb-v2-rule-action.md) 작업). 각 속성의 값은 Timestream 테이블의 자체 레코드에 기록됩니다. 속성의 데이터 유형을 지정하거나 변경하려면 쿼리 문에서 [`cast()`](iot-sql-functions.md#iot-sql-function-cast) 함수를 사용합니다. 각 Timestream 레코드의 내용에 대한 자세한 내용은 [Timestream 레코드 내용](#timestream-rule-action-data) 섹션을 참조하세요.

**참고**  
SQL V2(2016-03-23)에서는 `10.0`과 같은 정수인 숫자 값이 정수 표현(`10`)으로 변환됩니다. [cast()](iot-sql-functions.md#iot-sql-function-cast) 함수를 사용하는 것과 같이 명시적으로 `Decimal` 값으로 캐스팅해도 결과는 바뀌지 않습니다. 결과는 여전히 `Integer` 값입니다. 이로 인해 형식 불일치 오류가 발생하여 Timestream 데이터베이스에 데이터가 기록되지 않을 수 있습니다. 정수 숫자 값을 `Decimal` 값으로 처리하려면 규칙 쿼리 문에 SQL V1(2015-10-08)을 사용하세요.

**참고**  
Timestream 규칙 작업이 Amazon Timestream 테이블에 쓸 수 있는 최대 값 수는 100입니다. 자세한 내용은 [Amazon Timestream 할당량 참조](https://docs.aws.amazon.com//timestream/latest/developerguide/ts-limits.html#limits.default)를 참조하세요.

## 요구 사항
<a name="timestream-rule-action-requirements"></a>

이 규칙 작업은 다음 요구 사항을 충족해야 합니다.
+ `timestream:DescribeEndpoints` 및 `timestream:WriteRecords` 작업을 수행하기 위해가 맡을 AWS IoT 수 있는 IAM 역할입니다. 자세한 내용은 [AWS IoT 규칙에 필요한 액세스 권한 부여](iot-create-role.md) 단원을 참조하십시오.

   AWS IoT 콘솔에서가이 규칙 작업을 수행하도록 허용하는 역할을 선택, 업데이트 또는 생성할 수 AWS IoT 있습니다.
+ 고객-를 사용하여 Timestream에서 저장 데이터를 암호화하는 경우 호출 AWS KMS key 자를 대신하여 AWS KMS 를 사용할 수 있는 권한이 서비스에 있어야 합니다. 자세한 내용은 [AWS 서비스에서 AWS KMS를 사용하는 방법을](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html) 참조하세요.

## 파라미터
<a name="timestream-rule-action-parameters"></a>

이 작업으로 AWS IoT 규칙을 생성할 때 다음 정보를 지정해야 합니다.

`databaseName`  
이 작업에서 생성되는 레코드를 수신할 테이블이 있는 Amazon Timestream 데이터베이스의 이름입니다. 또한 `tableName` 단원도 참조하세요.  
[대체 템플릿](iot-substitution-templates.md) 지원: API 및 AWS CLI 만 해당

`dimensions`  
각 측정값 레코드에 기록되는 시계열의 메타데이터 속성입니다. 예를 들어 EC2 인스턴스의 이름 및 가용 영역 또는 풍력 터빈 제조업체 이름은 차원입니다.    
`name`  
메타데이터 차원 이름입니다. 데이터베이스 테이블 레코드 열의 이름입니다.  
차원 이름은 `measure_name`, `measure_value` 또는 `time`으로 지정할 수 없습니다. 이러한 이름은 예약되어 있습니다. 차원 이름은 `ts_` 또는 `measure_value`로 시작할 수 없으며 콜론(`:`) 문자를 포함할 수 없습니다.  
[대체 템플릿](iot-substitution-templates.md) 지원: 아니요  
`value`  
데이터베이스 레코드의 이 열에 쓸 값입니다.  
[대체 템플릿](iot-substitution-templates.md) 지원: 예

`roleArn`  
Timestream 데이터베이스 테이블에 쓸 수 있는 권한을 AWS IoT 에 부여하는 역할의 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 [요구 사항](#timestream-rule-action-requirements) 단원을 참조하세요.  
[대체 템플릿](iot-substitution-templates.md) 지원: 아니요

`tableName`  
측정값 레코드를 기록할 데이터베이스 테이블의 이름입니다. 또한 `databaseName` 단원도 참조하세요.  
[대체 템플릿](iot-substitution-templates.md) 지원: API 및 AWS CLI 만 해당

`timestamp`  
 항목의 타임스탬프에 사용할 값입니다. 비워 두면 항목이 처리된 시간이 사용됩니다.    
`unit`  
`value`에 설명된 표현식에서 기인하는 타임스탬프 값의 정밀도입니다.  
유효한 값: `SECONDS` \$1 `MILLISECONDS` \$1 `MICROSECONDS` \$1 `NANOSECONDS`. 기본값은 `MILLISECONDS`입니다.  
`value`  
긴 Epoch 시간 값을 반환하는 표현식입니다.  
[time\$1to\$1epoch(String, String)](iot-sql-functions.md#iot-sql-function-time-to-epoch) 함수를 사용하여 메시지 페이로드에 전달된 날짜 또는 시간 값에서 유효한 타임스탬프를 만들 수 있습니다.

## Timestream 레코드 내용
<a name="timestream-rule-action-data"></a>

이 작업을 통해 Amazon Timestream 테이블에 기록된 데이터에는 타임스탬프, Timestream 규칙 작업의 메타데이터 및 규칙 쿼리 문의 결과가 포함됩니다.

쿼리 문의 결과에 있는 각 속성(측정값)에 대해 이 규칙 작업은 지정된 Timestream 테이블에 레코드를 기록합니다.


|  열 이름  |  속성 유형  |  값  |  설명  | 
| --- | --- | --- | --- | 
|  *dimension-name*  |  DIMENSION  |  Timestream 규칙 작업 항목에 지정된 값입니다.  |  규칙 작업 항목에 지정된 각 **차원**은 차원 이름을 사용하여 Timestream 데이터베이스에 열을 생성합니다.  | 
|  measure\$1name  |  MEASURE\$1NAME  |  속성의 이름  |  `measure_value::data-type` 열에 값이 지정된 쿼리 문의 결과에 있는 속성의 이름입니다.  | 
|  measure\$1value::*data-type*  |  MEASURE\$1VALUE  |  쿼리 문의 결과에 있는 속성 값입니다. 속성의 이름은 `measure_name` 열에 있습니다.  |  값은 해석되고\$1 `bigint`, `boolean`, `double` 또는 `varchar` 중 가장 일치하는 항목으로 캐스팅됩니다. Amazon Timestream은 각 데이터 유형에 대해 별도의 열을 생성합니다. 규칙의 쿼리 문에서 [`cast()`](iot-sql-functions.md#iot-sql-function-cast) 함수를 사용하여 메시지의 값을 다른 데이터 형식으로 캐스팅할 수 있습니다.  | 
|  시간  |  TIMESTAMP  |  데이터베이스에 있는 레코드의 날짜 및 시간입니다.  |  이 값은 정의된 경우 규칙 엔진 또는 `timestamp` 속성에 의해 지정됩니다.  | 

\$1 메시지 페이로드에서 읽은 속성 값은 다음과 같이 해석됩니다. 이러한 각 경우에 대한 설명은 [예제](#timestream-rule-action-examples)를 참조하세요.
+ 인용되지 않은 값 `true` 또는 `false`는 `boolean` 유형으로 해석됩니다.
+ 십진수는 `double` 유형으로 해석됩니다.
+ 소수점이 없는 숫자 값은 `bigint` 유형으로 해석됩니다.
+ 따옴표로 묶인 문자열은 `varchar` 유형으로 해석됩니다.
+ 객체 및 배열 값은 JSON 문자열로 변환되어 `varchar` 유형으로 저장됩니다.

## 예제
<a name="timestream-rule-action-examples"></a>

다음 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\$1firmware\$1sku | device\$1id | measure\$1name | measure\$1value::bigint | measure\$1value::varchar | measure\$1value::double | measure\$1value::boolean | 시간 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | complex\$1value | - | \$1"simple\$1element":42,"array\$1of\$1integers":[23,36,56,72],"array of strings":["red","green","blue"]\$1 | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | integer\$1value\$1as\$1string | - | 123456789012 | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | boolean\$1value | - | - | - | TRUE | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | integer\$1value | 123456789012 | - | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | string\$1value | - | 문자열 값 | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | array\$1of\$1integers | - | [23,36,56,72] | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | 문자열 배열 | - | ["red","green","blue"] | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | boolean\$1value\$1as\$1string | - | TRUE | - | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | double\$1value | - | - | 123.456789012 | - | 2020-08-26 22:42:16.423000000 | 
| My Static Metadata | iotconsole-159EXAMPLE738-0 | double\$1value\$1as\$1string | - | 123.45679 | - | - | 2020-08-26 22:42:16.423000000 | 