

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AWS IoT Referensi SQL
<a name="iot-sql-reference"></a>

Dalam AWS IoT, aturan didefinisikan menggunakan sintaks seperti SQL. Pernyataan SQL terdiri dari tiga jenis klausa:

**SET**  
(Opsional) Mendefinisikan variabel yang dapat Anda gunakan kembali di seluruh pernyataan SQL dan template substitusi. Tetapkan nilai ke variabel menggunakan ekspresi. Referensi variabel-variabel ini dalam klausa SELECT dan WHERE, dan dalam template substitusi tindakan.  
Klausa SET mendukung[Jenis Data](iot-sql-data-types.md),[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md), [Literal](iot-sql-literals.md)[Pernyataan kasus](iot-sql-case.md), [Variabel [Ekstensi JSON](iot-sql-json.md)](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

**SELECT**  
(Wajib) Mengekstrak informasi dari muatan pesan yang masuk dan melakukan transformasi pada informasi. Pesan yang akan digunakan diidentifikasi oleh [filter topik](topics.md#topicfilters) yang ditentukan dalam klausa FROM.  
Klausa SELECT mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md),[Pernyataan kasus](iot-sql-case.md), [Ekstensi JSON](iot-sql-json.md)[Templat substitusi](iot-substitution-templates.md), [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), dan[Muatan biner](binary-payloads.md).

**FROM**  
[Filter topik](topics.md#topicfilters) pesan MQTT yang mengidentifikasi pesan untuk mengekstrak data. Aturan diaktifkan untuk setiap pesan yang dikirim ke topik MQTT yang cocok dengan filter topik yang ditentukan di sini. Diperlukan untuk aturan yang diaktifkan oleh pesan yang melewati broker pesan. Opsional untuk aturan yang hanya diaktifkan menggunakan fitur [Basic Ingest](iot-basic-ingest.md). 

**WHERE**  
(Opsional) Menambahkan logika bersyarat yang menentukan apakah tindakan yang ditentukan oleh aturan dilakukan.   
Klausa WHERE mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

Contoh pernyataan SQL terlihat seperti ini:

```
SELECT color AS rgb FROM 'topic/subtopic' WHERE temperature > 50
```

Contoh pesan MQTT (juga disebut payload masuk) terlihat seperti ini:

```
{
    "color":"red",
    "temperature":100
}
```

Jika pesan ini diterbitkan pada `'topic/subtopic'` topik, aturan dipicu dan pernyataan SQL dievaluasi. Pernyataan SQL mengekstrak nilai `color` properti jika `"temperature"` properti lebih besar dari 50. Klausa WHERE menentukan kondisi. `temperature > 50` `AS`Kata kunci mengganti nama `"color"` properti menjadi. `"rgb"` Hasilnya (juga disebut *payload keluar*) terlihat seperti ini:

```
{
    "rgb":"red"
}
```

Data ini kemudian diteruskan ke tindakan aturan, yang mengirimkan data untuk diproses lebih lanjut. Untuk informasi selengkapnya tentang tindakan aturan, lihat[AWS IoT tindakan aturan](iot-rule-actions.md).

**catatan**  
Komentar saat ini tidak didukung dalam sintaks AWS IoT SQL.  
Nama atribut dengan spasi di dalamnya tidak dapat digunakan sebagai nama bidang dalam pernyataan SQL. Meskipun payload yang masuk dapat memiliki nama atribut dengan spasi di dalamnya, nama tersebut tidak dapat digunakan dalam pernyataan SQL. Namun, mereka akan diteruskan ke payload keluar jika Anda menggunakan spesifikasi nama bidang wildcard (\$1).

# Klausa SELECT
<a name="iot-sql-select"></a>

Klausa AWS IoT SELECT pada dasarnya sama dengan klausa ANSI SQL SELECT, dengan beberapa perbedaan kecil.

Klausa SELECT mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), dan[Muatan biner](binary-payloads.md).

Anda dapat menggunakan klausa SELECT untuk mengekstrak informasi dari pesan MQTT yang masuk. Anda juga dapat menggunakan `SELECT *` untuk mengambil seluruh payload pesan masuk. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT * FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50}
```

Jika payload adalah objek JSON, Anda dapat referensi kunci dalam objek. Payload keluar Anda berisi pasangan kunci-nilai. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL statement: SELECT color FROM 'topic/subtopic'
Outgoing payload: {"color":"red"}
```

Anda dapat menggunakan kata kunci AS untuk mengganti nama kunci. Contoh:

```
Incoming payload published on topic 'topic/subtopic':{"color":"red", "temperature":50}
SQL:SELECT color AS my_color FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red"}
```

Anda dapat memilih beberapa item dengan memisahkannya dengan koma. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT color as my_color, temperature as fahrenheit FROM 'topic/subtopic'
Outgoing payload: {"my_color":"red","fahrenheit":50}
```

Anda dapat memilih beberapa item termasuk '\$1' untuk menambahkan item ke muatan yang masuk. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT *, 15 as speed FROM 'topic/subtopic'
Outgoing payload: {"color":"red", "temperature":50, "speed":15}
```

Anda dapat menggunakan `"VALUE"` kata kunci untuk menghasilkan payload keluar yang bukan objek JSON. Dengan versi SQL`2015-10-08`, Anda hanya dapat memilih satu item. Dengan versi SQL `2016-03-23` atau yang lebih baru, Anda juga dapat memilih array untuk output sebagai objek tingkat atas.

**Example**  

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT VALUE color FROM 'topic/subtopic'
Outgoing payload: "red"
```

Anda dapat menggunakan `'.'` sintaks untuk menelusuri objek JSON bersarang di payload yang masuk. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":{"red":255,"green":0,"blue":0}, "temperature":50}
SQL: SELECT color.red as red_value FROM 'topic/subtopic'
Outgoing payload: {"red_value":255}
```

Untuk informasi tentang cara menggunakan objek JSON dan nama properti yang menyertakan karakter cadangan, seperti angka atau karakter tanda hubung (minus), lihat [Ekstensi JSON](iot-sql-json.md)

Anda dapat menggunakan fungsi (lihat[Fungsi](iot-sql-functions.md)) untuk mengubah payload yang masuk. Anda dapat menggunakan tanda kurung untuk pengelompokan. Contoh:

```
Incoming payload published on topic 'topic/subtopic': {"color":"red", "temperature":50}
SQL: SELECT (temperature - 32) * 5 / 9 AS celsius, upper(color) as my_color FROM 'topic/subtopic'
Outgoing payload: {"celsius":10,"my_color":"RED"}
```

# Klausa FROM
<a name="iot-sql-from"></a>

Klausa FROM berlangganan aturan Anda ke filter [topik](topics.md#topicnames) atau [topik](topics.md#topicfilters). Lampirkan topik atau filter topik dalam tanda kutip tunggal ('). Aturan dipicu untuk setiap pesan yang dikirim ke topik MQTT yang cocok dengan filter topik yang ditentukan di sini. Anda dapat berlangganan sekelompok topik serupa menggunakan filter topik. 

**Contoh:**

Payload masuk dipublikasikan pada topik: `'topic/subtopic'` `{temperature: 50}`

Payload masuk dipublikasikan pada topik: `'topic/subtopic-2'` `{temperature: 50}`

SQL:`"SELECT temperature AS t FROM 'topic/subtopic'"`.

Aturan berlangganan`'topic/subtopic'`, sehingga muatan yang masuk diteruskan ke aturan. Muatan keluar, diteruskan ke tindakan aturan, adalah:. `{t: 50}` Aturannya tidak berlangganan`'topic/subtopic-2'`, jadi aturan tidak dipicu untuk pesan yang dipublikasikan`'topic/subtopic-2'`.

**\$1 Wildcard Contoh:**

Anda dapat menggunakan karakter wildcard '\$1' (multi-level) untuk mencocokkan satu atau lebih elemen jalur tertentu:

Muatan masuk diterbitkan dengan topik`'topic/subtopic'`:. `{temperature: 50}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-2'`:. `{temperature: 60}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-3/details'`:. `{temperature: 70}`

Muatan masuk diterbitkan dengan topik`'topic-2/subtopic-x'`:. `{temperature: 80}`

SQL:`"SELECT temperature AS t FROM 'topic/#'"`.

Aturan berlangganan topik apa pun yang dimulai`'topic'`, jadi dieksekusi tiga kali, mengirimkan muatan keluar `{t: 50}` (untuk topik/subtopik), (untuk topik/subtopik-2), dan `{t: 60}` (untuk) tindakannya. `{t: 70}` topic/subtopic-3/details Itu tidak berlangganan`'topic-2/subtopic-x'`, jadi aturan tidak dipicu untuk `{temperature: 80}` pesan.

**\$1 Contoh Wildcard:**

Anda dapat menggunakan karakter wildcard '\$1' (tingkat tunggal) untuk mencocokkan salah satu elemen jalur tertentu:

Muatan masuk diterbitkan dengan topik`'topic/subtopic'`:. `{temperature: 50}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-2'`:. `{temperature: 60}`

Muatan masuk diterbitkan dengan topik`'topic/subtopic-3/details'`:. `{temperature: 70}`

Muatan masuk diterbitkan dengan topik`'topic-2/subtopic-x'`:. `{temperature: 80}`

SQL:`"SELECT temperature AS t FROM 'topic/+'"`.

Aturan berlangganan semua topik dengan dua elemen jalur di mana elemen pertama berada`'topic'`. Aturan dijalankan untuk pesan yang dikirim ke `'topic/subtopic'` dan`'topic/subtopic-2'`, tetapi tidak `'topic/subtopic-3/details'` (memiliki level lebih dari filter topik) atau `'topic-2/subtopic-x'` (tidak dimulai dengan`topic`).

# Klausul SET
<a name="iot-sql-set"></a>

Gunakan klausa SET untuk menentukan variabel yang menyimpan hasil ekspresi. Anda dapat menggunakan kembali variabel-variabel ini dalam klausa SELECT dan WHERE, dan dalam template substitusi. Ini membantu Anda menghindari duplikasi ekspresi kompleks dan mengurangi jumlah panggilan fungsi dalam pernyataan SQL Anda.

Klausa SET mendukung[Jenis Data](iot-sql-data-types.md),[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md), [Literal](iot-sql-literals.md)[Pernyataan kasus](iot-sql-case.md), [Variabel [Ekstensi JSON](iot-sql-json.md)](#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

## SET sintaks klausa
<a name="iot-sql-set-syntax"></a>

Klausa SET harus muncul sebelum klausa SELECT dalam pernyataan SQL Anda. Gunakan sintaks berikut:

```
SET @variable_name = expression [, @variable_name2 = expression2]
```

Aturan sintaks:
+ Mulai nama variabel dengan `@`
+ Nama variabel dapat berisi huruf, angka, dan garis bawah
+ Nama variabel bisa mencapai 64 karakter
+ Beberapa variabel dapat diatur dalam satu klausa SET, dipisahkan dengan koma
+ Setiap variabel hanya dapat ditetapkan sekali (variabel tidak dapat diubah)
+ Kata kunci SET hanya dapat digunakan sekali per pernyataan SQL

## Menggunakan variabel
<a name="iot-sql-set-usage"></a>

Setelah Anda menentukan variabel, Anda dapat menggunakannya di:
+ Klausul SELECT
+ Klausul WHERE
+ Penugasan variabel SET lainnya
+ Templat substitusi tindakan
+ Templat substitusi tindakan kesalahan
+ Kueri SELECT bersarang
+ Parameter fungsi (parameter tertentu seperti parameter RoLearn dan parameter yang mengubah mode fungsi yang mirip dengan `transform("enrichArray", attributes, values)` tidak mendukung variabel)

Variabel direferensikan menggunakan `@variable_name` sintaks yang sama yang digunakan dalam klausa SET. Anda juga dapat menggunakan sintaks ekstensi JSON untuk mengakses properti variabel yang berisi objek, seperti. `@variable_name.property`

## Contoh klausa SET
<a name="iot-sql-set-examples"></a>

**Penggunaan variabel dasar**

Contoh berikut menunjukkan payload yang dipublikasikan pada topik`device/data`: `{"temp_fahrenheit": 75, "humidity": 60}`

Pernyataan SQL:

```
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9
SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
```

Muatan keluar: `{"celsius": 23.89, "humidity": 60}`

**Akses anggota dalam objek JSON yang disematkan**

Contoh berikut menunjukkan payload yang dipublikasikan pada topik`device/data`: `{"device1": {"deviceId":"weather_sensor", "deviceData": {"sensors": {"temp_fahrenheit": 75, "humidity": 60}, "location": [47.606,-122.332]}}}`

Pernyataan SQL:

```
SET @device_sensor_data = device1.deviceData.sensors
SELECT @device_sensor_data.temp_fahrenheit AS temp_fahrenheit, @device_sensor_data.humidity as humidity, device1.deviceId as deviceId FROM 'device/data'
```

Muatan keluar: `{"temp_fahrenheit":75,"humidity":60,"deviceId":"weather_sensor"}`

 untuk informasi lebih lanjut tentang cara bekerja dengan ekstensi JSON, referensi [Ekstensi JSON](iot-sql-json.md) 

**Menghindari panggilan fungsi duplikat**

Variabel SET membantu menghindari duplikasi operasi decode yang kompleks:

```
SET @decoded_data = decode(encode(*, 'base64'), 'proto', 'schema', 'schema.desc', 'message.proto', 'Message')
SELECT @decoded_data.sensor_id, @decoded_data.reading FROM 'device/protobuf' 
WHERE @decoded_data.reading > 100
```

Tanpa variabel SET, Anda perlu mengulang fungsi decode tiga kali, yang melebihi batas panggilan fungsi.

**Beberapa variabel**

Anda dapat menentukan beberapa variabel dalam satu klausa SET dengan memisahkannya dengan koma:

```
SET @user_data = get_user_properties(device_id), @threshold = 50
SELECT @user_data.name, temp_fahrenheit FROM 'sensors/+'
WHERE temp_fahrenheit > @threshold AND @user_data.active = true
```

**Menggunakan variabel dalam template substitusi**

Variabel juga dapat digunakan dalam template substitusi tindakan, memungkinkan Anda untuk menggunakan kembali nilai yang dihitung di kedua pernyataan SQL dan tindakan aturan.

Pernyataan SQL:

```
SET @temp_celsius = (temp_fahrenheit - 32) * 5 / 9
SELECT @temp_celsius AS celsius, humidity FROM 'device/data'
```

Konfigurasi tindakan:

```
{
  "s3": {
    "roleArn": "arn:aws:iam::123456789012:role/testRuleRole",
    "bucketName": "bucket",
    "key": "temperature-data/${device_id}/temp-${@temp_celsius}C.json"
  }
}
```

Dalam contoh ini, variabel SET `@temp_celsius` digunakan dalam template substitusi untuk membangun bidang kunci dari tindakan S3.

**Penggunaan muatan non-JSON**

Variabel SET tidak mendukung muatan non-JSON secara langsung, jadi payload harus dikodekan atau didekodekan terlebih dahulu:

```
SET @encoded_payload = encode(*, 'base64')
SELECT @encoded_payload AS raw_data FROM 'device/binary'
```

 untuk informasi lebih lanjut tentang cara bekerja dengan muatan non-JSON, referensi [Bekerja dengan muatan biner](binary-payloads.md) 

## Batas klausa SET
<a name="iot-sql-set-limits"></a>

Batasan berikut berlaku untuk variabel SET:
+ Maksimum 10 variabel unik per pernyataan SQL
+ Ukuran nilai variabel maksimum 128 KiB (diperkecil UTF-8 JSON string)
+ Ukuran nilai total maksimum 128 KiB untuk semua variabel
+ Nama variabel terbatas pada 64 karakter
+ Variabel dapat menerima muatan JSON secara langsung apa adanya (muatan non-JSON harus terlebih dahulu dikodekan/diterjemahkan)

# Klausa WHERE
<a name="iot-sql-where"></a>

Klausa WHERE menentukan apakah tindakan yang ditentukan oleh aturan dilakukan. Jika klausa WHERE mengevaluasi ke true, tindakan aturan dilakukan. Kalau tidak, tindakan aturan tidak dilakukan. 

Klausa WHERE mendukung [Jenis Data](iot-sql-data-types.md)[Operator](iot-sql-operators.md),,[Fungsi](iot-sql-functions.md),[Literal](iot-sql-literals.md), [Pernyataan kasus](iot-sql-case.md)[Ekstensi JSON](iot-sql-json.md), [Variabel](iot-sql-set.md#iot-sql-set-usage), dan[Kueri objek bersarang](iot-sql-nested-queries.md).

**Contoh:**

Muatan masuk dipublikasikan pada`topic/subtopic`:. `{"color":"red", "temperature":40}`

SQL:`SELECT color AS my_color FROM 'topic/subtopic' WHERE temperature > 50 AND color <> 'red'`.

Dalam hal ini, aturan akan dipicu, tetapi tindakan yang ditentukan oleh aturan tidak akan dilakukan. Tidak akan ada muatan keluar.

Anda dapat menggunakan fungsi dan operator dalam klausa WHERE. Namun, Anda tidak dapat mereferensikan alias apa pun yang dibuat dengan kata kunci AS di SELECT. Klausa WHERE dievaluasi terlebih dahulu, untuk menentukan apakah SELECT dievaluasi. 

**Contoh dengan muatan non-JSON:**

Payload non-JSON yang masuk diterbitkan pada `topik/subtopik`: `80`

SQL: ``SELECT decode(encode(*, 'base64'), 'base64') AS value FROM 'topic/subtopic' WHERE decode(encode(*, 'base64'), 'base64') > 50`

Dalam hal ini, aturan akan dipicu, dan tindakan yang ditentukan oleh aturan akan dilakukan. Payload keluar akan diubah oleh klausa SELECT sebagai payload JSON. `{"value":80}`

# Jenis Data
<a name="iot-sql-data-types"></a>

Mesin AWS IoT aturan mendukung semua tipe data JSON.


**Jenis data yang didukung**  

| Tipe | Arti | 
| --- | --- | 
| Int | Sebuah diskritInt. Maksimum 34 digit. | 
| Decimal |  A `Decimal` dengan presisi 34 digit, dengan magnitudo bukan nol minimum 1E-999 dan magnitudo maksimum 9, 999... E999.  Beberapa fungsi mengembalikan `Decimal` nilai dengan presisi ganda daripada presisi 34 digit.  Dengan SQL V2 (2016-03-23), nilai numerik yang merupakan bilangan bulat, seperti`10.0`, diproses sebagai nilai (), bukan `Int` nilai yang diharapkan (`10`). `Decimal` `10.0` Untuk memproses nilai numerik bilangan bulat secara andal sebagai `Decimal` nilai, gunakan SQL V1 (2015-10-08) untuk pernyataan kueri aturan.   | 
| Boolean | True atau False. | 
| String | Rangkaian UTF-8. | 
| Array | Serangkaian nilai yang tidak harus memiliki tipe yang sama. | 
| Object | Nilai JSON yang terdiri dari kunci dan nilai. Kunci harus berupa string. Nilai dapat berupa jenis apa saja. | 
| Null | NullSeperti yang didefinisikan oleh JSON. Ini adalah nilai aktual yang mewakili tidak adanya nilai. Anda dapat secara eksplisit membuat Null nilai dengan menggunakan Null kata kunci dalam pernyataan SQL Anda. Misalnya: "SELECT NULL AS n FROM 'topic/subtopic'"  | 
| Undefined |  Bukan nilai. Ini tidak dapat direpresentasikan secara eksplisit di JSON kecuali dengan menghilangkan nilainya. Misalnya, dalam objek`{"foo": null}`, kunci “foo” mengembalikan NULL, tetapi kunci “bar” kembali. `Undefined` Secara internal, bahasa SQL memperlakukan `Undefined` sebagai nilai, tetapi tidak dapat direpresentasikan dalam JSON, jadi ketika diserialkan ke JSON, hasilnya adalah. `Undefined` <pre> {"foo":null, "bar":undefined} </pre> diserialisasikan ke JSON sebagai: <pre> {"foo":null}</pre> Demikian pula, `Undefined` dikonversi ke string kosong ketika diserialisasikan dengan sendirinya. Fungsi yang dipanggil dengan argumen yang tidak valid (misalnya, jenis yang salah, jumlah argumen yang salah, dan sebagainya) kembali. `Undefined`   | 

## Konversi
<a name="iot-sql-conversions"></a>

Tabel berikut mencantumkan hasil ketika nilai dari satu jenis dikonversi ke jenis lain (ketika nilai dari jenis yang salah diberikan ke fungsi). Misalnya, jika fungsi nilai absolut “abs” (yang mengharapkan `Int` atau`Decimal`) diberikan a`String`, ia mencoba mengonversi `String` ke a`Decimal`, mengikuti aturan ini. Dalam hal ini, 'abs (“-5.123") 'diperlakukan sebagai 'abs (-5.123)'.

**catatan**  
Tidak ada upaya konversi ke`Array`,, `Object``Null`, atau. `Undefined`


**Untuk desimal**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | A Decimal tanpa titik desimal. | 
| Decimal | Nilai sumbernya. | 
| Boolean | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah true = 1.0, false = 0.0.) | 
| String | Mesin SQL mencoba mengurai string sebagai file. Decimal AWS IoT mencoba mengurai string yang cocok dengan ekspresi reguler:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis ke s. Decimal | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Null. | 
| Tidak terdefinisi | Undefined. | 


**Untuk int**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Nilai sumbernya. | 
| Decimal | Nilai sumber dibulatkan ke yang terdekatInt. | 
| Boolean | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah true = 1.0, false = 0.0.) | 
| String |  Mesin SQL mencoba mengurai string sebagai file. Decimal AWS IoT mencoba mengurai string yang cocok dengan ekspresi reguler:. ^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1 “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi Decimal s. AWS IoT mencoba mengonversi String ke aDecimal, dan kemudian memotong tempat desimal untuk membuat. Decimal Int | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Null. | 
| Tidak terdefinisi | Undefined. | 


**Untuk Boolean**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Undefined. (Anda dapat secara eksplisit menggunakan cast fungsi untuk mengubah 0 = False, any\$1nonzero\$1value = True.) | 
| Decimal | Undefined. (Anda dapat secara eksplisit menggunakan fungsi cast untuk mengubah 0 = False, any\$1nonzero\$1value = True.) | 
| Boolean | Nilai aslinya. | 
| String | “True"=true dan “false"=false (case insensitive). Nilai string lainnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Untuk string**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Sebuah representasi string dari Int dalam notasi standar. | 
| Decimal | String yang mewakili Decimal nilai, mungkin dalam notasi ilmiah.  | 
| Boolean | “benar” atau “salah”. Semua huruf kecil. | 
| String | Nilai aslinya. | 
| Array | ArraySerial ke JSON. String yang dihasilkan adalah daftar yang dipisahkan koma, terlampir dalam tanda kurung siku. A String dikutip. ADecimal,Int,Boolean, dan Null tidak. | 
| Objek | Objek diserialisasikan ke JSON. String yang dihasilkan adalah daftar pasangan kunci-nilai yang dipisahkan koma dan dimulai dan diakhiri dengan kurawal kurawal. A String dikutip. ADecimal,Int,Boolean, dan Null tidak. | 
| Null | Undefined. | 
| Tidak terdefinisi | Tidak terdefinisi. | 

# Operator
<a name="iot-sql-operators"></a>

Operator berikut dapat digunakan dalam klausa SELECT dan WHERE. 

## DAN operator
<a name="iot-sql-operators-and"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi dan logis. Mengembalikan nilai true jika operan kiri dan kanan benar. Jika tidak, mengembalikan false. `Boolean`diperlukan operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*` expression AND expression`.


**DAN operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. Benar jika kedua operan benar. Kalau tidak, salah. | 
| String/Boolean | String/Boolean | Jika semua string “benar” atau “salah” (case insensitive), mereka dikonversi ke Boolean dan diproses secara normal sebagai. boolean AND boolean | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## ATAU operator
<a name="iot-sql-operators-or"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi OR logis. Mengembalikan nilai true jika operan kiri atau kanan benar. Jika tidak, mengembalikan false. `Boolean`diperlukan operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*` expression OR expression`.


**ATAU operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Boolean | Boolean | Boolean. Benar jika salah satu operan benar. Kalau tidak, salah. | 
| String/Boolean | String/Boolean | Jika semua string “benar” atau “salah” (case insensitive), mereka dikonversi ke Boolean dan diproses secara normal sebagai. boolean OR boolean | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## BUKAN operator
<a name="iot-sql-operators-not"></a>

Mengembalikan `Boolean` hasil. Melakukan operasi NOT logis. Mengembalikan nilai true jika operan palsu. Jika tidak, mengembalikan true. Diperlukan `Boolean` operan atau operan string “true” atau “false” yang tidak peka huruf besar/kecil.

*Sintaks:*`NOT expression`.


**BUKAN operator**  

| operan | Output | 
| --- | --- | 
| Boolean | Boolean. Benar jika operan salah. Kalau tidak, benar. | 
| String | Jika string adalah “true” atau “false” (case insensitive), itu dikonversi ke nilai Boolean yang sesuai, dan nilai sebaliknya dikembalikan. | 
| Nilai lainnya | Undefined. | 

## Di operator
<a name="iot-sql-operators-in"></a>

Mengembalikan `Boolean` hasil. Anda dapat menggunakan operator IN dalam klausa WHERE untuk memeriksa apakah nilai cocok dengan nilai apa pun dalam array. Ia mengembalikan true jika kecocokan ditemukan, dan false sebaliknya.

*Sintaks:*` expression IN expression`.


**Di operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal/String/Array/Object | Array | Benar jika Object elemen IntegerDecimal/String/Array//ditemukan dalam array. Kalau tidak, salah. | 

*Contoh:*

```
SQL: "select * from 'a/b' where 3 in arr"

JSON: {"arr":[1, 2, 3, "three", 5.7, null]}
```

Dalam contoh ini, klausa kondisi `where 3 in arr` akan mengevaluasi ke true karena 3 hadir dalam array bernama`arr`. Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi. Contoh ini juga menunjukkan bahwa array bisa heterogen.

## Operator EXISTS
<a name="iot-sql-operators-exists"></a>

Mengembalikan `Boolean` hasil. Anda dapat menggunakan operator EXISTS dalam klausa bersyarat untuk menguji keberadaan elemen dalam subquery. Ia mengembalikan true jika subquery mengembalikan satu atau lebih elemen dan false jika subquery mengembalikan tidak ada elemen. 

*Sintaks:*` expression`.

*Contoh:*

```
SQL: "select * from 'a/b' where exists (select * from arr as a where a = 3)"

JSON: {"arr":[1, 2, 3]}
```

Dalam contoh ini, klausa kondisi `where exists (select * from arr as a where a = 3)` akan mengevaluasi ke true karena 3 hadir dalam array bernama`arr`. Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi.

*Contoh:*

```
SQL: select * from 'a/b' where exists (select * from e as e where foo = 2)

JSON: {"foo":4,"bar":5,"e":[{"foo":1},{"foo":2}]}
```

Dalam contoh ini, klausa kondisi `where exists (select * from e as e where foo = 2)` akan mengevaluasi ke true karena array `e` dalam objek JSON berisi objek. `{"foo":2}` Oleh karena itu dalam pernyataan SQL, `select * from 'a/b'` akan mengeksekusi.

## > operator
<a name="iot-sql-operators-greater"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri lebih besar dari operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression > expression`.


**> operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri lebih besar dari operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri lebih besar dari operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined. | Undefined. | 

## >= operator
<a name="iot-sql-operators-greater-equal"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri lebih besar dari atau sama dengan operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression >= expression`.


**>= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri lebih besar dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri lebih besar dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined. | Undefined. | 

## < operator
<a name="iot-sql-operators-less"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri kurang dari operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression < expression`.


**< operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri kurang dari operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri kurang dari operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined | Undefined | 

## <= operator
<a name="iot-sql-operators-less-equal"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri kurang dari atau sama dengan operan kanan. Kedua operan diubah menjadi a`Decimal`, dan kemudian dibandingkan. 

*Sintaks:*`expression <= expression`.


**<= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Boolean. Benar jika operan kiri kurang dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dapat dikonversi keDecimal, makaBoolean. Mengembalikan nilai true jika operan kiri kurang dari atau sama dengan operan kanan. Kalau tidak, salah. | 
| Nilai lainnya | Undefined | Undefined | 

## <> operator
<a name="iot-sql-operators-not-eq"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika operan kiri dan kanan tidak sama. Jika tidak, mengembalikan false. 

*Sintaks:*` expression <> expression`.


**<> operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. | 
| Decimal | Decimal | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. Intdiubah menjadi Decimal sebelum dibandingkan. | 
| String | String | Benar jika operan kiri tidak sama dengan operan kanan. Kalau tidak, salah. | 
| Array | Array | Benar jika item di setiap operan tidak sama dan tidak dalam urutan yang sama. Jika tidak, salah | 
| Objek | Objek | Benar jika kunci dan nilai masing-masing operan tidak sama. Kalau tidak, salah. Urutan tidak keys/values penting. | 
| Null | Null | Salah. | 
| Nilai apa pun | Undefined | Tidak terdefinisi. | 
| Undefined | Nilai apa pun | Tidak terdefinisi. | 
| Tipe tidak cocok | Tipe tidak cocok | Benar. | 

## = operator
<a name="iot-sql-operators-eq"></a>

Mengembalikan `Boolean` hasil. Mengembalikan nilai true jika kedua operan kiri dan kanan sama. Jika tidak, mengembalikan false. 

*Sintaks:*` expression = expression`.


**= operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. | 
| Decimal | Decimal | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. Intdiubah menjadi Decimal sebelum dibandingkan. | 
| String | String | Benar jika operan kiri sama dengan operan kanan. Kalau tidak, salah. | 
| Array | Array | Benar jika item di setiap operan sama dan dalam urutan yang sama. Kalau tidak, salah. | 
| Objek | Objek | Benar jika kunci dan nilai masing-masing operan sama. Kalau tidak, salah. Urutan tidak keys/values penting. | 
| Nilai apa pun | Undefined | Undefined. | 
| Undefined | Nilai apa pun | Undefined. | 
| Tipe tidak cocok | Tipe tidak cocok | Salah. | 

## \$1 operator
<a name="iot-sql-operators-plus"></a>

“\$1” adalah operator yang kelebihan beban. Ini dapat digunakan untuk penggabungan string atau penambahan. 

*Sintaks:*` expression + expression`.


**\$1 operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| String | Nilai apa pun | Mengkonversi operan kanan ke string dan menggabungkan itu ke akhir operan kiri. | 
| Nilai apa pun | String | Mengkonversi operan kiri ke string dan menggabungkan operan kanan ke akhir operan kiri dikonversi. | 
| Int | Int | Intnilai. Menambahkan operan bersama-sama. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Menambahkan operan bersama-sama. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## - operator
<a name="iot-sql-operators-sub"></a>

Mengurangi operan kanan dari operan kiri. 

*Sintaks:*` expression - expression`.


**- operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengurangi operan kanan dari operan kiri. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Mengurangi operan kanan dari operan kiri. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengurangi operan kanan dari operan kiri. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## \$1 operator
<a name="iot-sql-operators-mult"></a>

Mengalikan operan kiri dengan operan kanan. 

*Sintaks:*` expression * expression`.


**\$1 operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengalikan operan kiri dengan operan kanan. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Mengalikan operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengalikan operan kiri dengan operan kanan. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## /operator
<a name="iot-sql-operators-div"></a>

Membagi operan kiri dengan operan kanan. 

*Sintaks:*` expression / expression`.


**/operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Membagi operan kiri dengan operan kanan. | 
| Int/Decimal | Int/Decimal | Decimalnilai. Membagi operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Membagi operan kiri dengan operan kanan. Jika tidak, mengembalikan Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

## % operator
<a name="iot-sql-operators-mod"></a>

Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. 

*Sintaks:*` expression % expression`.


**% operator**  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Intnilai. Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal dengan benar, Decimal nilai dikembalikan. Mengembalikan sisanya dari membagi operan kiri dengan operan kanan. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Anda dapat menggunakan fungsi bawaan berikut dalam klausa SELECT atau WHERE dari ekspresi SQL Anda.

Fungsi eksternal berikut ditagih setara dengan tindakan aturan: [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-func-aws-lambda),, [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-dynamodb), dan [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-get-thing-shadow). Anda juga ditagih untuk [https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64](https://docs.aws.amazon.com//iot/latest/developerguide/iot-sql-functions.html#iot-sql-decode-base64)fungsi hanya ketika Anda [mendekode pesan Protobuf ke](https://docs.aws.amazon.com//iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf) JSON. Untuk detail selengkapnya, lihat [halaman AWS IoT Core harga](https://aws.amazon.com/iot-core/pricing/).

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

Mengembalikan nilai absolut dari sebuah angka. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `abs(-5)` mengembalikan 5.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai absolut dari argumen. | 
| Decimal | Decimal, nilai absolut dari argumen. | 
| Boolean | Undefined. | 
| String | Decimal. Hasilnya adalah nilai absolut dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan ID akun yang memiliki aturan ini sebagai`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`accountid() `= “123456789012"

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

Mengembalikan cosinus terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `acos(0)` = 1,5707963267948966 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal, kosinus terbalik dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan sinus terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `asin(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus terbalik dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan tangen terbalik dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `atan(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), singgung terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), singgung terbalik dari argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal, singgung kebalikan dari argumen. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## atan2 (Desimal, Desimal)
<a name="iot-func-atan2"></a>

Mengembalikan sudut, dalam radian, antara sumbu x positif dan titik (x, y) yang didefinisikan dalam dua argumen.  Sudutnya positif untuk sudut berlawanan arah jarum jam (setengah bidang atas, y > 0), dan negatif untuk sudut searah jarum jam (setengah bidang bawah, y < 0). `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `atan2(1, 0)` = 1,5707963267948966


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | Decimal(dengan presisi ganda), sudut antara sumbu x dan titik (x, y) yang ditentukan. | 
| Int/Decimal/String | Int/Decimal/String | Decimal, singgung terbalik dari titik yang dijelaskan. Jika string tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

 Memanggil fungsi Lambda yang ditentukan lewat `inputJson` ke fungsi Lambda dan mengembalikan JSON yang dihasilkan oleh fungsi Lambda.


**Pendapat**  

| Pendapat | Deskripsi | 
| --- | --- | 
| functionArn |  ARN dari fungsi Lambda untuk memanggil. Fungsi Lambda harus mengembalikan data JSON.  | 
| inputJson |  Input JSON diteruskan ke fungsi Lambda. Untuk meneruskan query objek bersarang dan literal, Anda harus menggunakan SQL versi 2016-03-23.  | 

Anda harus memberikan AWS IoT `lambda:InvokeFunction` izin untuk menjalankan fungsi Lambda yang ditentukan. Contoh berikut menunjukkan cara memberikan `lambda:InvokeFunction` izin menggunakan 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"
```

Berikut ini adalah argumen untuk **add-permission** perintah:

--fungsi-nama   
Nama fungsi Lambda. Anda menambahkan izin baru untuk memperbarui kebijakan sumber daya fungsi.

--wilayah  
 Wilayah AWS Dari akun Anda.

--kepala sekolah  
Kepala sekolah yang mendapatkan izin. Ini harus `iot.amazonaws.com` untuk mengizinkan AWS IoT izin memanggil fungsi Lambda.

--sumber-arn  
ARN dari aturan tersebut. Anda dapat menggunakan **get-topic-rule** AWS CLI perintah untuk mendapatkan ARN aturan.

--source-akun  
Di Akun AWS mana aturan didefinisikan.

--pernyataan-id  
Pengidentifikasi pernyataan unik.

--tindakan  
Tindakan Lambda yang ingin Anda izinkan dalam pernyataan ini. AWS IoT Untuk memungkinkan menjalankan fungsi Lambda, tentukan. `lambda:InvokeFunction`

**penting**  
Jika Anda menambahkan izin untuk AWS IoT prinsipal tanpa memberikan `source-arn` atau`source-account`, aturan apa pun Akun AWS yang membuat aturan dengan tindakan Lambda Anda dapat memicu aturan untuk menjalankan fungsi Lambda Anda. AWS IoT Untuk informasi selengkapnya, lihat Model [Izin Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html).

Diberikan muatan pesan JSON seperti:

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

`aws_lambda`Fungsi tersebut dapat digunakan untuk memanggil fungsi Lambda sebagai berikut.

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

Jika Anda ingin meneruskan muatan pesan MQTT lengkap, Anda dapat menentukan payload JSON menggunakan '\$1', seperti contoh berikut.

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

`payload.inner.element`memilih data dari pesan yang dipublikasikan pada topik 'topik/subtopik'.

`some.value`memilih data dari output yang dihasilkan oleh fungsi Lambda.

**catatan**  
 Mesin aturan membatasi durasi eksekusi fungsi Lambda. Panggilan fungsi Lambda dari aturan harus diselesaikan dalam 2000 milidetik. 

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

Melakukan bitwise AND pada representasi bit dari dua argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

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


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, bitwise DAN dari dua argumen. | 
| Int/Decimal | Int/Decimal | Int, bitwise DAN dari dua argumen. Semua non- Int angka dibulatkan ke bawah ke yang terdekatInt. Jika salah satu argumen tidak dapat dikonversi menjadiInt, hasilnya adalahUndefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, bitwise DAN dari dua argumen. Semua string dikonversi ke desimal dan dibulatkan ke bawah ke terdekat. Int Jika konversi gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Melakukan bitwise OR dari representasi bit dari dua argumen. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

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


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, bitwise OR dari dua argumen. | 
| Int/Decimal | Int/Decimal | Int, bitwise OR dari dua argumen. Semua non- Int angka dibulatkan ke bawah ke yang terdekatInt. Jika konversi gagal, hasilnya adalahUndefined. | 
| Int/Decimal/String | Int/Decimal/String | Int, bitwise OR pada dua argumen. Semua string dikonversi ke desimal dan dibulatkan ke bawah ke terdekat. Int Jika konversi gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Melakukan XOR bitwise pada representasi bit dari dua argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

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


****  

| Jenis Argumen | Jenis Argumen | Hasil | 
| --- | --- | --- | 
| Int | Int | Int, XOR bitwise pada dua argumen. | 
| Int/Decimal | Int/Decimal | Int, XOR bitwise pada dua argumen. Non- Int angka dibulatkan ke bawah ke yang terdekatInt. | 
| Int/Decimal/String | Int/Decimal/String | Int, XOR bitwise pada dua argumen. string diubah menjadi desimal dan dibulatkan ke bawah ke terdekat. Int Jika ada konversi yang gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Melakukan bitwise NOT pada representasi bit dari argumen `Int` (-convert). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `bitnot(13)` = 2


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, sedikit demi sedikit dari argumen. | 
| Decimal | Int, sedikit demi sedikit dari argumen. DecimalNilai dibulatkan ke bawah ke yang terdekatInt. | 
| String | Int, sedikit demi sedikit dari argumen. String dikonversi menjadi desimal dan dibulatkan ke bawah ke yang terdekat. Int Jika ada konversi yang gagal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya. | 

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

Mengkonversi nilai dari satu tipe data ke yang lain. Pemeran berperilaku sebagian besar seperti konversi standar, dengan penambahan kemampuan untuk mentransmisikan angka ke atau dari Booleans. Jika AWS IoT tidak dapat menentukan cara melemparkan satu jenis ke jenis lainnya, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Format: pemeran (*value*as*type*).

Contoh:

`cast(true as Int) `= 1

Kata kunci berikut mungkin muncul setelah “as” saat menelepon`cast`:


**Untuk versi SQL 2015-10-08 dan 2016-03-23**  

| Kata Kunci | Hasil | 
| --- | --- | 
| String | Memberikan nilai keString. | 
| Nvarchar | Memberikan nilai keString. | 
| Teks | Memberikan nilai keString. | 
| Nteks | Memberikan nilai keString. | 
| varchar | Memberikan nilai keString. | 
| Int | Memberikan nilai keInt. | 
| Bilangan Bulat | Memberikan nilai keInt. | 
| Ganda | Memberikan nilai ke Decimal (dengan presisi ganda). | 


**Selain itu, untuk versi SQL 2016-03-23**  

| Kata Kunci | Hasil | 
| --- | --- | 
| Decimal | Memberikan nilai keDecimal. | 
| Bool | Memberikan nilai keBoolean. | 
| Boolean | Memberikan nilai keBoolean. | 

Aturan casting:


**Cast ke desimal**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | A Decimal tanpa titik desimal. | 
| Decimal |  Nilai sumbernya.  Dengan SQL V2 (2016-03-23), nilai numerik yang merupakan bilangan bulat, seperti`10.0`, mengembalikan `Int` nilai (`10`) alih-alih nilai yang diharapkan (). `Decimal` `10.0` Untuk secara andal melemparkan nilai numerik bilangan bulat sebagai `Decimal` nilai, gunakan SQL V1 (2015-10-08) untuk pernyataan kueri aturan.   | 
| Boolean | benar = 1,0, salah = 0,0. | 
| String | Mencoba mengurai string sebagai. Decimal AWS IoT mencoba mengurai string yang cocok dengan regex: ^-? \$1 d\$1 (\$1. \$1 d\$1)? ((? i) E-? \$1 d\$1)? \$1. “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi desimal. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Cast ke int**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Nilai sumbernya. | 
| Decimal | Nilai sumber, dibulatkan ke bawah ke yang terdekatInt. | 
| Boolean | benar = 1,0, salah = 0,0. | 
| String | Mencoba mengurai string sebagai. Decimal AWS IoT mencoba mengurai string yang cocok dengan regex: ^-? \$1 d\$1 (\$1. \$1 d\$1)? ((? i) E-? \$1 d\$1)? \$1. “0", “-1.2", “5E-12" adalah semua contoh string yang dikonversi secara otomatis menjadi desimal. AWS IoT mencoba untuk mengubah string ke a Decimal dan membulatkan ke bawah ke terdekatInt. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Melempar ke `Boolean`**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | 0 = Salah, any\$1nonzero\$1value = Benar. | 
| Decimal | 0 = Salah, any\$1nonzero\$1value = Benar. | 
| Boolean | Nilai sumbernya. | 
| String | “true” = True dan “false” = False (case insensitive). Nilai string lainnya =Undefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 


**Cast ke string**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Sebuah representasi string dariInt, dalam notasi standar. | 
| Decimal | String yang mewakili Decimal nilai, mungkin dalam notasi ilmiah. | 
| Boolean | “benar” atau “salah”, semua huruf kecil. | 
| String | Nilai sumbernya. | 
| Array | Array diserialisasikan ke JSON. String hasil adalah daftar dipisahkan koma yang diapit tanda kurung siku. Stringdikutip. Decimal,Int, dan Boolean tidak. | 
| Objek | Objek diserialisasikan ke JSON. String JSON adalah daftar pasangan kunci-nilai yang dipisahkan koma dan dimulai dan diakhiri dengan kurawal kurawal. Stringdikutip. Decimal,Int,Boolean, dan Null tidak. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Membulatkan yang diberikan `Decimal` ke yang terdekat`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`ceil(1.2)`= 2

`ceil(-1.2)`= 1


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai argumen. | 
| Decimal | Int, Decimal nilainya dibulatkan ke yang terdekatInt. | 
| String | Int. String dikonversi ke Decimal dan dibulatkan ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

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

Mengembalikan karakter ASCII yang sesuai dengan argumen yang diberikan`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`chr(65)`= “A”.

`chr(49)`= “1".


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Karakter yang sesuai dengan nilai ASCII yang ditentukan. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Decimal | Karakter yang sesuai dengan nilai ASCII yang ditentukan. DecimalArgumen dibulatkan ke bawah ke yang terdekatInt. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Boolean | Undefined. | 
| String | Jika String dapat dikonversi ke aDecimal, itu dibulatkan ke bawah ke terdekatInt. Jika argumen tersebut bukan nilai ASCII yang valid, hasilnya adalah. Undefined | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Nilai lainnya | Undefined. | 

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

Mengembalikan ID klien MQTT yang mengirim pesan, atau `n/a` jika pesan tidak dikirim melalui MQTT. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`clientid() `= “123456789012"

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

Menghubungkan array atau string. Fungsi ini menerima sejumlah argumen dan mengembalikan a `String` atau. `Array` Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`concat() ` = `Undefined`.

`concat(1) `= “1".

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

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

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

`concat(1, "hello")`= “1halo”

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

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


****  

| Jumlah argumen | Hasil | 
| --- | --- | 
| 0 | Undefined. | 
| 1 | Argumen dikembalikan tanpa dimodifikasi. | 
| 2\$1 |  Jika ada argumen`Array`, hasilnya adalah array tunggal yang berisi semua argumen. Jika tidak ada argumen yang merupakan array, dan setidaknya satu argumen adalah a`String`, hasilnya adalah gabungan dari `String` representasi semua argumen. Argumen dikonversi ke string menggunakan konversi standar yang sebelumnya terdaftar.  | 

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

Mengembalikan cosinus dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`cos(0)`= 1.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), kosinus argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan kosinus hiperbolik dari suatu angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `cosh(2.3)` = 5.037220649268761. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Decimal | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), kosinus hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Hasil imajiner dikembalikan sebagaiUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Gunakan `decode` fungsi untuk memecahkan kode nilai yang dikodekan. Jika string yang diterjemahkan adalah dokumen JSON, objek yang dapat dialamatkan dikembalikan. Jika tidak, string yang diterjemahkan dikembalikan sebagai string. Fungsi mengembalikan NULL jika string tidak dapat diterjemahkan. Fungsi ini mendukung decoding string yang dikodekan base64 dan format pesan Protocol Buffer (protobuf).

Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

nilai  
Nilai string atau salah satu ekspresi yang valid, seperti yang didefinisikan dalam[AWS IoT Referensi SQL](iot-sql-reference.md), yang mengembalikan string.

DecodingScheme  
String literal yang mewakili skema yang digunakan untuk memecahkan kode nilai. Saat ini, hanya `'base64'` dan `'proto'` didukung.

### Decoding string yang dikodekan base64
<a name="iot-sql-decode-example"></a>

Dalam contoh ini, payload pesan menyertakan nilai yang dikodekan.

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

`decode`Fungsi dalam pernyataan SQL ini menerjemahkan nilai dalam payload pesan.

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

Decoding `encoded_temp` nilai menghasilkan dokumen JSON valid berikut, yang memungkinkan pernyataan SELECT membaca nilai suhu.

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

Hasil dari pernyataan SELECT dalam contoh ini ditampilkan di sini.

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

Jika nilai decoded bukan dokumen JSON yang valid, nilai decoded akan dikembalikan sebagai string.

### Decoding payload pesan protobuf
<a name="iot-sql-decode-protobuf"></a>

Anda dapat menggunakan fungsi decode SQL untuk mengkonfigurasi Aturan yang dapat memecahkan kode payload pesan protobuf Anda. Untuk informasi selengkapnya, lihat [Menguraikan muatan pesan protobuf](binary-payloads.md#binary-payloads-protobuf).

**penting**  
Jika Anda menghilangkan `source‐arn` atau `source‐account` saat menyetel izin untuk AWS IoT prinsipal, apa pun Akun AWS dapat memanggil fungsi Decode Anda melalui aturan lain. AWS IoT Untuk mengamankan fungsi Anda, lihat [Kebijakan Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.

Tanda tangan fungsi terlihat seperti berikut:

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

`ENCODED DATA`  
Menentukan data protobuf-dikodekan yang akan diterjemahkan. Jika seluruh pesan yang dikirim ke Aturan adalah data yang disandikan protobuf, Anda dapat mereferensikan payload masuk biner mentah menggunakan. `*` Jika tidak, bidang ini harus berupa string JSON yang dikodekan basis-64 dan referensi ke string dapat diteruskan secara langsung.  
1) Untuk memecahkan kode muatan masuk protobuf biner mentah:  

```
decode(*, 'proto', ...)
```
2) Untuk memecahkan kode pesan yang disandikan protobuf yang diwakili oleh string berkode base64 'a.b':   

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

`proto`  
Menentukan data yang akan diterjemahkan dalam format pesan protobuf. Jika Anda menentukan `base64` alih-alih`proto`, fungsi ini akan memecahkan kode string yang dikodekan base64 sebagai JSON.

`S3 BUCKET NAME`  
Nama bucket Amazon S3 tempat Anda mengunggah file Anda. `FileDescriptorSet`

`S3 OBJECT KEY`  
Kunci objek yang menentukan `FileDescriptorSet` file dalam bucket Amazon S3.

`PROTO NAME`  
Nama `.proto` file (tidak termasuk ekstensi) dari mana `FileDescriptorSet` file itu dihasilkan.

`MESSAGE TYPE`  
Nama struktur pesan protobuf dalam `FileDescriptorSet` file, yang data yang akan didekodekan harus sesuai.

Contoh ekspresi SQL menggunakan fungsi decode SQL dapat terlihat seperti berikut:

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

  Merupakan payload masuk biner, yang sesuai dengan jenis pesan protobuf yang disebut. `mymessagetype`
+ `messageformat.desc`

  `FileDescriptorSet`File yang disimpan dalam ember Amazon S3 bernama. `s3-bucket` 
+ `myproto`

  `.proto`File asli yang digunakan untuk menghasilkan `FileDescriptorSet` file bernama`myproto.proto`.
+ `messagetype`

  Jenis pesan yang disebut `messagetype` (bersama dengan dependensi yang diimpor) seperti yang didefinisikan dalam. `myproto.proto`

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

Gunakan `encode` fungsi untuk menyandikan payload, yang berpotensi menjadi data non-JSON, ke dalam representasi string berdasarkan skema pengkodean. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

nilai  
Salah satu ekspresi yang valid, sebagaimana didefinisikan dalam[AWS IoT Referensi SQL](iot-sql-reference.md). Anda dapat menentukan \$1 untuk menyandikan seluruh muatan, terlepas dari apakah itu dalam format JSON. Jika Anda memberikan ekspresi, hasil evaluasi dikonversi ke string sebelum dikodekan.

encodingScheme  
String literal yang mewakili skema pengkodean yang ingin Anda gunakan. Saat ini, hanya `'base64'` didukung.

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

Mengembalikan `Boolean` menunjukkan apakah `String` argumen pertama berakhir dengan `String` argumen kedua. Jika salah satu argumen adalah `Null` atau`Undefined`, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `endswith("cat","at")` = benar.


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | String | Benar jika argumen pertama berakhir pada argumen kedua. Kalau tidak, salah. | 
| Nilai lainnya | Nilai lainnya | Kedua argumen dikonversi ke string menggunakan aturan konversi standar. Benar jika argumen pertama berakhir pada argumen kedua. Kalau tidak, salah. Jika salah satu argumen adalah Null atauUndefined, hasilnya adalahUndefined. | 

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

Mengembalikan e diangkat ke `Decimal` argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `exp(1)` = e. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), e ^ argumen. | 
| Decimal | Decimal(dengan presisi ganda), e ^ argumen. | 
| String | Decimal(dengan presisi ganda), e ^ argumen. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Nilai lainnya | Undefined. | 

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

Membulatkan yang diberikan `Decimal` ke bawah ke yang terdekat`Int`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`floor(1.2)`= 1

`floor(-1.2)`= 2


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, nilai argumen. | 
| Decimal | Int, Decimal nilai dibulatkan ke bawah ke yang terdekatInt. | 
| String | Int. String dikonversi ke Decimal dan dibulatkan ke bawah ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

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

Mengekstrak nilai dari tipe seperti koleksi (Array, String, Object). Tidak ada konversi yang diterapkan pada argumen pertama. Konversi berlaku seperti yang didokumentasikan dalam tabel ke argumen kedua. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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

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


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| Array | Tipe apa pun (dikonversi keInt) | Item pada indeks berbasis 0 dari yang Array disediakan oleh argumen kedua (dikonversi keInt). Jika konversi tidak berhasil, hasilnya adalahUndefined. Jika indeks berada di luar batas Array (negatif atau >= array.length), hasilnya adalah. Undefined | 
| String | Tipe apa pun (dikonversi keInt) | Karakter pada indeks 0 berbasis string yang disediakan oleh argumen kedua (dikonversi keInt). Jika konversi tidak berhasil, hasilnya adalahUndefined. Jika indeks berada di luar batas string (negatif atau >= string.length), hasilnya adalah. Undefined | 
| Objek | String(tidak ada konversi yang diterapkan) | Nilai yang disimpan dalam objek argumen pertama yang sesuai dengan kunci string disediakan sebagai argumen kedua. | 
| Nilai lainnya | Nilai apa pun | Undefined. | 

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

Mengambil data dari tabel DynamoDB. `get_dynamodb()`memungkinkan Anda untuk query tabel DynamoDB sementara aturan dievaluasi. Anda dapat memfilter atau menambah muatan pesan menggunakan data yang diambil dari DynamoDB. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

`get_dynamodb()`mengambil parameter berikut:

tableName  
Nama tabel DynamoDB untuk query.

partitionKeyName  
Nama kunci partisi. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

partitionKeyValue  
Nilai kunci partisi yang digunakan untuk mengidentifikasi catatan. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

sortKeyName  
(Opsional) Nama kunci sortir. Parameter ini diperlukan hanya jika tabel DynamoDB query menggunakan kunci komposit. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

sortKeyValue  
(Opsional) Nilai kunci sortir. Parameter ini diperlukan hanya jika tabel DynamoDB query menggunakan kunci komposit. Untuk informasi selengkapnya, lihat [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) Keys.

roleArn  
ARN dari peran IAM yang memberikan akses ke tabel DynamoDB. Mesin aturan mengasumsikan peran ini untuk mengakses tabel DynamoDB atas nama Anda. Hindari menggunakan peran yang terlalu permisif. Berikan peran hanya izin yang diperlukan oleh aturan. Berikut ini adalah contoh kebijakan yang memberikan akses ke satu tabel DynamoDB.    
****  

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

Sebagai contoh cara menggunakan`get_dynamodb()`, katakanlah Anda memiliki tabel DynamoDB yang berisi ID perangkat dan informasi lokasi untuk semua perangkat yang terhubung. AWS IoT Pernyataan SELECT berikut menggunakan `get_dynamodb()` fungsi untuk mengambil lokasi untuk ID perangkat yang ditentukan:

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

**catatan**  
Anda dapat memanggil maksimum `get_dynamodb()` satu kali per pernyataan SQL. Memanggil `get_dynamodb()` beberapa kali dalam satu pernyataan SQL menyebabkan aturan berakhir tanpa menjalankan tindakan apa pun.

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

Referensi salah satu MQTT5 header berikut:`contentType`,, `payLoadFormatIndicator``responseTopic`, dan`correlationData`. Fungsi ini mengambil salah satu string literal berikut sebagai argumen:`content_type`,, `format_indicator``response_topic`, dan`correlation_data`. Untuk informasi selengkapnya, lihat tabel **Argumen fungsi** berikut.

ContentType  
String: String yang dikodekan UTF-8 yang menjelaskan isi pesan penerbitan.

payLoadFormatIndikator  
String: Nilai string Enum yang menunjukkan apakah payload diformat sebagai UTF-8. Nilai yang valid adalah `UNSPECIFIED_BYTES` dan `UTF8_DATA`.

ResponseTopik  
String: String yang dikodekan UTF-8 yang digunakan sebagai nama topik untuk pesan respons. Topik respons digunakan untuk menggambarkan topik yang harus dipublikasikan oleh penerima sebagai bagian dari aliran permintaan-respons. Topik tidak boleh mengandung karakter wildcard.

KorelasiData  
String: Data biner berenkode base64 yang digunakan oleh pengirim Pesan Permintaan untuk mengidentifikasi permintaan Pesan Respons saat diterima.

Tabel berikut menunjukkan argumen fungsi yang dapat diterima dan jenis pengembalian terkait untuk `get_mqtt_property` fungsi:


**Argumen fungsi**  

| SQL | Tipe data yang dikembalikan (jika ada) | Tipe data yang dikembalikan (jika tidak ada) | 
| --- | --- | --- | 
| get\$1mqtt\$1property("format\$1indicator") | String (UNSPECIFIED\$1BYTES atau \$1DATA) UTF8 | String (UNSPECIFIED\$1BYTES) | 
| get\$1mqtt\$1property("content\$1type") | String | Tidak terdefinisi | 
| get\$1mqtt\$1property("response\$1topic") | String | Tidak terdefinisi | 
| get\$1mqtt\$1property("correlation\$1data") | base64 dikodekan String | Tidak terdefinisi | 
| get\$1mqtt\$1property("some\$1invalid\$1name") | Tidak terdefinisi | Tidak terdefinisi | 

Contoh berikut Aturan SQL referensi salah satu MQTT5 header berikut:`contentType`,, `payLoadFormatIndicator``responseTopic`, dan. `correlationData`

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

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

Mengembalikan nilai default dalam parameter kedua jika ditentukan atau lain mengembalikan undefined, ketika ekspresi dalam parameter pertama mengembalikan null, undefined, atau gagal. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

**penting**  
`get_or_default`tidak mendukung muatan non-JSON secara langsung apa adanya. Jika Anda menggunakan payload non-JSON, gunakan fungsi or. `encode` `decode`

`get_or_default()`mengambil parameter berikut:

ekspresi  
Setiap ekspresi valid yang berisi[Jenis Data](iot-sql-data-types.md),[Fungsi](#iot-sql-functions),[Literal](iot-sql-literals.md), [Variabel](iot-sql-set.md#iot-sql-set-usage),[Kueri objek bersarang](iot-sql-nested-queries.md), atau[Ekstensi JSON](iot-sql-json.md). 

defaultValue  
(Opsional) Setiap ekspresi valid yang berisi [Jenis Data](iot-sql-data-types.md)[Fungsi](#iot-sql-functions),[Literal](iot-sql-literals.md),, [Variabel](iot-sql-set.md#iot-sql-set-usage)[Kueri objek bersarang](iot-sql-nested-queries.md), atau[Ekstensi JSON](iot-sql-json.md). Ini adalah nilai yang akan dikembalikan setiap kali argumen pertama mengembalikan null, undefined, atau gagal.   
Fungsi yang mengambil data dari sumber daya milik pelanggan, seperti get\$1secret, get\$1dynamodb, aws\$1lambda, get\$1thing\$1shadow, decode-protobuf, dan machinelearning\$1predict, tidak diperbolehkan untuk parameter defaultValue.

Tabel berikut menunjukkan argumen fungsi yang dapat diterima untuk setiap argumen dan output yang terkait:


| Argumen pertama | Argumen kedua | Output | 
| --- | --- | --- | 
| Evaluasi yang berhasil | Nilai apa pun atau tidak ditentukan | Nilai argumen pertama. | 
| Tidak terdefinisi, Null, atau kegagalan | Nilai apa pun termasuk Undefined atau Null | Nilai argumen kedua. | 
| Tidak terdefinisi, Null, atau kegagalan | tidak ditentukan | Undefined | 

**Contoh:**

Contoh 1:

Contoh berikut memberikan nilai defaultValue jika tabel DynamoDB atau query gagal:

```
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'
```

Contoh 2:

Contoh berikut memberikan nilai default aman “UNKNOWN” jika status tidak terdefinisi:

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

Contoh 3:

Contoh berikut menunjukkan bagaimana Anda juga dapat menggunakan get\$1or\$1default dengan parameter tunggal. Ini berguna dalam skenario di mana Anda mungkin tidak memiliki nilai default yang jelas, tetapi Anda tidak ingin eksekusi aturan Anda gagal.

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

Jika pencarian DynamoDB gagal, eksekusi aturan akan gagal, dan tidak ada tindakan yang akan dieksekusi. Jika SQL berikut digunakan sebagai gantinya:

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

Pernyataan get\$1or\$1default akan dievaluasi`Undefined`, jadi dalam contoh ini pernyataan SELECT secara keseluruhan akan mengevaluasi `{}` dan tindakan aturan apa pun akan dicoba.

**penting**  
Sebaiknya ikuti praktik terbaik ini untuk menjaga keamanan saat menggunakan fungsi ini:  
Hindari menggunakan rahasia hardcode dalam definisi aturan termasuk nilai default
Gunakan AWS Secrets Manager untuk mengelola informasi sensitif

## get\$1registry\$1data (RegistryAPI, ThingName, roLearn)
<a name="iot-sql-function-get-registry-data"></a>

Mengambil data AWS IoT registri dalam AWS IoT aturan. Anda dapat membaca data registri (seperti atribut, tipe benda, dan grup benda milik perangkat) dan menggunakan informasi ini untuk memfilter, memperkaya, atau merutekan pesan secara dinamis. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

`get_registry_data()`mengambil parameter berikut:

RegistryAPI  
API registri dipanggil. Nilai yang valid adalah `DescribeThing` dan `ListThingGroupsForThing`. Nilai-nilai ini harus berupa string konstan.

thingName  
String: Nama benda yang data registrinya ingin Anda ambil.

roleArn  
String: Arn peran dengan `iot:DescribeThing` izin and/or `iot:ListThingGroupsForThing` izin berdasarkan API yang dipanggil.

Format respons `get_registry_data` fungsi ini sama dengan API registri yang disebut. Untuk informasi lebih lanjut, lihat [DescribeThing](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeThing.html)dan [ListThingGroupsForThing](https://docs.aws.amazon.com//iot/latest/apireference/API_ListThingGroupsForThing.html) APIs.

Contoh:

Anda dapat mengambil informasi tipe benda untuk memungkinkan pemfilteran pesan peristiwa AWS IoT Core siklus hidup untuk berbagai hal (dengan nama benda yang cocok dengan id klien MQTT) di mana tipe benda berada. `testenv`

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

Contoh:

Anda dapat mengambil atribut benda untuk perangkat dengan nama benda `sensor1` untuk semua pesan yang dikirim oleh perangkat `gateway1` gateway.

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

**catatan**  
Anda dapat memanggil maksimum `get_registry_data()` satu kali per pernyataan SQL dan template substitusi untuk tindakan dan tindakan kesalahan.

## get\$1secret (secretID, secretType, kunci, roLearn)
<a name="iot-sql-function-get-secret"></a>

Mengambil nilai terenkripsi `SecretString` atau `SecretBinary` bidang versi rahasia saat ini di. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) Untuk informasi lebih lanjut tentang membuat dan memelihara rahasia, lihat [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html), [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html), dan [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html).

`get_secret()`mengambil parameter berikut:

secretId  
String: Nama Sumber Daya Amazon (ARN) atau nama ramah rahasia untuk diambil. 

SecretType  
String: Tipe rahasia. Nilai yang valid: `SecretString` \$1 `SecretBinary`.    
SecretString  
+ Untuk rahasia yang Anda buat sebagai objek JSON dengan menggunakan APIs, AWS CLI, atau AWS Secrets Manager konsol:
  + Jika Anda menentukan nilai untuk `key` parameter, fungsi ini mengembalikan nilai kunci yang ditentukan.
  + Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan seluruh objek JSON.
+ Untuk rahasia yang Anda buat sebagai objek non-JSON dengan menggunakan APIs atau: AWS CLI
  + Jika Anda menentukan nilai untuk `key` parameter, fungsi ini gagal dengan pengecualian.
  + Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan isi rahasia.  
SecretBinary  
+ Jika Anda menentukan nilai untuk `key` parameter, fungsi ini gagal dengan pengecualian.
+ Jika Anda tidak menentukan nilai untuk `key` parameter, fungsi ini mengembalikan nilai rahasia sebagai string UTF-8 yang dikodekan base64.

kunci  
(Opsional) String: Nama kunci di dalam objek JSON yang disimpan di `SecretString` bidang rahasia. Gunakan nilai ini ketika Anda ingin mengambil hanya nilai kunci yang disimpan dalam rahasia, bukan seluruh objek JSON.  
Jika Anda menentukan nilai untuk parameter ini dan rahasia tidak berisi objek JSON di dalam `SecretString` bidangnya, fungsi ini gagal dengan pengecualian.

roleArn  
String: Peran ARN dengan `secretsmanager:GetSecretValue` dan `secretsmanager:DescribeSecret` izin.

**catatan**  
Fungsi ini selalu mengembalikan versi rahasia saat ini (versi dengan `AWSCURRENT` tag). Mesin AWS IoT aturan menyimpan setiap rahasia hingga 15 menit. Akibatnya, mesin aturan dapat memakan waktu hingga 15 menit untuk memperbarui rahasia. Ini berarti bahwa jika Anda mengambil rahasia hingga 15 menit setelah pembaruan dengan AWS Secrets Manager, fungsi ini mungkin mengembalikan versi sebelumnya.  
Fungsi ini tidak diukur, tetapi AWS Secrets Manager dikenakan biaya. Karena mekanisme caching rahasia, mesin aturan kadang-kadang memanggil AWS Secrets Manager. Karena mesin aturan adalah layanan terdistribusi penuh, Anda mungkin melihat beberapa panggilan API Secrets Manager dari mesin aturan selama jendela caching 15 menit.

Contoh:

Anda dapat menggunakan `get_secret` fungsi dalam header otentikasi dalam tindakan aturan HTTPS, seperti pada contoh otentikasi kunci API berikut.

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

Untuk informasi selengkapnya tentang tindakan aturan HTTPS, lihat[HTTP](https-rule-action.md).

## get\$1thing\$1shadow (ThingName, ShadoName, roLearn)
<a name="iot-sql-function-get-thing-shadow"></a>

Mengembalikan bayangan tertentu dari hal yang ditentukan. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

thingName  
String: Nama benda yang bayangannya ingin Anda ambil.

shadowName  
(Opsional) String: Nama bayangan. Parameter ini diperlukan hanya saat mereferensikan bayangan bernama.

roleArn  
String: Peran ARN dengan `iot:GetThingShadow` izin.

Contoh:

Saat digunakan dengan bayangan bernama, berikan `shadowName` parameternya.

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

Saat digunakan dengan bayangan yang tidak disebutkan namanya, hilangkan parameternya. `shadowName`

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

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

Referensi Properti Pengguna, yang merupakan salah satu jenis header properti yang didukung di MQTT5.

UserProperty  
String: Properti pengguna adalah pasangan kunci-nilai. Fungsi ini mengambil kunci sebagai argumen dan mengembalikan array dari semua nilai yang cocok dengan kunci terkait.

**Argumen fungsi**

Untuk Properti Pengguna berikut di header pesan:


| Key | Nilai | 
| --- | --- | 
| beberapa kunci | beberapa nilai | 
| kunci yang berbeda | nilai yang berbeda | 
| beberapa kunci | nilai dengan kunci duplikat | 

Tabel berikut menunjukkan perilaku SQL yang diharapkan:


| SQL | Tipe data yang dikembalikan | Nilai data yang dikembalikan | 
| --- | --- | --- | 
| get\$1user\$1properties ('beberapa kunci') | Array dari String | ['some value', 'value with duplicate key'] | 
| get\$1user\$1properties ('kunci lainnya') | Array dari String | ['a different value'] | 
| get\$1user\$1properties () | Array pasangan kunci-nilai Objek | [\$1'"some key": "some value"'\$1, \$1"other key": "a different value"\$1, \$1"some key": "value with duplicate key"\$1] | 
| get\$1user\$1properties ('kunci tidak ada') | Tidak terdefinisi |  | 

Contoh berikut Aturan SQL referensi Properti Pengguna (jenis header MQTT5 properti) ke payload:

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

## Fungsi hashing
<a name="iot-sql-function-hash"></a>

 AWS IoT menyediakan fungsi hashing berikut:
+ md2
+ md5
+ sha1
+ sha224
+ sha256
+ sha384
+ sha512

Semua fungsi hash mengharapkan satu argumen string. Hasilnya adalah nilai hash dari string itu. Konversi string standar berlaku untuk argumen non-string. Semua fungsi hash didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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

## indexof (String, String)
<a name="iot-sql-function-indexof"></a>

Mengembalikan indeks pertama (0-based) dari argumen kedua sebagai substring dalam argumen pertama. Kedua argumen diharapkan sebagai string. Argumen yang bukan string dikenakan aturan konversi string standar. Fungsi ini tidak berlaku untuk array, hanya untuk string. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

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

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

Mengembalikan nilai true jika argumen adalah `Null` nilai. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`isNull(5) `= salah.

`isNull(Null) `= benar.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | SALAH | 
| Null | BETUL | 
| Undefined | SALAH | 

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

Mengembalikan nilai true jika argumennya`Undefined`. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`isUndefined(5) `= salah.

`isUndefined(floor([1,2,3]))) `= benar.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | false | 
| Decimal | false | 
| Boolean | false | 
| String | false | 
| Array | false | 
| Object | false | 
| Null | SALAH | 
| Undefined | true | 

## panjang (String)
<a name="iot-sql-function-length"></a>

Mengembalikan jumlah karakter dalam string yang disediakan. Aturan konversi standar berlaku untuk `String` non-argumen. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`length("hi")`= 2

`length(false)`= 5

## ln (Desimal)
<a name="iot-func-nln"></a>

Mengembalikan logaritma natural dari argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `ln(e)` = 1. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), log alami argumen. | 
| Decimal | Decimal(dengan presisi ganda), log alami argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), log alami argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan basis 10 logaritma argumen. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `log(100)` = 2.0. 


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), log dasar 10 argumen. | 
| Decimal | Decimal(dengan presisi ganda), log dasar 10 argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), log dasar 10 argumen. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined.  | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## lebih rendah (String)
<a name="iot-func-lower"></a>

Mengembalikan versi huruf kecil dari yang diberikan. `String` Argumen non-string dikonversi ke string menggunakan aturan konversi standar. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`lower("HELLO")`= “halo”.

`lower(["HELLO"])`= “[\$1" halo\$1 "]”.

## lpad (Tali, Int)
<a name="iot-func-lpad"></a>

Mengembalikan `String` argumen, empuk di sisi kiri dengan jumlah spasi yang ditentukan oleh argumen kedua. `Int`Argumen harus antara 0 dan 1000. Jika nilai yang diberikan berada di luar rentang yang valid ini, argumen diatur ke nilai valid terdekat (0 atau 1000). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | Int | String, yang disediakan String empuk di sisi kiri dengan sejumlah spasi sama dengan yang disediakanInt. | 
| String | Decimal | DecimalArgumen dibulatkan ke bawah ke terdekat Int dan empuk di sebelah kiri dengan jumlah spasi yang ditentukan. String  | 
| String | String | Argumen kedua dikonversi ke aDecimal, yang dibulatkan ke bawah ke terdekatInt, dan empuk dengan spasi nomor yang ditentukan di sebelah kiri. String Jika argumen kedua tidak dapat diubah menjadiInt, hasilnya adalahUndefined.  | 
| Nilai lainnya | Int/Decimal/String | Nilai pertama dikonversi ke a String menggunakan konversi standar, dan kemudian fungsi LPAD diterapkan pada itu. String Jika tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai apa pun | Nilai lainnya | Undefined. | 

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

Menghapus semua spasi putih terkemuka (tab dan spasi) dari yang disediakan`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`Ltrim(" h i ")`= “hai”.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi Int dengan semua ruang putih terkemuka dihapus. | 
| Decimal | StringRepresentasi Decimal dengan semua ruang putih terkemuka dihapus. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”) dengan semua spasi putih terkemuka dihapus. | 
| String | Argumen dengan semua ruang putih terkemuka dihapus. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar) dengan semua spasi putih terkemuka dihapus. | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar) dengan semua spasi putih terkemuka dihapus. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## machinelearning\$1predict (modelID, roLearn, rekam)
<a name="iot-sql-function-machine-learning"></a>

Gunakan `machinelearning_predict` fungsi untuk membuat prediksi menggunakan data dari pesan MQTT berdasarkan model AI Amazon. SageMaker Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Argumen untuk `machinelearning_predict` fungsi tersebut adalah:

modelId  
ID model yang digunakan untuk menjalankan prediksi. Titik akhir real-time model harus diaktifkan.

roleArn  
Peran IAM yang memiliki kebijakan dengan `machinelearning:Predict` dan `machinelearning:GetMLModel` izin dan memungkinkan akses ke model tempat prediksi dijalankan.

catatan  
Data yang akan diteruskan ke SageMaker AI Predict API. Ini harus direpresentasikan sebagai objek JSON lapisan tunggal. Jika catatan adalah objek JSON multi-level, catatan diratakan dengan membuat serial nilai-nilainya. Misalnya, JSON berikut:  

```
{ "key1": {"innerKey1": "value1"}, "key2": 0}
```
 akan menjadi:  

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

Fungsi mengembalikan objek JSON dengan bidang-bidang berikut:

predictedLabel  
Klasifikasi input berdasarkan model.

detail  
Berisi atribut berikut:    
PredictiveModelType  
Tipe model. Nilai yang valid adalah REGRESSION, BINARY, MULTICLASS.  
Algoritme  
Algoritma yang digunakan oleh SageMaker AI untuk membuat prediksi. Nilainya harus SGD.

predictedScores  
Berisi skor klasifikasi mentah yang sesuai dengan setiap label.

predictedValue  
Nilai yang diprediksi oleh SageMaker AI.

## mod (Desimal, Desimal)
<a name="iot-func-mod"></a>

Mengembalikan sisa pembagian argumen pertama dengan argumen kedua. Setara dengan[sisanya (Desimal, Desimal)](#iot-func-remainder). Anda juga dapat menggunakan “%” sebagai operator infix untuk fungsionalitas modulo yang sama. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `mod(8, 3)` = 2.


****  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Int, argumen pertama modulo argumen kedua. | 
| Int/Decimal | Int/Decimal | Decimal, argumen pertama modulo operan kedua. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal, hasilnya adalah argumen pertama modulo argumen kedua. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Mengembalikan argumen pertama jika itu adalah valid`Decimal`. Jika tidak, argumen kedua dikembalikan. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. 

Contoh: `Nanvl(8, 3)` = 8.


****  

| Tipe argumen 1 | Argumen tipe 2 | Output | 
| --- | --- | --- | 
| Tidak terdefinisi | Nilai apa pun | Argumen kedua. | 
| Null | Nilai apa pun | Argumen kedua. | 
| Decimal(NaN) | Nilai apa pun | Argumen kedua. | 
| Decimal(bukan NaN) | Nilai apa pun | Argumen pertama. | 
| Nilai lainnya | Nilai apa pun | Argumen pertama. | 

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

Mengembalikan UUID 16-byte acak. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

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

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

Mengembalikan jumlah byte dalam pengkodean UTF-8 dari string yang disediakan. Aturan konversi standar berlaku untuk `String` non-argumen. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Contoh:

`numbytes("hi")`= 2

`numbytes("€") `= 3

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

Gunakan `parse_time` fungsi untuk memformat stempel waktu ke dalam format yang dapat dibaca manusia date/time . Didukung oleh SQL versi 2016-03-23 dan yang lebih baru. Untuk mengubah string stempel waktu menjadi milidetik, lihat. [time\$1to\$1epoch (String, String)](#iot-sql-function-time-to-epoch)

`parse_time`Fungsi mengharapkan argumen berikut:

pola   
(String) date/time Pola yang mengikuti format [Joda-Time](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). 

timestamp  
(Panjang) Waktu untuk diformat dalam milidetik sejak zaman Unix. Lihat fungsi[stempel waktu ()](#iot-function-timestamp).

timezone  
(String) Zona waktu tanggal/waktu yang diformat. Defaultnya adalah “UTC”. Fungsi ini mendukung zona waktu [Joda-Time](http://joda-time.sourceforge.net/timezones.html). Argumen ini opsional.

Contoh:

Ketika pesan ini dipublikasikan ke topik 'A/B', payload `{"ts": "1970.01.01 AD at 21:46:40 CST"}` dikirim ke bucket 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"
    }
}
```

Saat pesan ini dipublikasikan ke topik 'A/B', muatan yang mirip dengan `{"ts": "2017.06.09 AD at 17:19:46 UTC"}` (tetapi dengan tanggal/waktu saat ini) dikirim ke bucket 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()`juga dapat digunakan sebagai template substitusi. Misalnya, ketika pesan ini dipublikasikan ke topik 'A/B', muatan dikirim ke bucket S3 dengan kunci = “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"
    }
}
```

## kekuatan (Desimal, Desimal)
<a name="iot-func-power"></a>

Mengembalikan argumen pertama yang diangkat ke argumen kedua. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `power(2, 5)` = 32.0.


****  

| Tipe argumen 1 | Argumen tipe 2 | Output | 
| --- | --- | --- | 
| Int/Decimal | Int/Decimal | A Decimal (dengan presisi ganda), argumen pertama diangkat ke kekuatan argumen kedua. | 
| Int/Decimal/String | Int/Decimal/String | A Decimal (dengan presisi ganda), argumen pertama diangkat ke kekuatan argumen kedua. Setiap string dikonversi ke desimal. Jika ada yang String gagal dikonversiDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Mengembalikan prinsipal yang digunakan perangkat untuk otentikasi, berdasarkan bagaimana pesan pemicu dipublikasikan. Tabel berikut menjelaskan prinsip yang dikembalikan untuk setiap metode penerbitan dan protokol.


****  

| Bagaimana pesan dipublikasikan | Protokol | Tipe kredensial | Principal | 
| --- | --- | --- | --- | 
| Klien MQTT | MQTT | Sertifikat perangkat X.509 | Sidik jari sertifikat X.509 | 
| AWS IoT konsol klien MQTT | MQTT | Pengguna atau peran IAM | iam-role-id:session-name | 
| AWS CLI | HTTP | Pengguna atau peran IAM | userid | 
| AWS IoT Perangkat SDK | MQTT | Sertifikat perangkat X.509 | Sidik jari sertifikat X.509 | 
| AWS IoT Perangkat SDK | MQTT lebih WebSocket | Pengguna atau peran IAM | userid | 

Contoh berikut menunjukkan berbagai jenis nilai yang `principal()` dapat dikembalikan:
+ Sidik jari sertifikat X.509: `ba67293af50bf2506f5f93469686da660c7c844e7b3950bfb16813e0d31e9373`
+ ID peran IAM dan nama sesi: `ABCD1EFG3HIJK2LMNOP5:my-session-name`
+ Mengembalikan ID pengguna: `ABCD1EFG3HIJK2LMNOP5`

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

Mengembalikan pseudorandom, seragam didistribusikan ganda antara 0,0 dan 1,0. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`rand()`= 0.8231909191640703

## regexp\$1matches (String, String)
<a name="iot-func-regex-matches"></a>

Mengembalikan nilai true jika string (argumen pertama) berisi kecocokan untuk ekspresi reguler (argumen kedua). Jika Anda menggunakan `|` dalam ekspresi reguler, gunakan dengan`()`.

Contoh:

`regexp_matches("aaaa", "a{2,}") `= benar.

`regexp_matches("aaaa", "b")`= salah.

`regexp_matches("aaa", "(aaa|bbb)") `= benar.

`regexp_matches("bbb", "(aaa|bbb)") `= benar.

`regexp_matches("ccc", "(aaa|bbb)") `= salah.


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | ItuString. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) tidak valid regex, hasilnya adalah. `Undefined` 

## regexp\$1replace (String, String, String)
<a name="iot-func-regex-replace"></a>

Menggantikan semua kemunculan argumen kedua (ekspresi reguler) dalam argumen pertama dengan argumen ketiga. Grup tangkapan referensi dengan “\$1”. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`regexp_replace("abcd", "bc", "x")`= “kapak”.

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


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | Nilai sumbernya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) bukan ekspresi regex yang valid, hasilnya adalah. `Undefined` 

*Argumen ketiga:*

Harus berupa string pengganti regex yang valid. (Dapat mereferensikan grup tangkapan.) Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Jika argumen (dikonversi) bukan string pengganti regex yang valid, hasilnya adalah. `Undefined` 

## regexp\$1substr (Tali, Tali)
<a name="iot-func-regex-substr"></a>

Menemukan kecocokan pertama dari parameter kedua (regex) di parameter pertama. Grup tangkapan referensi dengan “\$1”. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`regexp_substr("hihihello", "hi")`= “hai”

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


**Argumen pertama:**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | StringArgumennya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

*Argumen kedua:*

Harus berupa ekspresi regex yang valid. Jenis non-string dikonversi untuk `String` menggunakan aturan konversi standar. Bergantung pada jenisnya, string yang dihasilkan mungkin bukan ekspresi reguler yang valid. Jika argumen (dikonversi) bukan ekspresi regex yang valid, hasilnya adalah. `Undefined` 

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

Mengembalikan sisa pembagian argumen pertama dengan argumen kedua. Setara dengan[mod (Desimal, Desimal)](#iot-func-mod). Anda juga dapat menggunakan “%” sebagai operator infix untuk fungsionalitas modulo yang sama. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `remainder(8, 3)` = 2.


****  

| Operan kiri | Operan kanan | Output | 
| --- | --- | --- | 
| Int | Int | Int, argumen pertama modulo argumen kedua. | 
| Int/Decimal | Int/Decimal | Decimal, argumen pertama modulo operan kedua. | 
| String/Int/Decimal | String/Int/Decimal | Jika semua string dikonversi ke desimal, hasilnya adalah argumen pertama modulo argumen kedua. Atau, Undefined. | 
| Nilai lainnya | Nilai lainnya | Undefined. | 

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

Menggantikan semua kemunculan argumen kedua dalam argumen pertama dengan argumen ketiga. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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


**Semua argumen**  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| String | Nilai sumbernya. | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan argumen string, empuk di sisi kanan dengan jumlah spasi yang ditentukan dalam argumen kedua. `Int`Argumen harus antara 0 dan 1000. Jika nilai yang diberikan berada di luar rentang yang valid ini, argumen diatur ke nilai valid terdekat (0 atau 1000). Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | Int | Empuk di sisi kanan dengan sejumlah spasi yang sama dengan yang disediakanInt. String | 
| String | Decimal | DecimalArgumen dibulatkan ke bawah ke yang terdekat Int dan string empuk di sisi kanan dengan sejumlah spasi sama dengan yang disediakanInt. | 
| String | String | Argumen kedua diubah menjadi aDecimal, yang dibulatkan ke bawah ke yang terdekatInt. Empuk di sisi kanan dengan sejumlah spasi yang sama dengan Int nilainya. String | 
| Nilai lainnya | Int/Decimal/String | Nilai pertama dikonversi ke a String menggunakan konversi standar, dan fungsi rpad diterapkan pada itu. String Jika tidak dapat dikonversi, hasilnya adalahUndefined. | 
| Nilai apa pun | Nilai lainnya | Undefined. | 

## bulat (Desimal)
<a name="iot-func-round"></a>

Membulatkan yang diberikan `Decimal` ke yang terdekat`Int`. Jika `Decimal` berjarak sama dari dua `Int` nilai (misalnya, 0,5), `Decimal` dibulatkan ke atas. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `Round(1.2)` = 1.

`Round(1.5)`= 2.

`Round(1.7)`= 2.

`Round(-1.1)`= -1.

`Round(-1.5)`= -2.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Argumennya. | 
| Decimal | Decimaldibulatkan ke bawah ke yang terdekatInt. | 
| String | Decimaldibulatkan ke bawah ke yang terdekatInt. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Nilai lainnya | Undefined. | 

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

Menghapus semua spasi putih (tab dan spasi) dari yang disediakan. `String` Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dariInt. | 
| Decimal | StringRepresentasi dariDecimal. | 
| Boolean | StringRepresentasi Boolean (“true” atau “false”). | 
| Array | StringRepresentasi dari Array (menggunakan aturan konversi standar). | 
| Objek | StringRepresentasi Object (menggunakan aturan konversi standar). | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined | 

## tanda (Desimal)
<a name="iot-func-sign"></a>

Mengembalikan tanda nomor yang diberikan. Ketika tanda argumen positif, 1 dikembalikan. Ketika tanda argumen negatif, -1 dikembalikan. Jika argumen adalah 0, 0 dikembalikan. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`sign(-7)`= -1.

`sign(0)`= 0.

`sign(13)`= 1.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Int, tanda Int nilainya. | 
| Decimal | Int, tanda Decimal nilainya. | 
| String | Int, tanda Decimal nilainya. String dikonversi ke Decimal nilai, dan tanda Decimal nilai dikembalikan. Jika String tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru. | 
| Nilai lainnya | Undefined. | 

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

Mengembalikan sinus dari angka dalam radian. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sin(0)` = 0.0


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus argumen. | 
| Decimal | Decimal(dengan presisi ganda), sinus argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Undefined | Undefined. | 

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

Mengembalikan sinus hiperbolik dari suatu angka. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Hasilnya adalah `Decimal` nilai presisi ganda. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sinh(2.3)` = 4.936961805545957


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), sinus hiperbolik argumen. | 
| Decimal | Decimal(dengan presisi ganda), sinus hiperbolik argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), sinus hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengambil alamat IP perangkat atau router yang terhubung dengannya. Jika perangkat Anda terhubung ke internet secara langsung, fungsi tersebut akan mengembalikan alamat IP sumber perangkat. Jika perangkat Anda terhubung ke router yang terhubung ke internet, fungsi tersebut akan mengembalikan alamat IP sumber router. Didukung oleh SQL versi 2016-03-23. `sourceip()`tidak mengambil parameter apa pun.

**penting**  
Alamat IP sumber publik perangkat sering kali merupakan alamat IP dari Network Address Translation (NAT) Gateway terakhir seperti router atau modem kabel penyedia layanan internet Anda.

Contoh: 

`sourceip()="192.158.1.38"`

`sourceip()="1.102.103.104"`

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

Contoh SQL:

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

Contoh cara menggunakan fungsi sourceip () dalam AWS IoT Core tindakan aturan:

**Contoh 1**

Contoh berikut menunjukkan bagaimana memanggil fungsi () sebagai [template substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) dalam tindakan [DynamoDB](https://docs.aws.amazon.com//iot/latest/developerguide/dynamodb-rule-action.html).

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

**Contoh 2**

[Contoh berikut menunjukkan cara menambahkan sourceip () fungsi sebagai properti pengguna MQTT menggunakan template substitusi.](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html)

```
{
	"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()}"
							}
						]
					}
				}
			}
		]
	}
}
```

Anda dapat mengambil alamat IP sumber dari pesan yang diteruskan ke AWS IoT Core aturan dari jalur Message Broker dan [Basic Ingest](https://docs.aws.amazon.com//iot/latest/developerguide/iot-basic-ingest.html). Anda juga dapat mengambil IP sumber untuk keduanya IPv4 dan IPv6 pesan. IP sumber akan ditampilkan seperti berikut:

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

IPv4: `xxx.xxx.xxx.xxx`

**catatan**  
IP sumber asli tidak akan diteruskan melalui [tindakan Republish](republish-rule-action.md).

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

Mengharapkan `String` diikuti oleh satu atau dua `Int` nilai. Untuk `Int` argumen `String` dan satu, fungsi ini mengembalikan substring yang disediakan `String` dari `Int` indeks yang disediakan (berbasis 0, inklusif) ke akhir. `String` Untuk `Int` argumen a `String` dan dua, fungsi ini mengembalikan substring yang disediakan `String` dari argumen `Int` indeks pertama (berbasis 0, inklusif) ke argumen `Int` indeks kedua (berbasis 0, eksklusif). Indeks yang kurang dari nol ditetapkan ke nol. Indeks yang lebih besar dari `String` panjang diatur ke `String` panjang. Untuk versi tiga argumen, jika indeks pertama lebih besar dari (atau sama dengan) indeks kedua, hasilnya kosong`String`.

 Jika argumen yang diberikan bukan (*String*,*Int*), atau (*String**Int*,,*Int*), konversi standar diterapkan ke argumen untuk mencoba mengubahnya menjadi tipe yang benar. Jika tipe tidak dapat dikonversi, hasil fungsinya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`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)`= “salah”.

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

`substring("012345", -50, 50)`= “012345".

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

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

Mengembalikan versi SQL yang ditentukan dalam aturan ini. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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

Mengembalikan akar kuadrat dari sebuah angka. `Decimal`argumen dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `sqrt(9)` = 3.0.


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Akar kuadrat dari argumen. | 
| Decimal | Akar kuadrat dari argumen. | 
| Boolean | Undefined. | 
| String | Akar kuadrat dari argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Pengembalian`Boolean`, apakah argumen string pertama dimulai dengan argumen string kedua. Jika salah satu argumen adalah `Null` atau`Undefined`, hasilnya adalah`Undefined`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| String | String | Apakah string pertama dimulai dengan string kedua. | 
| Nilai lainnya | Nilai lainnya | Kedua argumen dikonversi ke string menggunakan aturan konversi standar. Mengembalikan nilai true jika string pertama dimulai dengan string kedua. Jika salah satu argumen adalah Null atauUndefined, hasilnya adalahUndefined. | 

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

Mengembalikan garis singgung angka dalam radian. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `tan(3)` = -0.1425465430742778


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), garis singgung argumen. | 
| Decimal | Decimal(dengan presisi ganda), garis singgung argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), garis singgung argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Mengembalikan tangen hiperbolik dari angka dalam radian. `Decimal`nilai dibulatkan ke presisi ganda sebelum aplikasi fungsi. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `tanh(2.3)` = 0,9800963962661914


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. | 
| Decimal | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. | 
| Boolean | Undefined. | 
| String | Decimal(dengan presisi ganda), garis singgung hiperbolik argumen. Jika string tidak dapat dikonversi ke aDecimal, hasilnya adalahUndefined. | 
| Susunan | Undefined. | 
| Objek | Undefined. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

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

Gunakan `time_to_epoch` fungsi untuk mengubah string timestamp menjadi beberapa milidetik dalam waktu epoch Unix. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru. Untuk mengonversi milidetik ke string stempel waktu yang diformat, lihat. [parse\$1time (String, Panjang [, String])](#iot-sql-function-parse-time)

`time_to_epoch`Fungsi mengharapkan argumen berikut:

timestamp  
(String) String timestamp yang akan dikonversi menjadi milidetik sejak zaman Unix. Jika string stempel waktu tidak menentukan zona waktu, fungsi menggunakan zona waktu UTC.

pola   
(String) date/time Pola yang mengikuti [Format JDK11 Waktu](http://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html).

Contoh:

`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

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

Mengembalikan stempel waktu saat ini dalam milidetik dari 00:00:00 Coordinated Universal Time (UTC), Kamis, 1 Januari 1970, seperti yang diamati oleh mesin aturan. AWS IoT Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: `timestamp()` = `1481825251155`

## topik (Desimal)
<a name="iot-function-topic"></a>

Mengembalikan topik ke mana pesan yang memicu aturan dikirim. Jika tidak ada parameter yang ditentukan, seluruh topik dikembalikan. `Decimal`Parameter ini digunakan untuk menentukan segmen topik tertentu, dengan 1 menunjuk segmen pertama. Untuk topik`foo/bar/baz`, topik (1) kembali`foo`, topik (2) kembali`bar`, dan sebagainya. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

`topic(1)`= “hal-hal”

Ketika [Basic Ingest](iot-basic-ingest.md) digunakan, awalan awal topic (`$aws/rules/rule-name`) tidak tersedia untuk fungsi topic (). Misalnya, mengingat topik:

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

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

`topic(3)`= “Lantai2"

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

Mengembalikan ID jejak (UUID) pesan MQTT, atau `Undefined` jika pesan tidak dikirim melalui MQTT. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

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

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

Mengembalikan array objek yang berisi hasil transformasi tertentu dari `Object` parameter pada `Array` parameter.

Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

String  
Mode transformasi yang akan digunakan. Lihat tabel berikut untuk mode transformasi yang didukung dan bagaimana mereka membuat `Result` dari `Object` dan `Array` parameter.

Objek  
Objek yang berisi atribut untuk diterapkan ke setiap elemen`Array`.

Array  
Sebuah array objek ke mana atribut `Object` diterapkan.  
Setiap objek dalam Array ini sesuai dengan objek dalam respon fungsi. Setiap objek dalam respons fungsi berisi atribut yang ada di objek asli dan atribut yang disediakan oleh `Object` sebagaimana ditentukan oleh mode transformasi yang ditentukan dalam`String`.


| `String`parameter | `Object`parameter | `Array`parameter | Hasil | 
| --- | --- | --- | --- | 
| `enrichArray` | Objek | Array objek | Array objek di mana setiap objek berisi atribut elemen dari `Array` parameter dan atribut `Object` parameter. | 
| Nilai lainnya | Nilai apa pun | Nilai apa pun | Tidak terdefinisi | 

**catatan**  
Array yang dikembalikan oleh fungsi ini terbatas pada 128 KiB.

### Contoh fungsi transformasi 1
<a name="iot-func-transform-example1"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi menghasilkan array tunggal objek dari objek data dan array.

Dalam contoh ini, pesan berikut dipublikasikan ke topik MQTT. `A/B`

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

Pernyataan SQL ini untuk tindakan aturan topik menggunakan **transform()** fungsi dengan `String` nilai. `enrichArray` Dalam contoh ini, `Object` adalah `attributes` properti dari payload pesan dan `Array` `values` array, yang berisi tiga objek.

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

Setelah menerima payload pesan, pernyataan SQL mengevaluasi respons berikut.

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

### Contoh fungsi transformasi 2
<a name="iot-func-transform-example2"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi dapat menggunakan nilai literal untuk menyertakan dan mengganti nama atribut individual dari payload pesan.

Dalam contoh ini, pesan berikut dipublikasikan ke topik MQTT. `A/B` Ini adalah pesan yang sama yang digunakan dalam[Contoh fungsi transformasi 1](#iot-func-transform-example1).

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

Pernyataan SQL ini untuk tindakan aturan topik menggunakan **transform()** fungsi dengan `String` nilai. `enrichArray` `Object`Dalam **transform()** fungsi memiliki atribut tunggal bernama `key` dengan nilai `attributes.data1` dalam payload pesan dan `Array` `values` array, yang berisi tiga objek yang sama yang digunakan dalam contoh sebelumnya.

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

Setelah menerima payload pesan, pernyataan SQL ini mengevaluasi respons berikut. Perhatikan bagaimana `data1` properti tersebut dinamai `key` dalam tanggapan.

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

### Contoh fungsi transformasi 3
<a name="iot-func-transform-example3"></a>

Contoh ini menunjukkan bagaimana **transform()** fungsi dapat digunakan dalam klausa SELECT bersarang untuk memilih beberapa atribut dan membuat objek baru untuk pemrosesan selanjutnya.

Dalam contoh ini, pesan berikut dipublikasikan ke topik 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
      }
    ]
  }
}
```

Fungsi `Object` untuk transformasi ini adalah objek yang dikembalikan oleh pernyataan SELECT, yang berisi `a` dan `b` elemen `data2` objek pesan. `Array`Parameter terdiri dari dua objek dari `data2.c` array dalam pesan asli.

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

Dengan pesan sebelumnya, pernyataan SQL mengevaluasi respons berikut.

```
[
  {
    "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"
  }
]
```

 Array yang dikembalikan dalam respons ini dapat digunakan dengan tindakan aturan topik yang mendukung`batchMode`. 

## memangkas (Tali)
<a name="iot-func-trim"></a>

Menghapus semua spasi putih terdepan dan tertinggal dari yang disediakan`String`. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`Trim(" hi ") `= “hai”


****  

| Jenis Argumen | Hasil | 
| --- | --- | 
| Int | StringRepresentasi dari Int dengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Decimal | StringRepresentasi dari Decimal dengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Boolean | StringRepresentasi dari Boolean (“benar” atau “salah”) dengan semua spasi putih di depan dan belakang dihapus. | 
| String | StringDengan semua ruang putih terkemuka dan tertinggal dihapus. | 
| Array | StringRepresentasi dari Array menggunakan aturan konversi standar. | 
| Objek | StringRepresentasi Object menggunakan aturan konversi standar. | 
| Null | Undefined. | 
| Tidak terdefinisi | Undefined. | 

## batang (Desimal, Int)
<a name="iot-func-trunc"></a>

Memotong argumen pertama ke jumlah `Decimal` tempat yang ditentukan oleh argumen kedua. Jika argumen kedua kurang dari nol, itu diatur ke nol. Jika argumen kedua lebih besar dari 34, itu diatur ke 34. Trailing zeroes dilucuti dari hasilnya. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh: 

`trunc(2.3, 0)`= 2.

`trunc(2.3123, 2)`= 2,31.

`trunc(2.888, 2)`= 2,88.

`trunc(2.00, 5)`= 2.


****  

| Tipe argumen 1 | Argumen tipe 2 | Hasil | 
| --- | --- | --- | 
| Int | Int | Nilai sumbernya. | 
| Int/Decimal | Int/Decimal | Argumen pertama dipotong dengan panjang yang dijelaskan oleh argumen kedua. Argumen kedua, jika bukanInt, dibulatkan ke bawah ke yang terdekatInt. | 
| Int/Decimal/String | Int/Decimal | Argumen pertama dipotong dengan panjang yang dijelaskan oleh argumen kedua. Argumen kedua, jika bukanInt, dibulatkan ke bawah ke yang terdekatInt. A String dikonversi menjadi Decimal nilai. Jika konversi string gagal, hasilnya adalahUndefined. | 
| Nilai lainnya |  | Undefined. | 

## atas (String)
<a name="iot-sql-function-upper"></a>

Mengembalikan versi huruf besar dari yang diberikan. `String` `String`Non-argumen dikonversi untuk `String` menggunakan aturan konversi standar. Didukung oleh SQL versi 2015-10-08 dan yang lebih baru.

Contoh:

`upper("hello")`= “HALO”

`upper(["hello"])`= “[\$1" HALO\$1 "]”

# Literal
<a name="iot-sql-literals"></a>

Anda dapat langsung menentukan objek literal dalam klausa SELECT dan WHERE dari aturan SQL Anda, yang dapat berguna untuk meneruskan informasi. 

**catatan**  
Literal hanya tersedia saat menggunakan versi SQL 2016-03-23 atau yang lebih baru.

Sintaks objek JSON digunakan (pasangan kunci-nilai, dipisahkan koma, di mana kunci adalah string dan nilai adalah nilai JSON, dibungkus dalam kurung kurawal \$1\$1). Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic` `{"lat_long": [47.606,-122.332]}`

Pernyataan SQL: `SELECT {'latitude': get(lat_long, 0),'longitude':get(lat_long, 1)} as lat_long FROM 'topic/subtopic'`

Muatan keluar yang dihasilkan adalah:. `{"lat_long":{"latitude":47.606,"longitude":-122.332}}` 

Anda juga dapat secara langsung menentukan array dalam klausa SELECT dan WHERE dari aturan SQL Anda, yang memungkinkan Anda untuk mengelompokkan informasi. Sintaks JSON digunakan (bungkus item yang dipisahkan koma dalam tanda kurung siku [] untuk membuat array literal). Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic` `{"lat": 47.696, "long": -122.332}`

Pernyataan SQL: `SELECT [lat,long] as lat_long FROM 'topic/subtopic'`

Muatan keluaran yang dihasilkan adalah:`{"lat_long": [47.606,-122.332]}`.

# Pernyataan kasus
<a name="iot-sql-case"></a>

Pernyataan kasus dapat digunakan untuk eksekusi percabangan, seperti pernyataan switch.

Sintaksis:

```
CASE v WHEN t[1] THEN r[1] 
  WHEN t[2] THEN r[2] ... 
  WHEN t[n] THEN r[n] 
  ELSE r[e] END
```

Ekspresi *`v`* dievaluasi dan dicocokkan untuk kesetaraan terhadap *`t[i]`* nilai masing-masing klausa. `WHEN` Jika kecocokan ditemukan, *`r[i]`* ekspresi yang sesuai menjadi hasil `CASE` pernyataan. `WHEN`Klausa dievaluasi secara berurutan sehingga jika ada lebih dari satu klausa yang cocok, hasil klausa pencocokan pertama menjadi hasil pernyataan. `CASE` Jika tidak ada kecocokan, *`r[e]`* dari `ELSE` klausa adalah hasilnya. Jika tidak ada kecocokan dan tidak ada `ELSE` klausa, hasilnya adalah`Undefined`.

`CASE`pernyataan membutuhkan setidaknya satu `WHEN` klausa. Sebuah `ELSE` klausa adalah opsional.

Contoh:

Payload masuk dipublikasikan pada topik: `topic/subtopic`

```
{
    "color":"yellow"
}
```

Pernyataan SQL: 

```
SELECT CASE color
        WHEN 'green' THEN 'go'
        WHEN 'yellow' THEN 'caution'
        WHEN 'red' THEN 'stop'
        ELSE 'you are not at a stop light' END as instructions
    FROM 'topic/subtopic'
```

Muatan keluaran yang dihasilkan adalah:

```
{
    "instructions":"caution"
}
```

**catatan**  
Jika *`v`* ya`Undefined`, hasil dari pernyataan kasus adalah`Undefined`.

# Ekstensi JSON
<a name="iot-sql-json"></a>

Anda dapat menggunakan ekstensi berikut untuk sintaks ANSI SQL untuk memfasilitasi pekerjaan dengan objek JSON bersarang.

“.” Operator

Operator ini mengakses anggota dalam objek JSON tertanam dan fungsi identik dengan ANSI SQL dan. JavaScript Contoh: 

```
SELECT foo.bar AS bar.baz FROM 'topic/subtopic'
```

memilih nilai `bar` properti dalam `foo` objek dari payload pesan berikut yang dikirim ke topik. `topic/subtopic`

```
{
  "foo": {
    "bar": "RED",
    "bar1": "GREEN",
    "bar2": "BLUE"
  }
}
```

Jika nama properti JSON menyertakan karakter tanda hubung atau karakter numerik, notasi 'titik' tidak akan berfungsi. Sebagai gantinya, Anda harus menggunakan [fungsi get](iot-sql-functions.md#iot-sql-function-get) untuk mengekstrak nilai properti. 

 Dalam contoh ini, pesan berikut dikirim ke `iot/rules` topik. 

```
{
  "mydata": {
    "item2": {
      "0": {
        "my-key": "myValue"
      }
    }
  }
}
```

Biasanya, nilai `my-key` akan diidentifikasi seperti dalam kueri ini.

```
SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"
```

Namun, karena nama properti `my-key` berisi tanda hubung dan `item2` berisi karakter numerik, [fungsi get](iot-sql-functions.md#iot-sql-function-get) harus digunakan sebagai query berikut menunjukkan.

```
SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"
```

`*`Operator

Ini berfungsi dengan cara yang sama seperti `*` wildcard di ANSI SQL. Ini digunakan dalam klausa SELECT saja dan membuat objek JSON baru yang berisi data pesan. Jika payload pesan tidak dalam format JSON, `*` mengembalikan seluruh payload pesan sebagai byte mentah. Contoh: 

```
SELECT * FROM 'topic/subtopic'
```

**Menerapkan Fungsi ke Nilai Atribut**  
Berikut ini adalah contoh payload JSON yang mungkin dipublikasikan oleh perangkat:

```
{
    "deviceid" : "iot123",
    "temp" : 54.98,
    "humidity" : 32.43,
    "coords" : {
        "latitude" : 47.615694,
        "longitude" : -122.3359976
    }
}
```

Contoh berikut menerapkan fungsi untuk nilai atribut dalam payload JSON:

```
SELECT temp, md5(deviceid) AS hashed_id FROM topic/#
```

Hasil dari query ini adalah objek JSON berikut:

```
{
   "temp": 54.98,
   "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1"
}
```

# Templat substitusi
<a name="iot-substitution-templates"></a>

Anda dapat menggunakan template substitusi untuk menambah data JSON yang dikembalikan saat aturan dipicu dan AWS IoT melakukan tindakan. *Sintaks untuk template substitusi adalah `${` *ekspresi`}`, di mana ekspresi* dapat berupa ekspresi apa pun yang didukung oleh AWS IoT dalam klausa SELECT, klausa WHERE, dan.* [AWS IoT tindakan aturan](iot-rule-actions.md) Ekspresi ini dapat dicolokkan ke bidang tindakan pada aturan, memungkinkan Anda mengonfigurasi tindakan secara dinamis. Akibatnya, fitur ini menggantikan sepotong informasi dalam suatu tindakan. Ini termasuk fungsi, operator, dan informasi yang ada dalam muatan pesan asli.

**penting**  
Karena ekspresi dalam template substitusi dievaluasi secara terpisah dari pernyataan “SELECT...”, Anda tidak dapat mereferensikan alias yang dibuat menggunakan klausa AS. Anda hanya dapat mereferensikan informasi yang ada di muatan, [fungsi](iot-sql-functions.md), dan [operator](iot-sql-operators.md) asli.

Untuk informasi selengkapnya tentang ekspresi yang didukung, lihat[AWS IoT Referensi SQL](iot-sql-reference.md).

Tindakan aturan berikut mendukung template substitusi. Setiap tindakan mendukung bidang yang berbeda yang dapat diganti.
+ [Apache Kafka](apache-kafka-rule-action.md)
+ [CloudWatch alarm](cloudwatch-alarms-rule-action.md)
+ [CloudWatch Log](cloudwatch-logs-rule-action.md)
+ [CloudWatch metrik](cloudwatch-metrics-rule-action.md)
+ [DynamoDB](dynamodb-rule-action.md)
+ [Dinamo DBv2](dynamodb-v2-rule-action.md)
+ [Elasticsearch](elasticsearch-rule-action.md)
+ [HTTP](https-rule-action.md)
+ [AWS IoT Events](iotevents-rule-action.md)
+ [AWS IoT SiteWise](iotsitewise-rule-action.md)
+ [Kinesis Data Streams](kinesis-rule-action.md)
+ [Firehouse](kinesis-firehose-rule-action.md)
+ [Lambda](lambda-rule-action.md)
+ [Lokasi](location-rule-action.md)
+ [OpenSearch](opensearch-rule-action.md)
+ [Publikasikan ulang](republish-rule-action.md)
+ [S3](s3-rule-action.md)
+ [SNS](sns-rule-action.md)
+ [SQS](sqs-rule-action.md)
+ [Step Functions](stepfunctions-rule-action.md)
+ [Timestream](timestream-rule-action.md)

Templat substitusi muncul di parameter tindakan dalam aturan: 

```
{
    "sql": "SELECT *, timestamp() AS timestamp FROM 'my/iot/topic'",
    "ruleDisabled": false,
    "actions": [{
        "republish": {
            "topic": "${topic()}/republish",
            "roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
        }
    }]
}
```

Jika aturan ini dipicu oleh JSON berikut yang diterbitkan ke`my/iot/topic`:

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    }
}
```

Kemudian aturan ini menerbitkan JSON berikut ke`my/iot/topic/republish`, yang AWS IoT menggantikan dari: `${topic()}/republish`

```
{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    },
    "timestamp": 1579637878451
}
```

# Kueri objek bersarang
<a name="iot-sql-nested-queries"></a>

Anda dapat menggunakan klausa SELECT bersarang untuk menanyakan atribut dalam array dan objek JSON bagian dalam. Didukung oleh SQL versi 2016-03-23 dan yang lebih baru.

Pertimbangkan pesan MQTT berikut:

```
{ 
    "e": [
        { "n": "temperature", "u": "Cel", "t": 1234, "v": 22.5 },
        { "n": "light", "u": "lm", "t": 1235, "v": 135 },
        { "n": "acidity", "u": "pH", "t": 1235, "v": 7 }
    ]
}
```

**Example**  
Anda dapat mengonversi nilai ke array baru dengan aturan berikut.  

```
SELECT (SELECT VALUE n FROM e) as sensors FROM 'my/topic'
```

Aturan menghasilkan output berikut.

```
{
    "sensors": [
        "temperature",
        "light",
        "acidity"
    ]
}
```

**Example**  
Menggunakan pesan MQTT yang sama, Anda juga dapat menanyakan nilai tertentu dalam objek bersarang dengan aturan berikut.  

```
SELECT (SELECT v FROM e WHERE n = 'temperature') as temperature FROM 'my/topic'
```

Aturan menghasilkan output berikut.

```
{
    "temperature": [
        {
            "v": 22.5
        }
    ]
}
```

**Example**  
Anda juga dapat meratakan output dengan aturan yang lebih rumit.  

```
SELECT get((SELECT v FROM e WHERE n = 'temperature'), 0).v as temperature FROM 'topic'
```

Aturan menghasilkan output berikut.

```
{
    "temperature": 22.5
}
```

# Bekerja dengan muatan biner
<a name="binary-payloads"></a>

Untuk menangani payload pesan Anda sebagai data biner mentah (bukan objek JSON), Anda dapat menggunakan operator \$1 untuk merujuknya dalam klausa SELECT. 

**Topics**
+ [Contoh muatan biner](#binary-payloads-examples)
+ [Decoding muatan pesan protobuf](#binary-payloads-protobuf)

## Contoh muatan biner
<a name="binary-payloads-examples"></a>

Saat Anda menggunakan\$1 untuk merujuk ke payload pesan sebagai data biner mentah, Anda dapat menambahkan data ke aturan. Jika Anda memiliki muatan kosong atau JSON, payload yang dihasilkan dapat memiliki data yang ditambahkan menggunakan aturan. Berikut ini menunjukkan contoh `SELECT` klausa yang didukung.
+ Anda dapat menggunakan `SELECT` klausa berikut hanya dengan\$1 untuk muatan biner.
  + 

    ```
    SELECT * FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
    ```
+ Anda juga dapat menambahkan data dan menggunakan `SELECT` klausa berikut.
  + 

    ```
    SELECT *, principal() as principal, timestamp() as time FROM 'topic/subtopic'
    ```
  + 

    ```
    SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
    ```
+ Anda juga dapat menggunakan `SELECT` klausa ini dengan muatan biner.
  + Berikut ini mengacu `device_type` pada klausa WHERE.

    ```
    SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'
    ```
  + Berikut ini juga didukung.

    ```
    {
    	"sql": "SELECT * FROM 'topic/subtopic'",
    	"actions": [
    		{
    			"republish": {
    				"topic": "device/${device_id}"
    			}
    		}
    	]
    }
    ```

Tindakan aturan berikut tidak mendukung muatan biner sehingga Anda harus mendekodekannya.
+ Beberapa tindakan aturan tidak mendukung input payload biner, seperti tindakan [Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html#lambda-rule), jadi Anda harus memecahkan kode muatan biner. Tindakan aturan Lambda dapat menerima data biner, jika base64 dikodekan dan dalam muatan JSON. Anda dapat melakukan ini dengan mengubah aturan menjadi berikut.

  ```
  SELECT encode(*, 'base64') AS data FROM 'my_topic'
  ```
+ Pernyataan SQL tidak mendukung string sebagai input. Untuk mengonversi input string ke JSON, Anda dapat menjalankan perintah berikut.

  ```
  SELECT decode(encode(*, 'base64'), 'base64') AS payload FROM 'topic'
  ```

## Decoding muatan pesan protobuf
<a name="binary-payloads-protobuf"></a>

[Protocol Buffers (protobuf)](https://developers.google.com/protocol-buffers) adalah format data sumber terbuka yang digunakan untuk membuat serial data terstruktur dalam bentuk biner yang ringkas. Ini digunakan untuk mentransmisikan data melalui jaringan atau menyimpannya dalam file. Protobuf memungkinkan Anda untuk mengirim data dalam ukuran paket kecil dan pada tingkat yang lebih cepat daripada format pesan lainnya. AWS IoT Core Aturan mendukung protobuf dengan menyediakan fungsi SQL [decode (value, decodingScheme),](iot-sql-functions.md#iot-sql-decode-base64) yang memungkinkan Anda untuk memecahkan kode muatan pesan yang disandikan protobuf ke format JSON dan merutekkannya ke layanan hilir. Bagian ini merinci step-by-step proses untuk mengkonfigurasi decoding protobuf dalam Aturan. AWS IoT Core 

**Topics**
+ [Prasyarat](#binary-payloads-protobuf-prerequisites)
+ [Buat file deskriptor](#binary-payloads-protobuf-descriptor-steps)
+ [Unggah file deskriptor ke bucket S3](#binary-payloads-protobuf-s3-steps)
+ [Konfigurasikan decoding protobuf dalam Aturan](#binary-payloads-protobuf-steps)
+ [Batasan](#binary-payloads-protobuf-limitations)
+ [Praktik terbaik](#binary-payloads-protobuf-bestpractices)

### Prasyarat
<a name="binary-payloads-protobuf-prerequisites"></a>
+ Pemahaman dasar tentang [Protocol Buffer (protobuf](https://developers.google.com/protocol-buffers))
+ [`.proto`File](https://developers.google.com/protocol-buffers/docs/proto3) yang menentukan jenis pesan dan dependensi terkait
+ Menginstal [Protobuf Compiler (protoc](https://github.com/protocolbuffers/protobuf/releases)) pada sistem Anda

### Buat file deskriptor
<a name="binary-payloads-protobuf-descriptor-steps"></a>

Jika Anda sudah memiliki file deskriptor, Anda dapat melewati langkah ini. File deskriptor (`.desc`) adalah versi `.proto` file yang dikompilasi, yang merupakan file teks yang mendefinisikan struktur data dan tipe pesan yang akan digunakan dalam serialisasi protobuf. Untuk menghasilkan file deskriptor, Anda harus menentukan `.proto` file dan menggunakan kompiler [protoc](https://github.com/protocolbuffers/protobuf/releases) untuk mengompilasinya. 

1. Buat `.proto` file yang menentukan jenis pesan. `.proto`File contoh dapat terlihat seperti berikut:

   ```
   syntax = "proto3";
   
   message Person {
     optional string name = 1;
     optional int32 id = 2;
     optional string email = 3;
   }
   ```

   Dalam `.proto` file contoh ini, Anda menggunakan sintaks proto3 dan menentukan jenis pesan. `Person` Definisi `Person` pesan menentukan tiga bidang (nama, id, dan email). Untuk informasi selengkapnya tentang format pesan `.proto` file, lihat [Panduan Bahasa (proto3)](https://developers.google.com/protocol-buffers/docs/proto3).

1. Gunakan kompiler [protoc](https://github.com/protocolbuffers/protobuf/releases) untuk mengkompilasi `.proto` file dan menghasilkan file deskriptor. Contoh perintah untuk membuat file descriptor (`.desc`) dapat menjadi sebagai berikut:

   ```
   protoc --descriptor_set_out=<FILENAME>.desc \
       --proto_path=<PATH_TO_IMPORTS_DIRECTORY> \
       --include_imports \
       <PROTO_FILENAME>.proto
   ```

   Perintah contoh ini menghasilkan file deskriptor`<FILENAME>.desc`, yang dapat digunakan AWS IoT Core Aturan untuk memecahkan kode muatan protobuf yang sesuai dengan struktur data yang ditentukan. `<PROTO_FILENAME>.proto`
   + `--descriptor_set_out`

     Menentukan nama file deskriptor (`<FILENAME>.desc`) yang harus dihasilkan.
   + `--proto_path`

     Menentukan lokasi dari setiap `.proto` file impor yang direferensikan oleh file yang sedang dikompilasi. Anda dapat menentukan bendera beberapa kali jika Anda memiliki beberapa `.proto` file yang diimpor dengan lokasi yang berbeda.
   + `--include_imports`

     Menentukan bahwa setiap `.proto` file yang diimpor juga harus dikompilasi dan disertakan dalam file `<FILENAME>.desc` deskriptor.
   + `<PROTO_FILENAME>.proto`

     Menentukan nama `.proto` file yang ingin Anda kompilasi.

   Untuk informasi selengkapnya tentang referensi protokol, lihat [Referensi API](https://developers.google.com/protocol-buffers/docs/reference/overview).

### Unggah file deskriptor ke bucket S3
<a name="binary-payloads-protobuf-s3-steps"></a>

Setelah membuat file deskriptor`<FILENAME>.desc`, unggah file deskriptor `<FILENAME>.desc` ke bucket Amazon S3, menggunakan AWS API, SDK AWS , atau file. Konsol Manajemen AWS

**Pertimbangan penting**
+ Pastikan Anda mengunggah file deskriptor ke bucket Amazon S3 di Akun AWS tempat yang Wilayah AWS sama dengan tempat Anda ingin mengonfigurasi Aturan.
+ Pastikan Anda memberikan AWS IoT Core akses untuk membaca `FileDescriptorSet` dari S3. Jika bucket S3 Anda menonaktifkan enkripsi sisi server (SSE) atau bucket S3 Anda dienkripsi menggunakan kunci yang dikelola Amazon S3 (SSE-S3), konfigurasi kebijakan tambahan tidak diperlukan. Ini dapat dicapai dengan contoh kebijakan bucket:  
****  

  ```
  {
  	"Version":"2012-10-17",		 	 	 
  	"Statement": [
  		{
  			"Sid": "Statement1",
  			"Effect": "Allow",
  			"Principal": {
  				"Service": "iot.amazonaws.com"
  			},
  			"Action": "s3:Get*",
                        "Resource": "arn:aws:s3:::<BUCKET NAME>/<FILENAME>.desc"
  		}
  	]
  }
  ```
+ Jika bucket S3 Anda dienkripsi menggunakan AWS Key Management Service kunci (SSE-KMS), pastikan Anda memberikan AWS IoT Core izin untuk menggunakan kunci saat mengakses bucket S3 Anda. Anda dapat melakukannya dengan menambahkan pernyataan ini ke kebijakan utama Anda:

  ```
  {
  	"Sid": "Statement1",
  	"Effect": "Allow",
  	"Principal": {
  		"Service": "iot.amazonaws.com"
  	},
  	"Action": [
  		"kms:Decrypt",
  		"kms:GenerateDataKey*",
  		"kms:DescribeKey"
  	],
          "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  	
  }
  ```

### Konfigurasikan decoding protobuf dalam Aturan
<a name="binary-payloads-protobuf-steps"></a>

[Setelah mengunggah file deskriptor ke bucket Amazon S3, konfigurasikan Aturan yang dapat memecahkan kode format payload pesan protobuf menggunakan fungsi SQL decode (value, [decodingScheme](iot-sql-functions.md#iot-sql-decode-base64)).](https://docs.aws.amazon.com//iot/latest/developerguide/iot-create-rule.html) *Tanda tangan dan contoh fungsi terperinci dapat ditemukan di fungsi SQL [decode (value, decodingScheme)](iot-sql-functions.md#iot-sql-decode-base64) dari referensi SQL.AWS IoT *

Berikut ini adalah contoh ekspresi SQL menggunakan fungsi [decode (value, decodingScheme](iot-sql-functions.md#iot-sql-decode-base64)):

```
SELECT VALUE decode(*, 'proto', '<BUCKET NAME>', '<FILENAME>.desc', '<PROTO_FILENAME>', '<PROTO_MESSAGE_TYPE>') FROM '<MY_TOPIC>'
```

Dalam contoh ekspresi ini:
+ Anda menggunakan fungsi SQL [decode (value, decodingScheme)](iot-sql-functions.md#iot-sql-decode-base64) untuk memecahkan kode payload pesan biner yang direferensikan oleh. `*` Ini bisa berupa payload berkode protobuf biner atau string JSON yang mewakili payload protobuf yang dikodekan base64.
+ Payload pesan yang disediakan dikodekan menggunakan jenis `Person` pesan yang ditentukan. `PROTO_FILENAME.proto`
+ Bucket Amazon S3 bernama `BUCKET NAME` berisi yang `FILENAME.desc` dihasilkan dari. `PROTO_FILENAME.proto`

Setelah Anda menyelesaikan konfigurasi, publikasikan pesan ke AWS IoT Core topik yang menjadi aturan berlangganan.

### Batasan
<a name="binary-payloads-protobuf-limitations"></a>

AWS IoT Core Aturan mendukung protobuf dengan batasan berikut:
+ Decoding payload pesan protobuf dalam template [substitusi](https://docs.aws.amazon.com//iot/latest/developerguide/iot-substitution-templates.html) tidak didukung.
+ Saat mendekode muatan pesan protobuf, Anda dapat menggunakan [fungsi SQL decode dalam satu ekspresi SQL hingga](iot-sql-functions.md#iot-sql-decode-base64) dua kali.
+ Ukuran muatan masuk maksimum adalah 128 KiB (1KiB = 1024 byte), ukuran muatan keluar maksimum adalah 128 KiB, dan ukuran maksimum untuk objek yang `FileDescriptorSet` disimpan dalam ember Amazon S3 adalah 32 KiB.
+ Bucket Amazon S3 yang dienkripsi dengan enkripsi SSE-C tidak didukung.

### Praktik terbaik
<a name="binary-payloads-protobuf-bestpractices"></a>

Berikut adalah beberapa praktik terbaik dan kiat pemecahan masalah.
+ Cadangkan file proto Anda di bucket Amazon S3.

  Ini adalah praktik yang baik untuk membuat cadangan file proto Anda jika terjadi kesalahan. Misalnya, jika Anda salah memodifikasi file proto tanpa backup saat menjalankan protoc, ini dapat menyebabkan masalah pada tumpukan produksi Anda. Ada beberapa cara untuk mencadangkan file Anda di bucket Amazon S3. Misalnya, Anda dapat [menggunakan pembuatan versi di bucket S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Versioning.html). Untuk informasi selengkapnya tentang cara mencadangkan file di bucket Amazon S3, lihat Panduan Pengembang *[Amazon](https://docs.aws.amazon.com//aws-backup/latest/devguide/recovery-points.html)* S3.
+ Konfigurasikan AWS IoT logging untuk melihat entri log.

  Ini adalah praktik yang baik untuk mengonfigurasi AWS IoT logging sehingga Anda dapat memeriksa AWS IoT log untuk akun Anda CloudWatch. Ketika kueri SQL aturan memanggil fungsi eksternal, AWS IoT Core Aturan menghasilkan entri log dengan `eventType` dari`FunctionExecution`, yang berisi bidang alasan yang akan membantu Anda memecahkan masalah kegagalan. Kemungkinan kesalahan termasuk objek Amazon S3 tidak ditemukan, atau deskriptor file protobuf yang tidak valid. Untuk informasi selengkapnya tentang cara mengonfigurasi AWS IoT logging dan melihat entri log, lihat [Mengkonfigurasi entri log mesin AWS IoT logging](https://docs.aws.amazon.com//iot/latest/developerguide/configure-logging.html) [dan Aturan](https://docs.aws.amazon.com//iot/latest/developerguide/cwl-format.html#log-rules-fn-exec).
+ Perbarui `FileDescriptorSet` menggunakan kunci objek baru dan perbarui kunci objek di Aturan Anda.

  Anda dapat memperbarui `FileDescriptorSet` dengan mengunggah file deskriptor yang diperbarui ke bucket Amazon S3 Anda. Pembaruan Anda `FileDescriptorSet` dapat memakan waktu hingga 15 menit untuk tercermin. Untuk menghindari penundaan ini, adalah praktik yang baik untuk mengunggah pembaruan Anda `FileDescriptorSet` menggunakan kunci objek baru, dan memperbarui kunci objek di Aturan Anda.

# Versi SQL
<a name="iot-rule-sql-version"></a>

Mesin AWS IoT aturan menggunakan sintaks seperti SQL untuk memilih data dari pesan MQTT. Pernyataan SQL ditafsirkan berdasarkan versi SQL yang ditentukan dengan `awsIotSqlVersion` properti dalam dokumen JSON yang menjelaskan aturan. Untuk informasi selengkapnya tentang struktur dokumen aturan JSON, lihat [Membuat Aturan](iot-create-rule.md). `awsIotSqlVersion`Properti ini memungkinkan Anda menentukan versi mesin aturan AWS IoT SQL yang ingin Anda gunakan. Saat versi baru diterapkan, Anda dapat terus menggunakan versi yang lebih lama atau mengubah aturan Anda untuk menggunakan versi baru. Aturan Anda saat ini terus menggunakan versi yang dengannya mereka dibuat. 

Contoh JSON berikut menunjukkan cara menentukan versi SQL menggunakan properti. `awsIotSqlVersion`

```
{
    "sql": "expression",
    "ruleDisabled": false,
    "awsIotSqlVersion": "2016-03-23",
    "actions": [{
        "republish": {
            "topic": "my-mqtt-topic",
            "roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
        }
    }]
}
```

AWS IoT saat ini mendukung versi SQL berikut:
+ `2016-03-23`- Versi SQL dibangun pada 2016-03-23 (disarankan).
+ `2015-10-08`- Versi SQL asli dibangun pada 2015-10-08.
+ `beta`— Versi beta SQL terbaru. Versi ini dapat memperkenalkan perubahan yang melanggar aturan Anda.

## Apa yang baru di versi mesin aturan SQL 2016-03-23
<a name="sql-2016-03-23-beta"></a>
+ Perbaikan untuk memilih objek JSON bersarang.
+ Perbaikan untuk query array.
+ Dukungan kueri intra-objek. Untuk informasi selengkapnya, lihat [Kueri objek bersarang](iot-sql-nested-queries.md).
+ Support untuk menampilkan array sebagai objek tingkat atas.
+ Penambahan `encode(value, encodingScheme)` fungsi, yang dapat diterapkan pada data format JSON dan non-JSON. Untuk informasi selengkapnya, lihat [fungsi encode](iot-sql-functions.md#iot-sql-encode-payload).

### Output `Array` sebagai objek tingkat atas
<a name="return-array-rule"></a>

Fitur ini memungkinkan aturan untuk mengembalikan array sebagai objek tingkat atas. Misalnya, diberikan pesan MQTT berikut:

```
{
    "a": {"b":"c"},
    "arr":[1,2,3,4]
}
```

Dan aturan berikut:

```
SELECT VALUE arr FROM 'topic'
```

Aturan menghasilkan output berikut.

```
[1,2,3,4]
```