Klausul SET - AWS IoT Core

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

Klausul SET

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 mendukungJenis Data,Operator,,Fungsi, LiteralPernyataan kasus, Variabel Ekstensi JSON, danKueri objek bersarang.

SET sintaks klausa

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

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

Penggunaan variabel dasar

Contoh berikut menunjukkan payload yang dipublikasikan pada topikdevice/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 topikdevice/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

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

Batas klausa SET

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)