翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
関数
SQL 式の SELECT 句または WHERE 句では、以下の組み込み関数を使用できます。
次の外部関数は、ルールアクションの関数と同等に請求されます: aws_lambda、get_dynamodb()、get_registry_data()、および get_thing_shadow()。また、Protobuf メッセージを JSON にデコードしている場合にのみ、decode() 関数に対して課金されます。詳細については、AWS IoT Core 料金表のページ
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 IoTlambda: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」の後に表示される場合があります。
| キーワード | 結果 |
|---|---|
String |
値を String へキャストします。 |
| Nvarchar | 値を String へキャストします。 |
| Text | 値を String へキャストします。 |
| Ntext | 値を String へキャストします。 |
| varchar | 値を String へキャストします。 |
Int |
値を Int へキャストします。 |
| 整数 | 値を Int へキャストします。 |
| Double | 値を (倍精度で) Decimal にキャストします。 |
| キーワード | 結果 |
|---|---|
Decimal |
値を Decimal へキャストします。 |
| Bool | 値を Boolean へキャストします。 |
Boolean |
値を Boolean へキャストします。 |
キャストのルール:
| 引数の型 | 結果 |
|---|---|
Int |
小数点のない Decimal。 |
Decimal |
ソース値。 注記SQL V2 (2016-03-23) では、 |
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 |
ソース値。 |
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. |
| 引数の型 | 結果 |
|---|---|
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. |
| 引数の型 | 結果 |
|---|---|
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 進数)
指定の 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 |
String が Decimal に変換できる場合、最も近い 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+ |
引数が |
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 IoTSQL リファレンス で定義されている有効な式のいずれか。
- 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 メッセージペイロードのデコード」を参照してください。
重要
AWS IoTプリンシパルのアクセス許可を設定するsource‐accountときに source‐arnまたは を省略すると、 は他のAWS IoTルールを通じてデコード関数を呼び出すAWS アカウントことができます。関数を保護するには、「Amazon Simple Storage Service ユーザーガイド」の「バケットポリシー」を参照してください。
この関数の署名は次のようになります。
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.descs3-bucketという名前の Amazon S3 バケットに保存されているFileDescriptorSetファイル。 -
myprotomyproto.protoという名前のFileDescriptorSetファイルを生成するために使用されたオリジナルの.protoファイル。 -
messagetypemyproto.protoで定義されたmessagetypeと呼ばれるメッセージタイプ (インポートされた依存関係を含む)。
encode(value, encodingScheme)
エンコードスキームに基づいて、ペイロード (非 JSON データの場合もある) を文字列表現にエンコードするには、encode 関数を使用します。SQL バージョン 2016-03-23 以降でサポートされています。
- 値
-
AWS IoTSQL リファレンス で定義されている任意の有効な式。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 ^ 引数。String が Decimal に変換できない場合、結果は 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: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_dynamodb()が 8 KB を超えるデータを返す場合、ルールのアクションは呼び出されないことがあります。
get_mqtt_property(name)
次の 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_mqtt_property("format_indicator") |
文字列 (UNSPECIFIED_BYTES または UTF8_DATA) | 文字列 (UNSPECIFIED_BYTES) |
get_mqtt_property("content_type") |
String | 未定義 |
get_mqtt_property("response_topic") |
String | 未定義 |
get_mqtt_property("correlation_data") |
base64 でエンコードされた文字列 | 未定義 |
get_mqtt_property("some_invalid_name") |
未定義 | 未定義 |
以下の 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_or_default(式、defaultValue)
指定された場合は 2 番目のパラメータのデフォルト値を返します。それ以外の場合は、最初のパラメータの式が null、undefined、または fail を返すときに undefined を返します。SQL バージョン 2016-03-23 以降でサポートされています。
重要
get_or_default は、JSON 以外のペイロードをそのまま直接サポートしていません。JSON 以外のペイロードを使用している場合は、 encodeまたは decode関数を使用します。
get_or_default() には以下のパラメータがあります。
次の表は、各引数と関連する出力に許容される関数引数を示しています。
| 最初の引数 | 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_or_default を使用する方法を示しています。これは、明確なデフォルト値がないが、ルールの実行を失敗させたくない場合に便利です。
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_or_default ステートメントは に評価されるためUndefined、この例では SELECT ステートメント全体が に評価{}され、すべてのルールアクションが試行されます。
重要
この機能を使用する際にセキュリティを維持するために、以下のベストプラクティスに従うことをお勧めします。
デフォルト値を含むルール定義でハードコードされたシークレットを使用しない
機密情報の管理AWS Secrets Managerに を使用する
get_registry_data(registryAPI, thingName, roleArn)
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 API と ListThingGroupsForThing 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_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 を底とした対数。String が Decimal に変換できない場合、結果は 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 |
先頭の空白がすべて削除された String の Int 表現。 |
Decimal |
先頭の空白がすべて削除された String の Decimal 表現。 |
Boolean |
先頭の空白がすべて削除されたブール (「true」または「false」) の String 表現。 |
String |
先頭の空白がすべて削除された引数。 |
| 配列 | 先頭の空白がすべて削除された String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | 先頭の空白がすべて削除されたオブジェクトの String 表現 (標準変換ルールを使用)。 |
| Null | Undefined. |
| 未定義 | Undefined. |
machinelearning_predict (modelId, roleArn, record)
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 進数)
最初の引数を 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 番目の引数の累乗にします。すべての文字列は小数に変換されます。いずれかの String が Decimal への変換に失敗したら、結果は Undefined です。 |
| その他の値 | その他の値 | Undefined. |
principal()
トリガーメッセージの発行方法に基づいて、デバイスが認証に使用するプリンシパルを返します。次の表は、発行方法とプロトコルごとに返されるプリンシパルについて説明しています。
| メッセージの発行方法 | プロトコル | 認証情報のタイプ | プリンシパル |
|---|---|---|---|
| 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()
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 |
String の Int 表現。 |
Decimal |
String の Decimal 表現。 |
Boolean |
ブール (「true」または「false」) の String 表現。 |
String |
。String |
| 配列 | String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | オブジェクトの 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 |
String の Int 表現。 |
Decimal |
String の Decimal 表現。 |
Boolean |
ブール (「true」または「false」) の String 表現。 |
String |
ソース値。 |
| 配列 | String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | オブジェクトの 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 |
String の Int 表現。 |
Decimal |
String の Decimal 表現。 |
Boolean |
ブール (「true」または「false」) の String 表現。 |
String |
String引数。 |
| 配列 | String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | オブジェクトの 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 |
String の Int 表現。 |
Decimal |
String の Decimal 表現。 |
Boolean |
ブール (「true」または「false」) の String 表現。 |
String |
ソース値。 |
| 配列 | String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | オブジェクトの 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 |
String の Int 表現。 |
Decimal |
String の Decimal 表現。 |
Boolean |
ブール (「true」または「false」) の String 表現。 |
| 配列 | String の Array 表現 (標準変換ルールを使用)。 |
| オブジェクト | オブジェクトの String 表現 (標準変換ルールを使用)。 |
| Null | Undefined. |
| 未定義 | Undefined |
sign(10 進数)
指定された数値の符号を返します。引数の符号が正の場合、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 進数)
数値のサインをラジアンで返します。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/) の最初のプレフィックスは topic() 関数では使用できません。たとえば、次のトピックがあるとします。rule-name
$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によって提供される属性が含まれます。
|
|
|
結果 |
|---|---|---|---|
|
オブジェクト |
オブジェクトの配列 |
各オブジェクトに |
その他の値 |
任意の値 |
任意の値 |
未定義 |
注記
この関数によって返される配列は 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 |
すべての先頭および末尾の空白が削除された String の Int 表現。 |
Decimal |
すべての先頭および末尾の空白が削除された String の Decimal 表現。 |
Boolean |
すべての先頭および末尾の空白が削除された String (「true」または「false」) の Boolean 表現。 |
String |
すべての先頭および末尾の空白が削除された String。 |
| 配列 | 標準変換ルールを使用した String の Array 表現。 |
| オブジェクト | 標準変換ルールを使用したオブジェクトの 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 に切り下げられます。String は Decimal 値に変換されます。文字列変換が失敗した場合、結果は Undefined です。 |
| その他の値 | Undefined. |
upper(文字列)
指定した String の大文字バージョンを返します。非 String 引数は標準変換のルールを使用して String に変換されます。SQL バージョン 2015-10-08 以降でサポートされています。
例:
upper("hello") = "HELLO"
upper(["hello"]) = "[\"HELLO\"]"