関数 - AWS IoT Core
abs(10 進数)accountid()acos(10 進数)asin(10 進数)atan(10 進数)atan2(10 進数、10 進数)aws_lambda(functionArn, inputJson)bitand(Int、Int)bitor(Int、Int)bitxor(Int、Int)bitnot(Int)cast()ceil(10 進数)chr(文字列)clientid()concat()cos(10 進数)cosh(10 進数)decode(value, decodingScheme)encode(value, encodingScheme)endswith(文字列、文字列)exp(10 進数)floor(Decimal)getget_dynamodb(tableName 、 partitionKeyName partitionKeyValue、 sortKeyName、 sortKeyValue、roleArn )get_mqtt_property(name)get_secret(secretId, secretType, key, roleArn)get_thing_shadow(thingName, shadowName, roleARN)get_user_properties(userPropertyKey)ハッシュ関数indexof(文字列、文字列)isNull()isUndefined()length(文字列)ln(10 進数)log(10 進数)lower(文字列)lpad(文字列、Int)ltrim(文字列)machinelearning_predict (modelId, roleArn, record)mod(10 進数、10 進数)nanvl(AnyValue, AnyValue)newuuid()numbytes(文字列)parse_time(String, Long[, String])power(10 進数、10 進数)principal()rand()regexp_matches(文字列、文字列)regexp_replace(文字列、文字列、文字列)regexp_substr(文字列、文字列)remainder(Decimal, Decimal)replace(String, String, String)rpad(文字列、Int)round(10 進数)rtrim(文字列)sign(10 進数)sin(10 進数)sinh(10 進数)sourceip()substring(String, Int[, Int])sql_version()sqrt(10 進数)startswith(文字列、文字列)tan(10 進数)tanh(10 進数)time_to_epoch(String, String)timestamp()topic(10 進数)traceid()transform(String, Object, Array)trim(文字列)trunc(10 進数、Int)upper(文字列)

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

関数

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

abs(10 進数)

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

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

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

accountid()

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

例:

accountid() = "123456789012"

acos(10 進数)

数値の逆コサインをラジアンで返します。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 進数)

数値の逆サインをラジアンで返します。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 進数)

数値の逆タンジェントをラジアンで返します。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 進数)

正の 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_lambda(functionArn, inputJson)

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](ラムダのアクセス許可モデル)を参照してください。

次のような 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 メッセージペイロードを渡したい場合は、次の例のように、「*」を使用して 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)

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)

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)

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)

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

例: bitnot(13) = 2

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

cast()

値を 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 は、正規表現 (^-?\d+(\.\d+)?((?i)E-?\d+)?$) と一致する文字列を解析するよう試みます。「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 は、正規表現 (^-?\d+(\.\d+)?((?i)E-?\d+)?$) と一致する文字列を解析するよう試みます。「0」「-1.2」「5E-12」はすべて自動的に小数に変換される文字列の例です。 AWS IoT は文字列を Decimal に変換するよう試み、最も近い Int へ切り下げます。
配列 Undefined.
オブジェクト Undefined.
Null Undefined.
未定義 Undefined.
Boolean へのキャスト
引数の型 結果
Int 0 = False, any_nonzero_value = True。
Decimal 0 = False, any_nonzero_value = True。
Boolean ソース値。
String "true" = True および "false" = False (大文字小文字の区別なし)。その他の文字列値 = Undefined
配列 Undefined.
オブジェクト Undefined.
Null Undefined.
未定義 Undefined.
String へのキャスト
引数の型 結果
Int Int の文字列表現、標準表記。
Decimal おそらく科学的表記での Decimal 値の文字列表現。
Boolean 「true」または「false」、すべて小文字。
String "true"=True および "false"=False (大文字小文字の区別なし)。その他の文字列値 = Undefined
配列 JSON へシリアル化された配列。結果の文字列は角括弧で囲まれたカンマ区切りのリストです。String は引用符で囲まれます。DecimalIntBoolean は囲まれません。
オブジェクト JSON にシリアル化されたオブジェクト。JSON 文字列はキーと値のペアのカンマ区切りのリストで、最初と最後に中括弧があります。String は引用符で囲まれます。DecimalIntBooleanNull は囲まれません。
Null Undefined.
未定義 Undefined.

ceil(10 進数)

指定の 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(文字列)

指定の 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 StringDecimal に変換できる場合、最も近い Int に切り下げられます。引数が有効な ASCII 値でない場合、結果は Undefined です。
配列 Undefined.
オブジェクト Undefined.
Null Undefined.
その他の値 Undefined.

clientid()

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

例:

clientid() = "123456789012"

concat()

配列または文字列を連結します。この関数は、任意の数の引数を受け取り、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+

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

cos(10 進数)

数値のコサインをラジアンで返します。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 進数)

数値のハイパーボリックコサインをラジアンで返します。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)

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

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

文字列を返す文字列値、または AWS IoT SQL リファレンス で定義されている有効な式のいずれか。

decodingScheme

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

base64 でエンコードされた文字列のデコード

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

{ 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 メッセージペイロードのデコード

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

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

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)

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

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

encodingScheme

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

endswith(文字列、文字列)

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 進数)

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

例: exp(1) = e。

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

floor(Decimal)

指定の 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

コレクションのような型から値を抽出します (配列、文字列、オブジェクト)。最初の引数に変換は適用されません。テーブルで説明されているように、変換は 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_dynamodb(tableName 、 partitionKeyName partitionKeyValue、 sortKeyName、 sortKeyValue、roleArn )

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

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

tableName

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

partitionKeyName

パーティションキーの名前。詳細については、「DynamoDB Keys」を参照してください。

partitionKeyValue

レコードを識別するために使用されるパーティションキーの値。詳細については、「DynamoDB Keys」を参照してください。

sortKeyName

(オプション) ソートキーの名前。このパラメータは、クエリされた DynamoDB テーブルが複合キーを使用する場合にのみ必要です。詳細については、「DynamoDB Keys」を参照してください。

sortKeyValue

(オプション) ソートキーの値。このパラメータは、クエリされた DynamoDB テーブルが複合キーを使用する場合にのみ必要です。詳細については、「DynamoDB Keys」を参照してください。

roleArn

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:GetItem", "Resource": "arn:aws:dynamodb:aws-region:account-id: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_dynamodb() が 8 KB を超えるデータを返す場合、ルールのアクションは呼び出されないことがあります。

get_mqtt_property(name)

次の MQTT5 ヘッダーのいずれかを参照します: contentTypepayLoadFormatIndicatorresponseTopiccorrelationData。この関数は、content_typeformat_indicatorresponse_topiccorrelation_data いうリテラル文字列のいずれかを引数としてとります。詳細については、以下の関数の引数表を参照してください。

contentType

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

payLoadFormatインジケータ

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

responseTopic

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

correlationData

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

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

関数の引数
SQL 返されるデータ型 (存在する場合) 返されるデータ型 (存在しない場合)
get_mqtt_property("format_indicator") 文字列 (UNSPECIFIED_BYTES または UTF8_DATA) 文字列 (UNSPECIFIED_BYTES)
get_mqtt_property("content_type") 文字列 未定義
get_mqtt_property("response_topic") 文字列 未定義
get_mqtt_property("correlation_data") base64 でエンコードされた文字列 未定義
get_mqtt_property("some_invalid_name") 未定義 未定義

以下の SQL ルール例では、contentTypepayLoadFormatIndicatorresponseTopiccorrelationData のいずれかの 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_secret(secretId, secretType, key, roleArn)

AWS Secrets Manager の現在のバージョンのシークレットの暗号化された SecretString または SecretBinary フィールドの値を取得します。シークレットの作成と保守の詳細については、CreateSecret「」、UpdateSecret「」、および「」を参照してくださいPutSecretValue

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

secretId

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

secretType

文字列: シークレットタイプ。有効な値: SecretString | 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」を参照してください。

get_thing_shadow(thingName, shadowName, roleARN)

指定されたモノの指定されたシャドウを返します。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_user_properties(userPropertyKey)

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

userProperty

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

関数の引数

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

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

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

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

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

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

ハッシュ関数

AWS IoT には、次のハッシュ関数が用意されています。

  • md2

  • md5

  • sha1

  • sha224

  • sha256

  • sha384

  • sha512

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

例:

md2("hello") = "a9046c73e00331af68917d3804f70655"

md5("hello") = "5d41402abc4b2a76b9719d911017c592"

indexof(文字列、文字列)

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

例:

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

isNull()

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

例:

isNull(5) = false。

isNull(Null) = true。

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

isUndefined()

引数が 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(文字列)

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

例:

length("hi") = 2

length(false) = 5

ln(10 進数)

引数の自然対数を返します。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 進数)

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

例: log(100) = 2.0。

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

lower(文字列)

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

例:

lower("HELLO") = "hello"。

lower(["HELLO"]) = "[\"hello\"]"。

lpad(文字列、Int)

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(文字列)

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

例:

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

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

machinelearning_predict (modelId, roleArn, record)

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

modelId

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

roleArn

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

record

SageMaker 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 を行うために使用するアルゴリズム。この値は SGD にする必要があります。

predictedScores

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

predictedValue

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

mod(10 進数、10 進数)

最初の引数を 2 番目の引数で割ったときの剰余を返します。remainder(Decimal, Decimal) と同等です。同じモジュロ機能に挿入演算子として「%」も使用できます。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)

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

例: Nanvl(8, 3) = 8。

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

newuuid()

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

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

numbytes(文字列)

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

例:

numbytes("hi") = 2

numbytes("€") = 3

parse_time(String, Long[, String])

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

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

pattern

(文字列) Joda-Time フォーマットに従う日付/時刻パターン。

timestamp

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

timezone

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

例:

このメッセージがトピック「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 進数)

最初の引数を 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 番目の引数の累乗にします。すべての文字列は小数に変換されます。いずれかの StringDecimal への変換に失敗したら、結果は Undefined です。
その他の値 その他の値 Undefined.

principal()

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

メッセージの発行方法 プロトコル 認証情報のタイプ プリンシパル
MQTT クライアント MQTT X.509 デバイス証明書 X.509 証明書のサムプリント
AWS IoT コンソール MQTT クライアント MQTT IAM ユーザーまたはロール iam-role-idsession-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()

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

例:

rand() = 0.8231909191640703

regexp_matches(文字列、文字列)

文字列 (最初の引数) に、正規表現 (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 StringInt 表現。
Decimal StringDecimal 表現。
Boolean ブール (「true」または「false」) の String 表現。
String String
配列 StringArray 表現 (標準変換ルールを使用)。
オブジェクト オブジェクトの String 表現 (標準変換ルールを使用)。
Null Undefined.
未定義 Undefined.

2 番目の引数:

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

regexp_replace(文字列、文字列、文字列)

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

例:

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

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

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

2 番目の引数:

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

3 番目の引数:

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

regexp_substr(文字列、文字列)

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

例:

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

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

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

2 番目の引数:

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

remainder(Decimal, Decimal)

最初の引数を 2 番目の引数で割ったときの剰余を返します。mod(10 進数、10 進数) と同等です。同じモジュロ機能に挿入演算子として「%」も使用できます。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)

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

例:

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

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

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

rpad(文字列、Int)

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 進数)

指定の 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(文字列)

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

例:

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

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

sign(10 進数)

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

例:

sign(-7) = -1.

sign(0) = 0.

sign(13) = 1.

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

sin(10 進数)

数値のサインをラジアンで返します。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 進数)

数値のハイパーボリックサインを返します。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()

デバイスまたはそれに接続するルーターの 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 アクションで () 関数を代替テンプレートとして呼び出す方法を示しています。

{ "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

次の例は、代替テンプレートを使用して 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()}" } ] } } } ] } }

メッセージブローカーと基本的な取り込みパスの両方から AWS IoT Core ルールに渡すメッセージから送信元 IP アドレスを取得できます。IPv4 と IPv6 の両方のメッセージの両方の送信元 IP アドレスを使用できます。送信元 IP は次のように表示されます。

IPv6: yyyy:yyyy:yyyy::yyyy:yyyy

IPv4:xxx.xxx.xxx.xxx

注記

元の送信元 IP は Republish アクションには渡されません。

substring(String, Int[, Int])

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_version()

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

例:

sql_version() = "2016-03-23"

sqrt(10 進数)

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

例: sqrt(9) = 3.0。

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

startswith(文字列、文字列)

最初の文字列引数が 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 進数)

数値のタンジェントをラジアンで返します。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 進数)

数値のハイパーボリックタンジェントをラジアンで返します。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_to_epoch(String, String)

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

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

timestamp

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

pattern

(文字列) JDK11 Time フォーマットに従う日付/時刻パターン。

例:

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()

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

例: timestamp() = 1481825251155

topic(10 進数)

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

例:

topic() = "things/myThings/thingOne"

topic(1) = "things"

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

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

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

topic(3) = "Floor2"

traceid()

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

例:

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

transform(String, Object, Array)

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

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

文字列

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

オブジェクト

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

配列

Object の属性が適用されるオブジェクトの配列。

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

String パラメータ

Object パラメータ

Array パラメータ

結果

enrichArray

オブジェクト

オブジェクトの配列

各オブジェクトに Array パラメータの要素の属性と Object パラメータの属性が含まれるオブジェクトの配列。

その他の値

任意の値

任意の値

未定義

注記

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

変換関数の例 1

この例では、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

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

この例では、次のメッセージが MQTT トピック A/B に発行されます。これは 変換関数の例 1 で使用されたメッセージと同じものです。

{ "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

この例では、ネストされた 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(文字列)

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

例:

Trim(" hi ") = "hi"

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

trunc(10 進数、Int)

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 に切り下げられます。StringDecimal 値に変換されます。文字列変換が失敗した場合、結果は Undefined です。
その他の値 Undefined.

upper(文字列)

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

例:

upper("hello") = "HELLO"

upper(["hello"]) = "[\"HELLO\"]"