View a markdown version of this page

Klausa SET - AWS IoT Core

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

Klausa SET

Gunakan klausa SET untuk mendefinisikan 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,Literal, Pernyataan kasusEkstensi JSON, Variabel, danKueri objek bersarang.

Sintaks klausa SET

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 dapat mencapai 64 karakter

  • Beberapa variabel dapat diatur dalam klausa SET tunggal, dipisahkan oleh 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:

  • SELECT klausa

  • KLAUSUL WHERE

  • Tugas 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 variabel transform("enrichArray", attributes, values) tidak mendukung)

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 diterbitkan 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 diterbitkan 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

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 mengulangi fungsi decode tiga kali, yang melebihi batas panggilan fungsi.

Beberapa variabel

Anda dapat mendefinisikan 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.

Non-JSON penggunaan muatan

Variabel SET tidak mendukung payload non-JSON secara langsung, jadi payload harus dikodekan atau diterjemahkan 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 payload biner

Batas klausa SET

Batas berikut berlaku untuk variabel SET:

  • Maksimal 10 variabel unik per pernyataan SQL

  • Ukuran nilai variabel maksimum 128 KiB (string UTF-8 JSON diperkecil)

  • 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) encoded/decoded