

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 関数
<a name="iot-sql-functions"></a>

SQL 式の SELECT 句または WHERE 句では、以下の組み込み関数を使用できます。

次の外部関数は、ルールアクションの関数と同等に請求されます: [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda)、[https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb)、[https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-registry_data)、および [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow)。また、[Protobuf メッセージを JSON にデコード](https://docs.aws.amazon.com//iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf)している場合にのみ、[https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64) 関数に対して課金されます。詳細については、[AWS IoT Core 料金表のページ](https://aws.amazon.com/iot-core/pricing/)を参照してください。

## abs(10 進数)
<a name="iot-func-abs"></a>

数値の絶対値を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `abs(-5)` は 5 を返します。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int、引数の絶対値。 | 
| Decimal | Decimal、引数の絶対値。 | 
| Boolean | Undefined. | 
| String | Decimal。結果は、引数の絶対値です。文字列が変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## accountid()
<a name="iot-sql-function-accountid"></a>

`String` としてこのルールを所有するアカウントの ID を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`accountid() ` = "123456789012"

## acos(10 進数)
<a name="iot-func-acos"></a>

数値の逆コサインをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `acos(0)` = 1.5707963267948966 


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数の逆コサイン。仮想上の結果は、Undefined として返されます。 | 
| Decimal | Decimal 「倍精度で」、引数の逆コサイン。仮想上の結果は、Undefined として返されます。 | 
| Boolean | Undefined. | 
| String | Decimal、引数の逆コサイン。文字列が変換できない場合、結果は Undefined です。仮想上の結果は、Undefined として返されます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## asin(10 進数)
<a name="iot-func-asin"></a>

数値の逆サインをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `asin(0)` = 0.0


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度」、引数の逆サイン。仮想上の結果は、Undefined として返されます。 | 
| Decimal | Decimal 「倍精度」、引数の逆サイン。仮想上の結果は、Undefined として返されます。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度」、引数の逆サイン。文字列が変換できない場合、結果は Undefined です。仮想上の結果は、Undefined として返されます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## atan(10 進数)
<a name="iot-func-atan"></a>

数値の逆タンジェントをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `atan(0)` = 0.0


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数の逆タンジェント。仮想上の結果は、Undefined として返されます。 | 
| Decimal | Decimal 「倍精度で」、引数の逆タンジェント。仮想上の結果は、Undefined として返されます。 | 
| Boolean | Undefined. | 
| String | Decimal、引数の逆タンジェント。文字列が変換できない場合、結果は Undefined です。仮想上の結果は、Undefined として返されます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## atan2(10 進数、10 進数)
<a name="iot-func-atan2"></a>

正の X 軸と 2 つの引数で定義された点 (x、y) の間の角度をラジアンで返します。 反時計回りの角度では正で (上半面、y > 0)、時計回りの角度では負です (下反面、y < 0)。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `atan2(1, 0)` = 1.5707963267948966


****  

| 引数の型 | 引数の型 | 結果 | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Decimal (倍精度で)、X 軸と指定した点 (x、y) の間の角度。 | 
| Int/Decimal/String | Int/Decimal/String | Decimal、示された点の逆タンジェント。文字列が変換できない場合、結果は Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## aws\$1lambda(functionArn, inputJson)
<a name="iot-func-aws-lambda"></a>

 `inputJson` を Lambda 関数に渡して指定された Lambda 関数を呼び出し、Lambda 関数で生成された JSON を返します。


**引数**  

| 引数 | 説明 | 
| --- | --- | 
| functionArn |  呼び出す Lambda 関数の ARN。Lambda 関数は JSON データを返す必要があります。  | 
| inputJson |  Lambda 関数に渡される JSON 入力です｡ ネストされたオブジェクトクエリとリテラルを渡すには、SQL バージョン 2016-03-23 を使用する必要があります。  | 

指定された Lambda 関数を呼び出すアクセス許可を付与 AWS IoT `lambda:InvokeFunction`する必要があります。次の例は、`lambda:InvokeFunction` を使用して AWS CLI権限を付与する方法を示しています。

```
aws lambda add-permission --function-name "function_name"
--region "region"
--principal iot.amazonaws.com 
--source-arn arn:aws:iot:us-east-1:account_id:rule/rule_name
--source-account "account_id"
--statement-id "unique_id" 
--action "lambda:InvokeFunction"
```

以下は、**add-permission** コマンドの引数です。

--function-name   
Lambda 関数の名前。関数のリソースポリシーを更新するための新しいアクセス許可を追加します。

--region  
 AWS リージョン アカウントの 。

--principal  
アクセス権限を取得するプリンシパル。これは、Lambda 関数を呼び出す AWS IoT アクセス許可を付与`iot.amazonaws.com`するためです。

--source-arn  
ルールの ARN。**get-topic-rule** AWS CLI コマンドを使用して、ルールの ARN を取得できます。

--source-account  
 AWS アカウント ルールが定義されている 。

--statement-id  
一意のステートメント ID。

--action  
このステートメントで許可する Lambda アクション。 AWS IoT が Lambda 関数を呼び出すことを許可するには、`lambda:InvokeFunction` を指定します。

**重要**  
`source-arn` または を指定せずにプリン AWS IoT シパルのアクセス許可を追加すると`source-account`、Lambda アクションを使用してルールを作成する は AWS アカウント 、Lambda 関数を呼び出すルールをトリガーできます AWS IoT。詳細については、[[Lambda Permission Model](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)](ラムダのアクセス許可モデル)を参照してください。

次のような JSON メッセージペイロードがあるとします。

```
{
    "attribute1": 21,
    "attribute2": "value"
}
```

`aws_lambda` 関数は、以下のように Lambda 関数を呼び出すために使用できます。

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", {"payload":attribute1}) as output FROM 'topic-filter'
```

完全な MQTT メッセージペイロードを渡したい場合は、次の例のように、「\$1」を使用して JSON ペイロードを指定できます。

```
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", *) as output FROM 'topic-filter'
```

`payload.inner.element` は、'topic/subtopic' トピックで発行されたメッセージからデータを選択します。

`some.value` は、Lambda 関数によって生成された出力からデータを選択します。

**注記**  
 ルールエンジンは、Lambda 関数の実行時間を制限します。ルールからの Lambda 関数の呼び出しは、2000 ミリ秒以内に完了する必要があります。

## bitand(Int、Int)
<a name="iot-func-bitand"></a>

2 つの `Int` (-converted) 引数のビット表現におけるビット単位の AND を実行します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `bitand(13, 5)` = 5


****  

| 引数の型 | 引数の型 | 結果 | 
| --- | --- | --- | 
| Int | Int | Int、2 つの引数のビット単位の AND。 | 
| Int/Decimal | Int/Decimal | Int、2 つの引数のビット単位の AND。すべての非 Int 数は、最も近い Int に切り下げられます。いずれかの引数が Int に変換できない場合、結果は Undefined です。 | 
| Int/Decimal/String | Int/Decimal/String | Int、2 つの引数のビット単位の AND。すべての文字列は小数に変換され、最も近い Int に切り下げられます。変換が失敗した場合、結果は Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## bitor(Int、Int)
<a name="iot-func-bitor"></a>

2 つの引数のビット表現のビット単位の OR を実行します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `bitor(8, 5)` = 13


****  

| 引数の型 | 引数の型 | 結果 | 
| --- | --- | --- | 
| Int | Int | Int、2 つの引数のビット単位の OR。 | 
| Int/Decimal | Int/Decimal | Int、2 つの引数のビット単位の OR。すべての非 Int 数は、最も近い Int に切り下げられます。変換が失敗した場合、結果は Undefined です。 | 
| Int/Decimal/String | Int/Decimal/String | Int、2 つの引数におけるビット単位の OR。すべての文字列は小数に変換され、最も近い Int に切り下げられます。変換が失敗した場合、結果は Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## bitxor(Int、Int)
<a name="iot-func-xbitor"></a>

2 つの `Int` (-converted) 引数のビット表現におけるビット単位の XOR を実行します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `bitor(13, 5)` = 8


****  

| 引数の型 | 引数の型 | 結果 | 
| --- | --- | --- | 
| Int | Int | Int、2 つの引数におけるビット単位の XOR。 | 
| Int/Decimal | Int/Decimal | Int、2 つの引数におけるビット単位の XOR。非 Int 数は、最も近い Int に切り下げられます。 | 
| Int/Decimal/String | Int/Decimal/String | Int、2 つの引数におけるビット単位の XOR。文字列は小数に変換され、最も近い Int に切り下げられます。いずれかの変換が失敗した場合、結果は Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## bitnot(Int)
<a name="iot-func-bitnot"></a>

`Int` (-converted) 引数のビット表現におけるビット単位の NOT を実行します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `bitnot(13)` = 2


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int、引数のビット単位の NOT。 | 
| Decimal | Int、引数のビット単位の NOT。Decimal の値は、最も近い Int に切り下げられます。 | 
| String | Int、引数のビット単位の NOT。文字列は小数に変換され、最も近い Int に切り下げられます。いずれかの変換が失敗した場合、結果は Undefined です。 | 
| その他の値 | その他の値。 | 

## cast()
<a name="iot-sql-function-cast"></a>

値を 1 つのデータ型から別のデータ型へ変換します。cast は通常の変換と同様に動作し、数値をブールへ/からキャストする追加機能があります。が 1 つのタイプを別のタイプにキャストする方法を決定 AWS IoT できない場合、結果は です`Undefined`。SQL バージョン 2015-10-08 以降でサポートされています。形式: cast(*値* as *型*)。

例:

`cast(true as Int) ` = 1

`cast` を呼び出す際、次のキーワードが「as」の後に表示される場合があります。


**SQL バージョン 2015-10-08 および 2016-03-23 向け**  

| キーワード | 結果 | 
| --- | --- | 
| String | 値を String へキャストします。 | 
| Nvarchar | 値を String へキャストします。 | 
| Text | 値を String へキャストします。 | 
| Ntext | 値を String へキャストします。 | 
| varchar | 値を String へキャストします。 | 
| Int | 値を Int へキャストします。 | 
| 整数 | 値を Int へキャストします。 | 
| Double | 値を (倍精度で) Decimal にキャストします。 | 


**さらに、SQL バージョン 2016-03-23 向け**  

| キーワード | 結果 | 
| --- | --- | 
| Decimal | 値を Decimal へキャストします。 | 
| Bool | 値を Boolean へキャストします。 | 
| Boolean | 値を Boolean へキャストします。 | 

キャストのルール:


**Decimal へのキャスト**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 小数点のない Decimal。 | 
| Decimal |  ソース値。  SQL V2 (2016-03-23) では、`10.0` などの整数である数値は、想定される `Int` 値 (`10`) の代わりに `Decimal` 値 (`10.0`) を返します。整数の数値を `Decimal` 値として確実にキャストするには、ルールクエリステートメントに SQL V1 (2015-10-08) を使用します。   | 
| Boolean | true = 1.0, false = 0.0. | 
| String | 文字列を Decimal として解析しようとします。 AWS IoT は、正規表現 (^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1) と一致する文字列を解析するよう試みます。「0」、「-1.2」、「5E-12」は、小数に自動的に変換される文字列の例です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 


**Int へのキャスト**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | ソース値。 | 
| Decimal | 最も近い Int へ切り下げられたソース値。 | 
| Boolean | true = 1.0, false = 0.0. | 
| String | 文字列を Decimal として解析しようとします。 AWS IoT は、正規表現 (^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1) と一致する文字列を解析するよう試みます。「0」「-1.2」「5E-12」はすべて自動的に小数に変換される文字列の例です。 AWS IoT は文字列を Decimal に変換するよう試み、最も近い Int へ切り下げます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 


**`Boolean` へのキャスト**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 0 = False, any\$1nonzero\$1value = True。 | 
| Decimal | 0 = False, any\$1nonzero\$1value = True。 | 
| Boolean | ソース値。 | 
| String | "true" = True および "false" = False (大文字小文字の区別なし)。その他の文字列値 = Undefined。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 


**String へのキャスト**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int の文字列表現、標準表記。 | 
| Decimal | おそらく科学的表記での Decimal 値の文字列表現。 | 
| Boolean | 「true」または「false」、すべて小文字。 | 
| String | ソース値。 | 
| 配列 | JSON へシリアル化された配列。結果の文字列は角括弧で囲まれたカンマ区切りのリストです。String は引用符で囲まれます。Decimal、Int、Boolean は囲まれません。 | 
| オブジェクト | JSON にシリアル化されたオブジェクト。JSON 文字列はキーと値のペアのカンマ区切りのリストで、最初と最後に中括弧があります。String は引用符で囲まれます。Decimal、Int、Boolean、Null は囲まれません。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## ceil(10 進数)
<a name="iot-func-ceil"></a>

指定の `Decimal` を最も近い `Int` に切り上げます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`ceil(1.2)` = 2

`ceil(-1.2)` = -1


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int、引数値。 | 
| Decimal | Int、最も近い Decimal へ切り上げられたInt 値。 | 
| String | Int。文字列は Decimal に変換され、最も近い Int へ切り上げられます。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| その他の値 | Undefined. | 

## chr(文字列)
<a name="iot-func-chr"></a>

指定の `Int` 引数に対応する ASCII 文字を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例: 

`chr(65)` = "A"。

`chr(49)` = "1"。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 指定された ASCII 値に対応する文字。引数が有効な ASCII 値でない場合、結果は Undefined です。 | 
| Decimal | 指定された ASCII 値に対応する文字。Decimal 引数は、最も近い Int に切り下げられます。引数が有効な ASCII 値でない場合、結果は Undefined です。 | 
| Boolean | Undefined. | 
| String | String が Decimal に変換できる場合、最も近い Int に切り下げられます。引数が有効な ASCII 値でない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| その他の値 | Undefined. | 

## clientid()
<a name="iot-sql-function-clientid"></a>

メッセージを送信している MQTT クライアントの ID を返すか、または、メッセージが MQTT クライアント経由で送られていない場合は、`n/a` を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`clientid() ` = "123456789012"

## concat()
<a name="iot-func-concat"></a>

配列または文字列を連結します。この関数は、任意の数の引数を受け取り、`String` または `Array` を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例: 

`concat() ` = `Undefined`.

`concat(1) ` = "1"。

`concat([1, 2, 3], 4)` = [1, 2, 3, 4]。

`concat([1, 2, 3], "hello")` = [1, 2, 3, "hello"]

`concat("con", "cat")` = "concat"

`concat(1, "hello")` = "1hello"

`concat("he","is","man")` = "heisman"

`concat([1, 2, 3], "hello", [4, 5, 6])` = [1, 2, 3, "hello", 4, 5, 6]


****  

| 引数の数 | 結果 | 
| --- | --- | 
| 0 | Undefined. | 
| 1 | 引数は変更されずに返されます。 | 
| 2\$1 |  引数が `Array` の場合、結果はすべての引数を含む 1 つの配列です。どの引数も配列ではなく、少なくとも 1 つの引数が `String` の場合、結果はすべての引数の `String` 表現の連結です。引数は、前にリストされた標準変換を使用して、文字列に変換されます。  | 

## cos(10 進数)
<a name="iot-func-cos"></a>

数値のコサインをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: 

`cos(0)` = 1.


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数のコサイン。仮想上の結果は、Undefined として返されます。 | 
| Decimal | Decimal 「倍精度で」、引数のコサイン。仮想上の結果は、Undefined として返されます。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度で」、引数のコサイン。文字列が Decimal に変換できない場合、結果は Undefined です。仮想上の結果は、Undefined として返されます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## cosh(10 進数)
<a name="iot-func-cosh"></a>

数値のハイパーボリックコサインをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `cosh(2.3)` = 5.037220649268761。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数の双曲線コサイン。仮想上の結果は、Undefined として返されます。 | 
| Decimal | Decimal 「倍精度で」、引数の双曲線コサイン。仮想上の結果は、Undefined として返されます。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度で」、引数の双曲線コサイン。文字列が Decimal に変換できない場合、結果は Undefined です。仮想上の結果は、Undefined として返されます。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## decode(value, decodingScheme)
<a name="iot-sql-decode-base64"></a>

`decode` 関数を使用して、エンコードされた値をデコードします。デコードされた文字列が JSON ドキュメントの場合、アドレス指定可能なオブジェクトが返されます。それ以外の場合、デコードされた文字列は文字列として返されます。文字列がデコードできない場合、この関数は NULL を返します。この関数は、base64 でエンコードされた文字列とプロトコルバッファ (protobuf) メッセージ形式のデコードをサポートします。

SQL バージョン 2016-03-23 以降でサポートされています。

値  
文字列を返す文字列値、または [AWS IoT SQL リファレンス](iot-sql-reference.md) で定義されている有効な式のいずれか。

decodingScheme  
値をデコードするために使用されるスキームを表すリテラル文字列。現在 `'base64'` そして `'proto'` のみがサポートされています。

### base64 でエンコードされた文字列のデコード
<a name="iot-sql-decode-example"></a>

この例では、メッセージペイロードにエンコードされた値が含まれています。

```
{
    encoded_temp: "eyAidGVtcGVyYXR1cmUiOiAzMyB9Cg=="
}
```

この SQL ステートメントの `decode` 関数は、メッセージペイロードの値をデコードします。

```
SELECT decode(encoded_temp,"base64").temperature AS temp from 'topic/subtopic'
```

`encoded_temp` 値をデコードすると、次の有効な JSON ドキュメントが生成され、SELECT ステートメントで温度値を読み取ることができます。

```
{ "temperature": 33 }
```

この例では、SELECT ステートメントの結果は以下のとおりです。

```
{ "temp": 33 }
```

デコードされた値が有効な JSON ドキュメントでない場合、デコードされた値は文字列として返されます。

### protobuf メッセージペイロードのデコード
<a name="iot-sql-decode-protobuf"></a>

decode SQL 関数を使用して、protobuf メッセージペイロードをデコードできるルールを設定できます。詳細については、「[protobuf メッセージペイロードのデコード](binary-payloads.md#binary-payloads-protobuf)」を参照してください。

**重要**  
プリン AWS IoT シパルのアクセス許可を設定する`source‐account`ときに `source‐arn`または を省略すると、 は他の AWS IoT ルールを通じてデコード関数を呼び出す AWS アカウント ことができます。関数を保護するには、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)」を参照してください。

この関数の署名は次のようになります。

```
decode(<ENCODED DATA>, 'proto', '<S3 BUCKET NAME>', '<S3 OBJECT KEY>', '<PROTO NAME>', '<MESSAGE TYPE>')            
```

`ENCODED DATA`  
デコードする protobuf でエンコードされたデータを指定します。ルールに送信されるメッセージ全体が protobuf でエンコードされたデータである場合は、`*` を使用して raw バイナリ受信ペイロードを参照できます。それ以外の場合は、このフィールドは base-64 でエンコードされた JSON 文字列である必要があり、文字列への参照を直接渡すことができます。  
1) raw バイナリ protobuf 受信ペイロードをデコードするには次のように入力します。  

```
decode(*, 'proto', ...)
```
2) base64 でエンコードされた文字列「a.b」で表される protobuf エンコードされたメッセージをデコードするには、次のように入力します。  

```
decode(a.b, 'proto', ...)
```

`proto`  
protobuf メッセージ形式でデコードするデータを指定します。`proto` の代わりに `base64` を指定すると、この関数は base64 でエンコードされた文字列を JSON としてデコードします。

`S3 BUCKET NAME`  
`FileDescriptorSet` ファイルをアップロードした Amazon S3 バケットの名前。

`S3 OBJECT KEY`  
Amazon S3 バケット内の `FileDescriptorSet` ファイルを指定するオブジェクトキー。

`PROTO NAME`  
`FileDescriptorSet` ファイルを生成した `.proto` ファイルの名前 (拡張子を除く)。

`MESSAGE TYPE`  
`FileDescriptorSet` ファイル内の protobuf メッセージ構造の名前。デコードするデータはこの構造に従う必要があります。

decode SQL 関数を使用した SQL 式の例は次のようになります。

```
SELECT VALUE decode(*, 'proto', 's3-bucket', 'messageformat.desc', 'myproto', 'messagetype') FROM 'some/topic'
```
+ `*`

  `mymessagetype` と呼ばれる protobuf メッセージタイプに準拠するバイナリの受信ペイロードを表します。
+ `messageformat.desc`

  `s3-bucket` という名前の Amazon S3 バケットに保存されている `FileDescriptorSet` ファイル。
+ `myproto`

  `myproto.proto` という名前の `FileDescriptorSet` ファイルを生成するために使用されたオリジナルの `.proto` ファイル。
+ `messagetype`

  `myproto.proto` で定義された `messagetype` と呼ばれるメッセージタイプ (インポートされた依存関係を含む)。

## encode(value, encodingScheme)
<a name="iot-sql-encode-payload"></a>

エンコードスキームに基づいて、ペイロード (非 JSON データの場合もある) を文字列表現にエンコードするには、`encode` 関数を使用します。SQL バージョン 2016-03-23 以降でサポートされています。

値  
[AWS IoT SQL リファレンス](iot-sql-reference.md) で定義されている任意の有効な式。JSON 形式かどうかに関係なくペイロード全体をエンコードするには、\$1 を指定できます。式を指定した場合は、まず評価の結果が文字列に変換され、その後でエンコードされます。

encodingScheme  
使用するエンコードスキームを表すリテラル文字列。現在は、`'base64'` のみがサポートされます。

## endswith(文字列、文字列)
<a name="iot-func-endswith"></a>

`Boolean` を返し、最初の `String` 引数が 2 番目の `String` 引数で終わるかどうかを示します。どちらかの引数が `Null` または `Undefined` の場合、結果は `Undefined` です。SQL バージョン 2015-10-08 以降でサポートされています。

例: `endswith("cat","at")` = true。


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| String | String | 最初の引数が 2 番目の引数で終わる場合は true。それ以外の場合は、false を返します。 | 
| その他の値 | その他の値 | 両方の引数は標準変換ルールを使用して文字列に変換されます。最初の引数が 2 番目の引数で終わる場合は true。それ以外の場合は、false を返します。どちらかの引数が Null または Undefined の場合、結果は Undefined です。 | 

## exp(10 進数)
<a name="iot-func-exp"></a>

e を `Decimal` 引数の累乗にして返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `exp(1)` = e。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal(倍精度で)、e ^ 引数。 | 
| Decimal | Decimal(倍精度で)、e ^ 引数。 | 
| String | Decimal(倍精度で)、e ^ 引数。String が Decimal に変換できない場合、結果は Undefined です。 | 
| その他の値 | Undefined. | 

## floor(Decimal)
<a name="iot-func-floor"></a>

指定の `Decimal` を最も近い `Int` に切り下げます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`floor(1.2)` = 1

`floor(-1.2)` = -2


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int、引数値。 | 
| Decimal | Int、最も近い Decimal へ切り下げられた Int 値。 | 
| String | Int。文字列は Decimal に変換され、最も近い Int へ切り下げられます。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| その他の値 | Undefined. | 

## get
<a name="iot-sql-function-get"></a>

コレクションのような型から値を抽出します (配列、文字列、オブジェクト)。最初の引数に変換は適用されません。テーブルで説明されているように、変換は 2 番目の引数に適用されます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`get(["a", "b", "c"], 1) ` = "b"

`get({"a":"b"}, "a")` = "b"

`get("abc", 0)` = "a"


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| 配列 | Any Type (Int に変換) | 2 番目の引数により提供される Array のゼロベースインデックスの項目 (Int に変換)。変換が失敗した場合、結果は Undefined です。インデックスが Array の境界の外にある場合 (negative or >= array.length)、結果は Undefined です。 | 
| 文字列 | Any Type (Int に変換) | 2 番目の引数により提供される文字列のゼロベースインデックスの文字 (Int に変換)。変換が失敗した場合、結果は Undefined です。インデックスが文字列の境界の外にある場合 (negative or >= string.length)、結果は Undefined です。 | 
| オブジェクト | String (変換の適用なし) | 2 番目の引数として提供される文字列キーに対応する最初の引数のオブジェクトに保存されている値。 | 
| その他の値 | 任意の値 | Undefined. | 

## get\$1dynamodb (tableName、partitionKeyName、partitionKeyValue、sortKeyName、sortKeyValue, roleArn)
<a name="iot-sql-function-get-dynamodb"></a>

DynamoDB テーブルからデータを取得します。`get_dynamodb()` を使用すると、ルールが評価されている間に DynamoDB テーブルを照会できます。DynamoDB から取得したデータを使用して、メッセージペイロードをフィルタリングまたは拡張できます。SQL バージョン 2016-03-23 以降でサポートされています。

`get_dynamodb()` には以下のパラメータがあります。

tableName  
クエリする DynamoDB テーブルの名前。

partitionKeyName  
パーティションキーの名前。詳細については、「[DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。

partitionKeyValue  
レコードを識別するために使用されるパーティションキーの値。詳細については、「[DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。

sortKeyName  
(オプション) ソートキーの名前。このパラメータは、クエリされた DynamoDB テーブルが複合キーを使用する場合にのみ必要です。詳細については、「[DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。

sortKeyValue  
(オプション) ソートキーの値。このパラメータは、クエリされた DynamoDB テーブルが複合キーを使用する場合にのみ必要です。詳細については、「[DynamoDB Keys](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)」を参照してください。

roleArn  
DynamoDB テーブルへのアクセスを付与する IAM ロールの ARN。ルールエンジンは、ユーザーに代わって DynamoDB テーブルにアクセスするためにこのロールを引き受けます。過度に許容されるロールの使用は避けてください。ルールで必要なアクセス許可のみをロールに付与します。1 つの DynamoDB テーブルへのアクセスを許可するポリシーの例を次に示します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dynamodb:GetItem",
            "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/table-name"
        }
    ]
}
```

`get_dynamodb()` の使用方法の例として、 AWS IoTに接続されているすべてのデバイスのデバイス ID と位置情報を含む DynamoDB テーブルがあるとします。次の SELECT 文は、 `get_dynamodb()` 関数を使用して、指定したデバイス ID の場所を取得します。

`SELECT *, get_dynamodb("InServiceDevices", "deviceId", id, "arn:aws:iam::12345678910:role/getdynamo").location AS location FROM 'some/topic' `

**注記**  
1 つの SQL 文につき最大 1 回 `get_dynamodb()` を呼び出すことができます。1 つの SQL 文で `get_dynamodb()` 複数回呼び出すと、アクションを呼び出さずにルールが終了します。

## get\$1mqtt\$1property(name)
<a name="iot-sql-function-get-mqtt-property"></a>

次の MQTT5 ヘッダーのいずれかを参照します: `contentType`、`payLoadFormatIndicator`、`responseTopic`、`correlationData`。この関数は、`content_type`、`format_indicator`、`response_topic`、`correlation_data` いうリテラル文字列のいずれかを引数としてとります。詳細については、以下の**関数の引数**表を参照してください。

contentType  
文字列: 公開メッセージの内容を説明する UTF-8 でエンコードされた文字列。

payLoadFormatIndicator  
文字列: ペイロードが UTF-8 としてフォーマットされているかどうかを示す列挙型文字列の値。有効な値は、`UNSPECIFIED_BYTES` および `UTF8_DATA` です。

responseTopic  
文字列: 応答メッセージのトピック名として使用される UTF-8 でエンコードされた文字列。レスポンストピックは、受信者がリクエスト/レスポンスフローの一部として公開すべきトピックを説明するために使用されます。トピックにワイルドカード文字を含めることはできません。

correlationData  
文字列: 要求メッセージの送信者によって base64 でエンコードされたバイナリデータで、応答メッセージを受信した際に、それがどの要求に対するものかを識別するために使用されます。

次の表は、`get_mqtt_property` 関数で使用できる関数の引数と、それに関連する戻り値の型を示しています。


**関数の引数**  

| SQL | 返されるデータ型 (存在する場合) | 返されるデータ型 (存在しない場合) | 
| --- | --- | --- | 
| get\$1mqtt\$1property("format\$1indicator") | 文字列 (UNSPECIFIED\$1BYTES または UTF8\$1DATA) | 文字列 (UNSPECIFIED\$1BYTES) | 
| get\$1mqtt\$1property("content\$1type") | String | 未定義 | 
| get\$1mqtt\$1property("response\$1topic") | String | 未定義 | 
| get\$1mqtt\$1property("correlation\$1data") | base64 でエンコードされた文字列 | 未定義 | 
| get\$1mqtt\$1property("some\$1invalid\$1name") | 未定義 | 未定義 | 

以下の SQL ルール例では、`contentType`、`payLoadFormatIndicator`、`responseTopic`、`correlationData` のいずれかの MQTT5 ヘッダーを参照しています。

```
SELECT *, get_mqtt_property('content_type') as contentType,
          get_mqtt_property('format_indicator') as payloadFormatIndicator,
          get_mqtt_property('response_topic') as responseTopic,
          get_mqtt_property('correlation_data') as correlationData
FROM 'some/topic'
```

## get\$1or\$1default(式、defaultValue)
<a name="iot-sql-function-get-or-default"></a>

指定された場合は 2 番目のパラメータのデフォルト値を返します。それ以外の場合は、最初のパラメータの式が null、undefined、または fail を返すときに undefined を返します。SQL バージョン 2016-03-23 以降でサポートされています。

**重要**  
`get_or_default` は、JSON 以外のペイロードをそのまま直接サポートしていません。JSON 以外のペイロードを使用している場合は、 `encode`または `decode`関数を使用します。

`get_or_default()` には以下のパラメータがあります。

expression  
[データ型](iot-sql-data-types.md)、[関数](#iot-sql-functions)、、[変数](iot-sql-set.md#iot-sql-set-usage)[リテラル](iot-sql-literals.md)、、[ネストされたオブジェクトのクエリ](iot-sql-nested-queries.md)または を含む有効な式[JSON 拡張](iot-sql-json.md)。

defaultValue  
(オプション) [データ型](iot-sql-data-types.md)、[関数](#iot-sql-functions)、、[変数](iot-sql-set.md#iot-sql-set-usage)[リテラル](iot-sql-literals.md)、、[ネストされたオブジェクトのクエリ](iot-sql-nested-queries.md)または を含む有効な式[JSON 拡張](iot-sql-json.md)。これは、最初の引数が null、未定義、または失敗を返すたびに返される値です。  
get\$1secret、get\$1dynamodb、aws\$1lambda、get\$1thing\$1shadow、decode-protobuf、Machinelearning\$1predict など、顧客所有のリソースからデータを取得する関数は、defaultValue パラメータでは許可されません。

次の表は、各引数と関連する出力に許容される関数引数を示しています。


| 最初の引数 | 2 番目の引数 | Output | 
| --- | --- | --- | 
| 成功した評価 | 任意の値または指定なし | 最初の引数値。 | 
| 未定義、Null、または失敗 | Undefined または Null を含む任意の値 | 2 番目の引数値。 | 
| 未定義、Null、または失敗 | 指定されていません | Undefined | 

**例:**

例 1:

次の例では、DynamoDB テーブルまたはクエリが失敗した場合の defaultValue 値を示します。

```
SELECT 
    device_id,
    get_or_default(
        get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME"),
        {"mode": "standard", "timeout": 30, "enabled": true }
    ) as config
FROM 'device/telemetry'
```

例 2:

次の例では、ステータスが未定義の場合、安全なデフォルト値「UNKNOWN」を示します。

```
SELECT 
  get_or_default( CASE status
    WHEN 'active' THEN 'GOOD'
    WHEN 'inactive' THEN 'BAD'/
    ELSE 'UNKNOWN'
  END, 'UNKNOWN') as status_category
FROM 'topic/subtopic'
```

例 3:

次の例は、単一のパラメータで get\$1or\$1default を使用する方法を示しています。これは、明確なデフォルト値がないが、ルールの実行を失敗させたくない場合に役立ちます。

```
SELECT 
  get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME") as config
FROM 'device/telemetry'
```

DynamoDB ルックアップが失敗した場合、ルールの実行は失敗し、アクションは実行されません。代わりに次の SQL を使用する場合:

```
SELECT 
  get_or_default(get_dynamodb("DeviceConfig", "deviceId", nonExistentId, "arn:aws:iam::123456789012:role/ROLE_NAME")) as config
FROM 'device/telemetry'
```

get\$1or\$1default ステートメントは に評価されるため`Undefined`、この例では SELECT ステートメント全体が に評価`{}`され、すべてのルールアクションが試行されます。

**重要**  
この機能を使用する際にセキュリティを維持するために、以下のベストプラクティスに従うことをお勧めします。  
デフォルト値を含むルール定義でハードコードされたシークレットを使用しない
機密情報の管理 AWS Secrets Manager に使用する

## get\$1registry\$1data(registryAPI, thingName, roleArn)
<a name="iot-sql-function-get-registry-data"></a>

 AWS IoT ルール内の AWS IoT モノのレジストリデータを取得します。レジストリデータ (デバイスが属する属性、モノのタイプ、モノのグループなど) を読み取って、この情報を使用してメッセージをフィルタリング、強化、または動的にルーティングできます。SQL バージョン 2016-03-23 以降でサポートされています。

`get_registry_data()` には以下のパラメータがあります。

registryAPI  
呼び出されるレジストリ API。有効な値は、`DescribeThing` および `ListThingGroupsForThing` です。これらの値は定数文字列である必要があります。

thingName  
文字列: レジストリデータを取得するモノの名前。

roleArn  
文字列: 呼び出される API に基づく`iot:DescribeThing`アクセス許可またはアクセス`iot:ListThingGroupsForThing`許可を持つロール ARN。

`get_registry_data` 関数のレスポンス形式は、 というレジストリ API と同じです。詳細については、[DescribeThing](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeThing.html) API と [ListThingGroupsForThing](https://docs.aws.amazon.com//iot/latest/apireference/API_ListThingGroupsForThing.html) APIsを参照してください。

例:

モノのタイプ情報を取得して、モノのタイプが であるモノ (モノの名前が MQTT クライアント ID と一致するもの) の AWS IoT Core ライフサイクルイベントメッセージをフィルタリングできます`testenv`。

```
SELECT * 
FROM '$aws/events/lifecycle/+' 
WHERE 
    get_registry_data("DescribeThing",clientId,[roleArn]).thingTypeName='testenv'
```

例:

ゲートウェイデバイス によって送信される`sensor1`すべてのメッセージのモノの名前を持つデバイスのモノ属性を取得できます`gateway1`。

```
SELECT *, get_registry_data("DescribeThing","sensor1",[roleArn]).attributes.temperature_threhold AS device1_tempthreshold 
FROM home1/gateway1/sensor1/#
```

**注記**  
アクションとエラーアクションの SQL ステートメントと置換テンプレートごとに`get_registry_data()`最大 1 回呼び出すことができます。

## get\$1secret(secretId, secretType, key, roleArn)
<a name="iot-sql-function-get-secret"></a>

[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) の現在のバージョンのシークレットの暗号化された `SecretString` または `SecretBinary` フィールドの値を取得します。シークレットの作成と維持の詳細については、[CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html)、[UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)、および [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html) を参照してください。

`get_secret()` には以下のパラメータがあります。

secretId  
文字列: 取得するシークレットの Amazon リソースネーム (ARN) またはフレンドリ名。

secretType  
文字列: シークレットタイプ。有効な値: `SecretString` \$1 `SecretBinary`。    
SecretString  
+ APIs、、 AWS CLIまたは AWS Secrets Manager コンソールを使用して JSON オブジェクトとして作成するシークレットの場合:
  + `key` パラメータの値を指定すると、この関数は指定されたキーの値を返します。
  + `key` パラメータの値を指定しない場合、この関数は JSON オブジェクト全体を返します。
+ API または AWS CLIを使用して非 JSON オブジェクトとして作成するシークレットについては、以下を実行します。
  + `key` パラメータの値を指定すると、この関数は例外で失敗します。
  + `key` パラメータの値を指定しない場合、この関数はシークレットの内容を返します。  
SecretBinary  
+ `key` パラメータの値を指定すると、この関数は例外で失敗します。
+ `key` パラメータの値を指定しない場合、この関数は base64 でエンコードされた UTF-8 文字列としてシークレット値を返します。

key  
(オプション) 文字列: シークレットの `SecretString` フィールドに保存されている JSON オブジェクト内のキー名。JSON オブジェクト全体ではなく、シークレットに保存されているキーの値のみを取得する場合は、この値を使用します。  
このパラメータの値を指定し、シークレットの `SecretString` フィールド内に JSON オブジェクトが含まれていない場合、この関数は例外で失敗します。

roleArn  
文字列: `secretsmanager:GetSecretValue` および `secretsmanager:DescribeSecret` アクセス許可を持つロール ARN。

**注記**  
この関数は常に、シークレットの現在のバージョン (`AWSCURRENT` タグ付きのバージョン) を返します。 AWS IoT ルールエンジンは、各シークレットを最大 15 分間キャッシュします。その結果、ルールエンジンがシークレットを更新するのに最長で 15 分かかることがあります。つまり、 での更新から最大 15 分後にシークレットを取得した場合 AWS Secrets Manager、この関数は以前のバージョンを返す可能性があります。  
この関数は計測されませんが、 AWS Secrets Manager 料金が適用されます。シークレットキャッシュメカニズムにより、ルールエンジンが AWS Secrets Managerを呼び出すことがあります。ルールエンジンは完全に分散されたサービスであるため、15 分のキャッシュウィンドウ中にルールエンジンから複数の Secrets Manager API 呼び出しが実行される場合があります。

例:

次の API キー認証の例のように、HTTPS ルールアクションの認証ヘッダーで `get_secret` 関数を使用できます。

```
"API_KEY": "${get_secret('API_KEY', 'SecretString', 'API_KEY_VALUE', 'arn:aws:iam::12345678910:role/getsecret')}"
```

HTTPS ルールアクションの詳細については、「[HTTP](https-rule-action.md)」を参照してください。

## get\$1thing\$1shadow(thingName、shadowName、roleArn)
<a name="iot-sql-function-get-thing-shadow"></a>

指定されたモノの指定されたシャドウを返します。SQL バージョン 2016-03-23 以降でサポートされています。

thingName  
文字列: シャドウを取得する対象のモノの名前。

shadowName  
(オプション) 文字列: シャドウの名前。このパラメータは、名前の付きのシャドウを参照する場合にのみ必要です。

roleArn  
文字列: `iot:GetThingShadow` アクセス権限を持つロール ARN。

例:

名前付きシャドウとともに使用する場合は、`shadowName` パラメータを指定します。

```
SELECT * from 'topic/subtopic'
WHERE
    get_thing_shadow("MyThing","MyThingShadow","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
    .state.reported.alarm = 'ON'
```

名前のないシャドウとともに使用する場合は、`shadowName` パラメータを省略します。

```
SELECT * from 'topic/subtopic'
WHERE
    get_thing_shadow("MyThing","arn:aws:iam::123456789012:role/AllowsThingShadowAccess")
    .state.reported.alarm = 'ON'
```

## get\$1user\$1properties(userPropertyKey)
<a name="iot-sql-function-get-user-properties"></a>

MQTT5 でサポートされているプロパティヘッダーの一種であるユーザープロパティを参照します。

userProperty  
文字列: ユーザープロパティは、キーと値のペアです。この関数は、キーを引数にとり、関連するキーと一致するすべての値の配列を返します。

**関数の引数**

メッセージヘッダー内の以下のユーザープロパティの場合:


| キー | 値 | 
| --- | --- | 
| あるキー | ある値 | 
| 別のキー | 別の値 | 
| あるキー | 重複したキーを持つ値 | 

次の表に、予想される SQL の動作を示します。


| SQL | 返されるデータ型 | 返されるデータ値 | 
| --- | --- | --- | 
| get\$1user\$1properties('あるキー') | 文字列の配列 | ['some value', 'value with duplicate key'] | 
| get\$1user\$1properties('別のキー') | 文字列の配列 | ['a different value'] | 
| get\$1user\$1properties( ) | キーと値のペアのオブジェクトの配列 | [\$1'"some key": "some value"'\$1, \$1"other key": "a different value"\$1, \$1"some key": "value with duplicate key"\$1] | 
| get\$1user\$1properties('存在しないキー') | 未定義 |  | 

以下の SQL ルール例では、ユーザープロパティ (MQTT5 プロパティヘッダーの一種) をペイロードに参照しています。

```
SELECT *, get_user_properties('user defined property key') as userProperty
FROM 'some/topic'
```

## ハッシュ関数
<a name="iot-sql-function-hash"></a>

 AWS IoT には、次のハッシュ関数が用意されています。
+ md2
+ md5
+ sha1
+ sha224
+ sha256
+ sha384
+ sha512

1 つの文字列引数を除くすべてのハッシュ関数。結果はその文字列のハッシュ値です。標準文字列変換は非文字列引数に適用されます。すべてのハッシュ関数は、SQL バージョン 2015-10-08 以降でサポートされます。

例:

`md2("hello")` = "a9046c73e00331af68917d3804f70655"

`md5("hello")` = "5d41402abc4b2a76b9719d911017c592"

## indexof(文字列、文字列)
<a name="iot-sql-function-indexof"></a>

最初の引数のサブ文字列として、2 番目の引数の最初のインデックス (ゼロベース) を返します。両方の引数は文字列であることが期待されます。文字列ではない引数は、標準文字列変換ルールに従います。この関数は、配列にではなく、文字列にのみ適用されます。SQL バージョン 2016-03-23 以降でサポートされています。

例:

`indexof("abcd", "bc") ` = 1

## isNull()
<a name="iot-sql-function-isNull"></a>

引数が `Null` 値である場合は true を返します。SQL バージョン 2016-03-23 以降でサポートされています。

例:

`isNull(5) ` = false。

`isNull(Null) ` = true。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | true | 
| Undefined | false | 

## isUndefined()
<a name="iot-sql-function-isUndefined"></a>

引数が `Undefined` である場合は true を返します。SQL バージョン 2016-03-23 以降でサポートされています。

例:

`isUndefined(5) ` = false。

`isUndefined(floor([1,2,3]))) ` = true。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | false | 
| Undefined | true | 

## length(文字列)
<a name="iot-sql-function-length"></a>

指定された文字列の文字数を返します。標準変換ルールは、非 `String` 引数に適用されます。SQL バージョン 2016-03-23 以降でサポートされています。

例:

`length("hi")` = 2

`length(false)` = 5

## ln(10 進数)
<a name="iot-func-nln"></a>

引数の自然対数を返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `ln(e)` = 1。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal (倍精度で)、引数の自然対数。 | 
| Decimal | Decimal (倍精度で)、引数の自然対数。 | 
| Boolean | Undefined. | 
| String | Decimal (倍精度で)、引数の自然対数。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## log(10 進数)
<a name="iot-func-log"></a>

引数の 10 を底とする対数を返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `log(100)` = 2.0。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数の 10 を底とした対数。 | 
| Decimal | Decimal 「倍精度で」、引数の 10 を底とした対数。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度で」、引数の 10 を底とした対数。String が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## lower(文字列)
<a name="iot-func-lower"></a>

指定した `String` の小文字バージョンを返します。非文字列引数は標準変換ルールを使用して文字列に変換されます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`lower("HELLO")` = "hello"。

`lower(["HELLO"])` = "[\$1"hello\$1"]"。

## lpad(文字列、Int)
<a name="iot-func-lpad"></a>

2 番目の引数で指定された数のスペースを左詰めにした `String` 引数を返します。`Int` 引数は、0 ～ 1000 の間である必要があります。提供された値がこの有効な範囲の外にある場合は、引数は最も近い有効な値に設定されます (0 または 1000)。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`lpad("hello", 2)` = "`  hello`".

`lpad(1, 3)` = "`   1`"


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| String | Int | String、提供された String と同じ数のスペースを左詰めにして提供された Int。 | 
| String | Decimal | Decimal 引数は最も近い Int に切り下げられ、String には指定された数のスペースを左詰めにします。 | 
| String | String | 2 番目の引数は Decimal に変換され、最も近い Int に切り下げられます。また、String には指定された数のスペースが左詰めにされます。2 番目の引数が Int に変換できない場合、結果は Undefined です。 | 
| その他の値 | Int/Decimal/String | 最初の値は、標準変換ルールを使用して String に変換された後、LPAD 関数がその String に適用されます。それが変換できない場合、結果は Undefined です。 | 
| 任意の値 | その他の値 | Undefined. | 

## ltrim(文字列)
<a name="iot-func-ltrim"></a>

提供される `String` から先頭の空白 (タブとスペース) をすべて削除します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`Ltrim(" h i ")` = "hi "。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 先頭の空白がすべて削除された String の Int 表現。 | 
| Decimal | 先頭の空白がすべて削除された String の Decimal 表現。 | 
| Boolean | 先頭の空白がすべて削除されたブール (「true」または「false」) の String 表現。 | 
| String | 先頭の空白がすべて削除された引数。 | 
| 配列 | 先頭の空白がすべて削除された String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | 先頭の空白がすべて削除されたオブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## machinelearning\$1predict (modelId, roleArn, record)
<a name="iot-sql-function-machine-learning"></a>

Amazon SageMaker AI モデルに基づいて、MQTT メッセージからのデータを使用して予測を行うには、`machinelearning_predict` 関数を使用します。SQL バージョン 2015-10-08 以降でサポートされています。`machinelearning_predict` 関数の引数は次のとおりです。

modelId  
予測を実行する対象となるモデルの ID。このモデルのリアルタイムエンドポイントを有効にしておく必要があります。

roleArn  
`machinelearning:Predict` アクセス許可および `machinelearning:GetMLModel` アクセス許可を許可するポリシーが指定され、予測を実行する対象となるモデルへのアクセスを許可する IAM ロール。

record  
SageMaker AI Predict API に渡されるデータ。単一レイヤーの JSON オブジェクトとして表す必要があります。record が複数レベルの JSON オブジェクトの場合は、値のシリアル化によって平坦化されます。たとえば、次の JSON の場合:  

```
{ "key1": {"innerKey1": "value1"}, "key2": 0}
```
 次のようになります。  

```
{ "key1": "{\"innerKey1\": \"value1\"}", "key2": 0}
```

この関数では、次のフィールドを持つ JSON オブジェクトが返されます。

predictedLabel  
モデルに基づく入力の区分。

details  
次の属性が含まれています。    
PredictiveModelType  
モデルのタイプ。有効な値は、REGRESSION、BINARY、MULTICLASS です。  
Algorithm  
予測を行うために SageMaker AI で使用されるアルゴリズム。この値は SGD にする必要があります。

predictedScores  
各ラベルに対応する、未加工の分類スコアを格納します。

predictedValue  
SageMaker AI によって予測された値。

## mod(10 進数、10 進数)
<a name="iot-func-mod"></a>

最初の引数を 2 番目の引数で割ったときの剰余を返します。[remainder(Decimal, Decimal)](#iot-func-remainder) と同等です。同じモジュロ機能に挿入演算子として「%」も使用できます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `mod(8, 3)` = 2。


****  

| 左のオペランド | 右のオペランド | 出力 | 
| --- | --- | --- | 
| Int | Int | Int、最初の引数を 2 番目の引数で割ったときの剰余。 | 
| Int/Decimal | Int/Decimal | Decimal、最初の引数を 2 番目のオペランドで割ったときの剰余。 | 
| String/Int/Decimal | String/Int/Decimal | すべての文字列を小数に変換した場合、結果は、最初の引数を 2 番目の引数で割ったときの剰余です。そうでない場合は、Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## nanvl(AnyValue, AnyValue)
<a name="iot-func-nanvl"></a>

最初の引数が有効な `Decimal` ならば、最初の引数が返されます。それ以外の場合、2 番目の引数が返されます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `Nanvl(8, 3)` = 8。


****  

| 引数の型 1 | 引数の型 2 | 出力 | 
| --- | --- | --- | 
| 未定義 | 任意の値 | 2 番目の引数。 | 
| Null | 任意の値 | 2 番目の引数。 | 
| Decimal (NaN) | 任意の値 | 2 番目の引数。 | 
| Decimal (not NaN) | 任意の値 | 最初の引数。 | 
| その他の値 | 任意の値 | 最初の引数。 | 

## newuuid()
<a name="iot-sql-function-newuuid"></a>

16 バイトのランダムな UUID を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `newuuid()` = `123a4567-b89c-12d3-e456-789012345000`

## numbytes(文字列)
<a name="iot-sql-function-numbytes"></a>

指定された文字列の UTF-8 エンコードのバイト数を返します。標準変換ルールは、非 `String` 引数に適用されます。SQL バージョン 2016-03-23 以降でサポートされています。

例:

`numbytes("hi")` = 2

`numbytes("€") ` = 3

## parse\$1time(String, Long[, String])
<a name="iot-sql-function-parse-time"></a>

`parse_time` 機能を使用して、タイムスタンプを人間が判読可能な日付/時刻形式にフォーマットします。SQL バージョン 2016-03-23 以降でサポートされています。タイムスタンプ文字列をミリ秒に変換するには、「[time\$1to\$1epoch(String, String)](#iot-sql-function-time-to-epoch)」を参照してください。

`parse_time` 関数は次の引数を想定します。

pattern  
(文字列) [Joda-Time フォーマット](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html)に従う日付/時刻パターン。

timestamp  
(ロング) Unix エポックからミリ秒単位でフォーマットされる時間。関数「[timestamp()](#iot-function-timestamp)」を参照してください。

timezone  
(文字列) フォーマットされた日付/時刻のタイムゾーン。デフォルトは「UTC」です。この関数は、「[Joda-Time のタイムゾーン](http://joda-time.sourceforge.net/timezones.html)」をサポートしています。この引数はオプションです。

例:

このメッセージがトピック「A/B」に公開されると、ペイロード `{"ts": "1970.01.01 AD at 21:46:40 CST"}` が S3 バケットに送信されます。

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", 100000000, 'America/Belize' ) as ts FROM 'A/B'",

        "ruleDisabled": false,
        "awsIotSqlVersion": "2016-03-23",
        "actions": [
            {
                "s3": {
                    "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                    "bucketName": "BUCKET_NAME",
                    "key": "KEY_NAME"
                }
            }
        ],
        "ruleName": "RULE_NAME"
    }
}
```

このメッセージがトピック「A/B」に公開されると、`{"ts": "2017.06.09 AD at 17:19:46 UTC"}` (ただし、現在の日付/時刻) と同様のペイロードが S3 バケットに送信されます。

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", timestamp() ) as ts FROM 'A/B'",
        "awsIotSqlVersion": "2016-03-23",
        "ruleDisabled": false,
        "actions": [
            {
                "s3": {
                    "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                    "bucketName": "BUCKET_NAME",
                    "key": "KEY_NAME"
                }
            }
        ],
        "ruleName": "RULE_NAME"
    }
}
```

`parse_time()` は、置換テンプレートとしても使用できます。たとえば、このメッセージがトピック「A/B」に公開されると、ペイロードは S3 バケットに key = 「2017」で送信されます。

```
{
    "ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
    "topicRulePayload": {
        "sql": "SELECT * FROM 'A/B'",
        "awsIotSqlVersion": "2016-03-23",
        "ruleDisabled": false,
        "actions": [{
            "s3": {
                "roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
                "bucketName": "BUCKET_NAME",
                "key": "${parse_time('yyyy', timestamp(), 'UTC')}"
            }
        }],
        "ruleName": "RULE_NAME"
    }
}
```

## power(10 進数、10 進数)
<a name="iot-func-power"></a>

最初の引数を 2 番目の引数の累乗にして返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。SQL バージョン 2015-10-08 以降でサポートされています。

例: `power(2, 5)` = 32.0。


****  

| 引数の型 1 | 引数の型 2 | 出力 | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Decimal「倍精度で」、最初の引数を 2 番目の引数の累乗にします。 | 
| Int/Decimal/String | Int/Decimal/String | Decimal(倍精度で)、最初の引数を 2 番目の引数の累乗にします。すべての文字列は小数に変換されます。いずれかの String が Decimal への変換に失敗したら、結果は Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## principal()
<a name="iot-sql-function-principal"></a>

トリガーメッセージの発行方法に基づいて、デバイスが認証に使用するプリンシパルを返します。次の表は、発行方法とプロトコルごとに返されるプリンシパルについて説明しています。


****  

| メッセージの発行方法 | プロトコル | 認証情報のタイプ | プリンシパル | 
| --- | --- | --- | --- | 
| MQTT クライアント | MQTT | X.509 デバイス証明書 | X.509 証明書のサムプリント | 
| AWS IoT コンソール MQTT クライアント | MQTT | IAM ユーザーまたはロール | iam-role-id:session-name | 
| AWS CLI | HTTP | IAM ユーザーまたはロール | userid | 
| AWS IoT デバイス SDK | MQTT | X.509 デバイス証明書 | X.509 証明書のサムプリント | 
| AWS IoT デバイス SDK | MQTT over WebSocket | IAM ユーザーまたはロール | userid | 

次の例は、`principal()` が返すことができるさまざまなタイプの値を示しています。
+ X.509 証明書のサムプリント: `ba67293af50bf2506f5f93469686da660c7c844e7b3950bfb16813e0d31e9373`
+ IAM ロール ID とセッション名: `ABCD1EFG3HIJK2LMNOP5:my-session-name`
+ ユーザー ID: `ABCD1EFG3HIJK2LMNOP5` を返します

## rand()
<a name="iot-sql-function-rand"></a>

0.0 から 1.0 までの間で疑似ランダムで、均等に分散された倍を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`rand()` = 0.8231909191640703

## regexp\$1matches(文字列、文字列)
<a name="iot-func-regex-matches"></a>

文字列 (最初の引数) に、正規表現 (2 番目の引数) の一致が含まれている場合は、true を返します。正規表現で `|` を使用する場合は、`()` で使用します。

例:

`regexp_matches("aaaa", "a{2,}") ` = true。

`regexp_matches("aaaa", "b")` = false。

`regexp_matches("aaa", "(aaa|bbb)") ` = true。

`regexp_matches("bbb", "(aaa|bbb)") ` = true。

`regexp_matches("ccc", "(aaa|bbb)") ` = false。


**最初の引数:**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | String の Int 表現。 | 
| Decimal | String の Decimal 表現。 | 
| Boolean | ブール (「true」または「false」) の String 表現。 | 
| String | 。String | 
| 配列 | String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

*2 番目の引数:*

有効な正規表現の式である必要があります。非文字列型は標準変換ルールを使用して `String` に変換されます。型により、結果として生じる文字列が有効な正規表現でない場合もあります。(変換された) 引数が有効な正規表現でない場合、結果は `Undefined` です。

## regexp\$1replace(文字列、文字列、文字列)
<a name="iot-func-regex-replace"></a>

最初の引数にある 2 番目の引数 (正規表現) の出現すべてを 3 番目の引数で置き換えます。「\$1」でキャプチャグループを参照します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`regexp_replace("abcd", "bc", "x")` = "axd"。

`regexp_replace("abcd", "b(.*)d", "$1")` = "ac"。


**最初の引数:**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | String の Int 表現。 | 
| Decimal | String の Decimal 表現。 | 
| Boolean | ブール (「true」または「false」) の String 表現。 | 
| String | ソース値。 | 
| 配列 | String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

*2 番目の引数:*

有効な正規表現の式である必要があります。非文字列型は標準変換ルールを使用して `String` に変換されます。型により、結果として生じる文字列が有効な正規表現でない場合もあります。(変換された) 引数が有効な正規表現でない場合、結果は `Undefined` です。

*3 番目の引数:*

有効な正規表現の置換文字列である必要があります。(キャプチャグループを参照できます。) 非文字列型は標準変換ルールを使用して `String` に変換されます。(変換された) 引数が有効な正規表現の置換文字列でない場合、結果は `Undefined` です。

## regexp\$1substr(文字列、文字列)
<a name="iot-func-regex-substr"></a>

最初のパラメータにある 2 番目のパラメータ (正規表現) の最初の一致を見つけます。「\$1」でキャプチャグループを参照します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`regexp_substr("hihihello", "hi")` = "hi"

`regexp_substr("hihihello", "(hi)*")` = "hihi"


**最初の引数:**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | String の Int 表現。 | 
| Decimal | String の Decimal 表現。 | 
| Boolean | ブール (「true」または「false」) の String 表現。 | 
| String | String引数。 | 
| 配列 | String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

*2 番目の引数:*

有効な正規表現の式である必要があります。非文字列型は標準変換ルールを使用して `String` に変換されます。型により、結果として生じる文字列が有効な正規表現でない場合もあります。(変換された) 引数が有効な正規表現でない場合、結果は `Undefined` です。

## remainder(Decimal, Decimal)
<a name="iot-func-remainder"></a>

最初の引数を 2 番目の引数で割ったときの剰余を返します。[mod(10 進数、10 進数)](#iot-func-mod) と同等です。同じモジュロ機能に挿入演算子として「%」も使用できます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `remainder(8, 3)` = 2。


****  

| 左のオペランド | 右のオペランド | 出力 | 
| --- | --- | --- | 
| Int | Int | Int、最初の引数を 2 番目の引数で割ったときの剰余。 | 
| Int/Decimal | Int/Decimal | Decimal、最初の引数を 2 番目のオペランドで割ったときの剰余。 | 
| String/Int/Decimal | String/Int/Decimal | すべての文字列を小数に変換した場合、結果は、最初の引数を 2 番目の引数で割ったときの剰余です。そうでない場合は、Undefined です。 | 
| その他の値 | その他の値 | Undefined. | 

## replace(String, String, String)
<a name="iot-func-replace"></a>

最初の引数にある 2 番目の引数の出現すべてを 3 番目の引数で置き換えます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`replace("abcd", "bc", "x")` = `"axd"`.

`replace("abcdabcd", "b", "x")` = `"axcdaxcd"`.


**すべての引数**  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | String の Int 表現。 | 
| Decimal | String の Decimal 表現。 | 
| Boolean | ブール (「true」または「false」) の String 表現。 | 
| String | ソース値。 | 
| 配列 | String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## rpad(文字列、Int)
<a name="iot-func-rpad"></a>

2 番目の引数で指定された数のスペースを右詰めにした文字列の引数を返します。`Int` 引数は、0 ～ 1000 の間である必要があります。提供された値がこの有効な範囲の外にある場合は、引数は最も近い有効な値に設定されます (0 または 1000)。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`rpad("hello", 2)` = "`hello  `".

`rpad(1, 3)` = "`1   `".


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| String | Int | String は、提供された Int と同じ数のスペースを右詰めにされています。 | 
| String | Decimal | Decimal 引数は最も近い Int に切り下げられ、文字列は、提供された Int と同じ数のスペースを右詰めにされています。 | 
| String | String | 2 番目の引数は Decimal に変換され、最も近い Int に切り下げられます。String は、Int 値と同じ数のスペースを右詰めにされています。 | 
| その他の値 | Int/Decimal/String | 最初の値は、標準変換ルールを使用して String に変換された後、rpad 関数がその String に適用されます。それが変換できない場合、結果は Undefined です。 | 
| 任意の値 | その他の値 | Undefined. | 

## round(10 進数)
<a name="iot-func-round"></a>

指定の `Decimal` を最も近い `Int` に丸めます。`Decimal` が 2 つの `Int` 値と等距離である場合 (例: 0.5)、`Decimal` は丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `Round(1.2)` = 1。

`Round(1.5)` = 2.

`Round(1.7)` = 2.

`Round(-1.1)` = -1.

`Round(-1.5)` = -2.


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 引数。 | 
| Decimal | Decimal は、最も近い Int に切り下げられます。 | 
| String | Decimal は、最も近い Int に切り下げられます。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| その他の値 | Undefined. | 

## rtrim(文字列)
<a name="iot-func-rtrim"></a>

提供される `String` から末尾の空白 (タブとスペース) をすべて削除します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`rtrim(" h i ")` = " h i"


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | String の Int 表現。 | 
| Decimal | String の Decimal 表現。 | 
| Boolean | ブール (「true」または「false」) の String 表現。 | 
| 配列 | String の Array 表現 (標準変換ルールを使用)。 | 
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 | 
| Null | Undefined. | 
| 未定義 | Undefined | 

## sign(10 進数)
<a name="iot-func-sign"></a>

指定された数値の符号を返します。引数の符号が正の場合、1 を返します。引数の符号が負の場合、-1 を返します。引数が 0 の場合、0 を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`sign(-7)` = -1.

`sign(0)` = 0.

`sign(13)` = 1.


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Int、Int の値の符号。 | 
| Decimal | Int、Decimal の値の符号。 | 
| String | Int、Decimal の値の符号。文字列は Decimal の値に変換され、Decimal の値の符号が返されます。String が Decimal に変換できない場合、結果は Undefined です。SQL バージョン 2015-10-08 以降でサポートされています。 | 
| その他の値 | Undefined. | 

## sin(10 進数)
<a name="iot-func-sin"></a>

数値のサインをラジアンで返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `sin(0)` = 0.0


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数のサイン。 | 
| Decimal | Decimal (倍精度で)、引数のサイン。 | 
| Boolean | Undefined. | 
| String | Decimal (倍精度で)、引数のサイン。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

## sinh(10 進数)
<a name="iot-func-sinh"></a>

数値のハイパーボリックサインを返します。`Decimal` 値は関数適用の前に倍精度に丸められます。結果は倍精度の `Decimal` 値です。SQL バージョン 2015-10-08 以降でサポートされています。

例: `sinh(2.3)` = 4.936961805545957


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal (倍精度で)、引数のハイパーボリックサイン。 | 
| Decimal | Decimal (倍精度で)、引数のハイパーボリックサイン。 | 
| Boolean | Undefined. | 
| String | Decimal (倍精度で)、引数のハイパーボリックサイン。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## sourceip()
<a name="iot-function-sourceip"></a>

デバイスまたはそれに接続するルーターの IP アドレスを取得します。デバイスがインターネットに直接接続されている場合、この関数はデバイスの送信元 IP アドレスを返します。デバイスがインターネットに接続するルーターに接続されている場合、関数はルーターの送信元 IP アドレスを返します。SQL バージョン 2016-03-23 でサポートされています。`sourceip()` はパラメータを取得しません。

**重要**  
デバイスの公開送信元 IP アドレスは、多くの場合、インターネットサービスプロバイダーのルーターやケーブルモデムなどの最新のネットワークアドレス変換 (NAT) ゲートウェイの IP アドレスです。

例: 

`sourceip()="192.158.1.38"`

`sourceip()="1.102.103.104"`

`sourceip()="2001:db8:ff00::12ab:34cd"`

SQL 例:

`SELECT *, sourceip() as deviceIp FROM 'some/topic'`

 AWS IoT Core ルールアクションで sourceip() 関数を使用する方法の例:

**例 1**

次の例は、[DynamoDB アクション](https://docs.aws.amazon.com//iot/latest/developerguide/dynamodb-rule-action.html)で () 関数を[代替テンプレート](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html)として呼び出す方法を示しています。

```
{
	"topicRulePayload": {
		"sql": "SELECT * AS message FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"dynamoDB": {
					"tableName": "my_ddb_table",
					"hashKeyField": "key",
					"hashKeyValue": "${sourceip()}",
					"rangeKeyField": "timestamp",
					"rangeKeyValue": "${timestamp()}",
					"roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB"
				}
			}
		]
	}
}
```

**例 2**

次の例は、[代替テンプレート](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html)を使用して sourceip () 関数を MQTT ユーザープロパティとして追加する方法を示しています。

```
{
	"topicRulePayload": {
		"sql": "SELECT * FROM 'some/topic'",
		"ruleDisabled": false,
		"awsIotSqlVersion": "2016-03-23",
		"actions": [
			{
				"republish": {
					"topic": "${topic()}/republish",
					"roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish",
					"headers": {
						"payloadFormatIndicator": "UTF8_DATA",
						"contentType": "rule/contentType",
						"correlationData": "cnVsZSBjb3JyZWxhdGlvbiBkYXRh",
						"userProperties": [
							{
								"key": "ruleKey1",
								"value": "ruleValue1"
							},
							{
								"key": "sourceip",
								"value": "${sourceip()}"
							}
						]
					}
				}
			}
		]
	}
}
```

メッセージブローカーと[基本的な取り込み](https://docs.aws.amazon.com//iot/latest/developerguide/iot-basic-ingest.html)パスの両方から AWS IoT Core ルールに渡すメッセージからソース IP アドレスを取得できます。IPv4 と IPv6 の両方のメッセージの両方の送信元 IP アドレスを使用できます。送信元 IP は次のように表示されます。

IPv6: `yyyy:yyyy:yyyy::yyyy:yyyy`

IPv4:`xxx.xxx.xxx.xxx`

**注記**  
元の送信元 IP は [Republish アクション](republish-rule-action.md)には渡されません。

## substring(String, Int[, Int])
<a name="iot-func-substring"></a>

1 つか 2 つの `String` 値が続く `Int` を予想します。`String` および単一の `Int` 引数では、この関数は提供された `String` インデックス (ゼロベース、包括) から `Int` の端までの提供された `String` のサブストリングを返します。`String` および 2 つの `Int` 引数では、この関数は、最初の `String` インデックス引数 (ゼロベース、包括) から 2 番目の `Int` インデックス引数 (ゼロベース、除外) までの提供された `Int` のサブストリングを返します。ゼロ以下のインデックスはゼロに設定されます。`String` の長さを超過するインデックスは `String` の長さに設定されます。3 つの引数バージョンでは、最初のインデックスが 2 番目インデックスより大きい (または等しい) 場合、結果は空の `String` です。

 提供された引数が (*String*, *Int*)、または (*String*, *Int*, *Int*) でない場合、引数に標準変換が適用され、正しい型への変換が試行されます。型が変換できない場合、関数の結果は `Undefined` です。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`substring("012345", 0)` = "012345"。

`substring("012345", 2)` = "2345"。

`substring("012345", 2.745)` = "2345"。

`substring(123, 2)` = "3"。

`substring("012345", -1)` = "012345"。

`substring(true, 1.2)` = "rue"。

`substring(false, -2.411E247)` = "false"。

`substring("012345", 1, 3)` = "12"。

`substring("012345", -50, 50)` = "012345"。

`substring("012345", 3, 1)` = "".

## sql\$1version()
<a name="iot-sql-function-sql-version"></a>

このルールで指定されている SQL バージョンを返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`sql_version()` = "2016-03-23"

## sqrt(10 進数)
<a name="iot-func-sqrt"></a>

数値の平方根を返します。`Decimal` 引数は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `sqrt(9)` = 3.0。


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | 引数の平方根。 | 
| Decimal | 引数の平方根。 | 
| Boolean | Undefined. | 
| String | 引数の平方根。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## startswith(文字列、文字列)
<a name="iot-func-startswith"></a>

最初の文字列引数が 2 番目の文字列引数で始まるかどうか、`Boolean` を返します。どちらかの引数が `Null` または `Undefined` の場合、結果は `Undefined` です。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`startswith("ranger","ran")` = true


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| String | String | 最初の文字列が 2 番目の文字列で始まるかどうか。 | 
| その他の値 | その他の値 | 両方の引数は標準変換ルールを使用して文字列に変換されます。最初の文字列が 2 番目の文字列で始まる場合は true を返します。どちらかの引数が Null または Undefined の場合、結果は Undefined です。 | 

## tan(10 進数)
<a name="iot-func-tan"></a>

数値のタンジェントをラジアンで返します。`Decimal` 値は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `tan(3)` = -0.1425465430742778


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数のタンジェント。 | 
| Decimal | Decimal 「倍精度で」、引数のタンジェント。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度で」、引数のタンジェント。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## tanh(10 進数)
<a name="iot-func-tanh"></a>

数値のハイパーボリックタンジェントをラジアンで返します。`Decimal` 値は関数適用の前に倍精度に丸められます。SQL バージョン 2015-10-08 以降でサポートされています。

例: `tanh(2.3)` = 0.9800963962661914


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | Decimal 「倍精度で」、引数の双曲線タンジェント。 | 
| Decimal | Decimal 「倍精度で」、引数の双曲線タンジェント。 | 
| Boolean | Undefined. | 
| String | Decimal 「倍精度で」、引数の双曲線タンジェント。文字列が Decimal に変換できない場合、結果は Undefined です。 | 
| 配列 | Undefined. | 
| オブジェクト | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## time\$1to\$1epoch(String, String)
<a name="iot-sql-function-time-to-epoch"></a>

`time_to_epoch` 関数を使用して、タイムスタンプ文字列を Unix エポック時間のミリ秒数に変換します。SQL バージョン 2016-03-23 以降でサポートされています。ミリ秒をフォーマットされたタイムスタンプ文字列に変換するには、「[parse\$1time(String, Long[, String])](#iot-sql-function-parse-time)」を参照してください。

`time_to_epoch` 関数は次の引数を想定します。

timestamp  
(文字列) Unix エポックからミリ秒に変換されるタイムスタンプ文字列。タイムスタンプ文字列がタイムゾーンを指定しない場合、関数は UTC タイムゾーンを使用します。

pattern  
(文字列) [JDK11 Time フォーマット](http://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html)に従う日付/時刻パターン。

例:

`time_to_epoch("2020-04-03 09:45:18 UTC+01:00", "yyyy-MM-dd HH:mm:ss VV")` = 1585903518000

`time_to_epoch("18 December 2015", "dd MMMM yyyy")` = 1450396800000

`time_to_epoch("2007-12-03 10:15:30.592 America/Los_Angeles", "yyyy-MM-dd HH:mm:ss.SSS z")` = 1196705730592

## timestamp()
<a name="iot-function-timestamp"></a>

 AWS IoT ルールエンジンによって観測された 1970 年 1 月 1 日木曜日の協定世界時 (UTC) からの現在のタイムスタンプをミリ秒単位で返します。SQL バージョン 2015-10-08 以降でサポートされています。

例: `timestamp()` = `1481825251155`

## topic(10 進数)
<a name="iot-function-topic"></a>

ルールをトリガーしたメッセージが送信されたトピックを返します。パラメータが指定されていない場合、トピック全体が返されます。`Decimal` パラメータは、特定のトピックセグメントを指定するために使用され、1 は最初のセグメントを表します。`foo/bar/baz` トピックでは、topic(1) は `foo` を返し、topic(2) は `bar` を返す、と続いていきます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`topic()` = "things/myThings/thingOne"

`topic(1)` = "things"

[基本的な取り込み](iot-basic-ingest.md)が使用されている場合、トピック (`$aws/rules/rule-name`) の最初のプレフィックスは topic() 関数では使用できません。たとえば、次のトピックがあるとします。

`$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights`

`topic()` = "Buildings/Building5/Floor2/Room201/Lights"

`topic(3)` = "Floor2"

## traceid()
<a name="iot-sql-function-traceid"></a>

MQTT メッセージのトレース ID (UUID) を返すか、または、メッセージが MQTT 経由で送信されなかった場合は `Undefined` を返します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`traceid() ` = "12345678-1234-1234-1234-123456789012"

## transform(String, Object, Array)
<a name="iot-func-transform"></a>

`Array` パラメータの `Object` パラメータの指定された変換の結果を含むオブジェクトの配列を返します。

SQL バージョン 2016-03-23 以降でサポートされています。

文字列  
使用する変換モード。サポートされている変換モードと、`Object` および `Array` パラメータから `Result` を作成する方法については、次の表を参照してください。

オブジェクト  
`Array` の各要素に適用する属性を含むオブジェクト。

配列  
`Object` の属性が適用されるオブジェクトの配列。  
この配列内の各オブジェクトは、関数の応答内のオブジェクトに対応します。関数の応答の各オブジェクトには、元のオブジェクトに存在する属性と、`String` で指定された変換モードによって決定される `Object` によって提供される属性が含まれます。


| `String` パラメータ | `Object` パラメータ | `Array` パラメータ | 結果 | 
| --- | --- | --- | --- | 
| `enrichArray` | オブジェクト | オブジェクトの配列 | 各オブジェクトに `Array` パラメータの要素の属性と `Object` パラメータの属性が含まれるオブジェクトの配列。 | 
| その他の値 | 任意の値 | 任意の値 | 未定義 | 

**注記**  
この関数によって返される配列は 128 KiB に制限されています。

### 変換関数の例 1
<a name="iot-func-transform-example1"></a>

この例では、**transform()** 関数がデータオブジェクトと配列からオブジェクトの単一の配列を生成する方法を示します。

この例では、次のメッセージが MQTT トピック `A/B` に発行されます。

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

トピックルールアクションのこの SQL ステートメントでは、`String` 値が `enrichArray` である **transform()** 関数を使用します。この例では、`Object` はメッセージペイロードの `attributes` プロパティで、`Array` は 3 つのオブジェクトを含む `values` 配列です。

```
select value transform("enrichArray", attributes, values) from 'A/B'
```

メッセージペイロードを受信すると、SQL ステートメントは次の応答と評価されます。

```
[
  {
    "a": 3,
    "data1": 1,
    "data2": 2
  },
  {
    "b": 4,
    "data1": 1,
    "data2": 2
  },
  {
    "c": 5,
    "data1": 1,
    "data2": 2
  }
]
```

### 変換関数の例 2
<a name="iot-func-transform-example2"></a>

この例では、**transform()** 関数がリテラル値を使用して、メッセージペイロードの個々の属性を含めて、名前を変更する方法を示します。

この例では、次のメッセージが MQTT トピック `A/B` に発行されます。これは [変換関数の例 1](#iot-func-transform-example1) で使用されたメッセージと同じものです。

```
{
    "attributes": {
        "data1": 1,
        "data2": 2
    },
    "values": [
        {
            "a": 3
        },
        {
            "b": 4
        },
        {
            "c": 5
        }
    ]
}
```

トピックルールアクションのこの SQL ステートメントでは、`String` 値が `enrichArray` である **transform()** 関数を使用します。**transform()** 関数の `Object` にはメッセージペイロードの値が `attributes.data1` である `key` という単一属性が含まれており、`Array` は、前述の例で使用されたものと同じ 3 つのオブジェクトを含む `values` 配列です。

```
select value transform("enrichArray", {"key": attributes.data1}, values) from 'A/B'
```

メッセージペイロードを受信すると、SQL ステートメントは次の応答と評価されます。応答で `data1` プロパティの名前が `key` になっていることに注意してください。

```
[
  {
    "a": 3,
    "key": 1
  },
  {
    "b": 4,
    "key": 1
  },
  {
    "c": 5,
    "key": 1
  }
]
```

### 変換関数の例 3
<a name="iot-func-transform-example3"></a>

この例では、ネストされた SELECT 句で **transform()** 関数を使用して、複数の属性を選択し、後続の処理のために新しいオブジェクトを作成する方法を示します。

この例では、次のメッセージが MQTT トピック `A/B` に発行されます。

```
{
  "data1": "example",
  "data2": {
    "a": "first attribute",
    "b": "second attribute",
    "c": [
      {
        "x": {
          "someInt": 5,
          "someString": "hello"
        },
        "y": true
      },
      {
        "x": {
          "someInt": 10,
          "someString": "world"
        },
        "y": false
      }
    ]
  }
}
```

この変換関数の `Object` は、メッセージの `data2` オブジェクトの `a` 要素と `b` 要素を含む SELECT ステートメントによって返されるオブジェクトです。`Array` パラメータは、元のメッセージの `data2.c` 配列の 2 つのオブジェクトで構成されます。

```
select value transform('enrichArray', (select a, b from data2), (select value c from data2)) from 'A/B'
```

前述のメッセージにより、SQL ステートメントは次の応答に評価されます。

```
[
  {
    "x": {
      "someInt": 5,
      "someString": "hello"
    },
    "y": true,
    "a": "first attribute",
    "b": "second attribute"
  },
  {
    "x": {
      "someInt": 10,
      "someString": "world"
    },
    "y": false,
    "a": "first attribute",
    "b": "second attribute"
  }
]
```

 この応答で返される配列は、`batchMode` をサポートするトピックルールアクションで使用できます。

## trim(文字列)
<a name="iot-func-trim"></a>

提供された `String` から、すべての先頭および末尾の空白を削除します。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`Trim(" hi ") ` = "hi"


****  

| 引数の型 | 結果 | 
| --- | --- | 
| Int | すべての先頭および末尾の空白が削除された String の Int 表現。 | 
| Decimal | すべての先頭および末尾の空白が削除された String の Decimal 表現。 | 
| Boolean | すべての先頭および末尾の空白が削除された String (「true」または「false」) の Boolean 表現。 | 
| String | すべての先頭および末尾の空白が削除された String。 | 
| 配列 | 標準変換ルールを使用した String の Array 表現。 | 
| オブジェクト | 標準変換ルールを使用したオブジェクトの String 表現。 | 
| Null | Undefined. | 
| 未定義 | Undefined. | 

## trunc(10 進数、Int)
<a name="iot-func-trunc"></a>

2 番目の引数で指定された `Decimal` の場所の数で最初の引数を切り捨てます。2 番目の引数がゼロよりより少ない場合は、ゼロに設定されます。2 番目の引数が 34 より大きい場合は、34 に設定されます。末尾のゼロは結果から省かれます。SQL バージョン 2015-10-08 以降でサポートされています。

例: 

`trunc(2.3, 0)` = 2.

`trunc(2.3123, 2)` = 2.31.

`trunc(2.888, 2)` = 2.88.

`trunc(2.00, 5)` = 2.


****  

| 引数の型 1 | 引数の型 2 | 結果 | 
| --- | --- | --- | 
| Int | Int | ソース値。 | 
| Int/Decimal | Int/Decimal | 最初の引数は 2 番目の引数で説明された長さに切り捨てられます。2 番目の引数は、Int でなければ、最も近い Int に切り下げられます。 | 
| Int/Decimal/String | Int/Decimal | 最初の引数は 2 番目の引数で説明された長さに切り捨てられます。2 番目の引数は、Int でなければ、最も近い Int に切り下げられます。String は Decimal 値に変換されます。文字列変換が失敗した場合、結果は Undefined です。 | 
| その他の値 |  | Undefined. | 

## upper(文字列)
<a name="iot-sql-function-upper"></a>

指定した `String` の大文字バージョンを返します。非 `String` 引数は標準変換のルールを使用して `String` に変換されます。SQL バージョン 2015-10-08 以降でサポートされています。

例:

`upper("hello")` = "HELLO"

`upper(["hello"])` = "[\$1"HELLO\$1"]"