Ketika membuat aturan penerusan data, Anda perlu menulis pernyataan SQL untuk menguraikan dan memproses data berformat JSON yang dikirimkan oleh perangkat. IoT Platform tidak menguraikan data biner; data tersebut diteruskan ke tujuan yang ditentukan. Topik ini menjelaskan cara menulis pernyataan SQL untuk aturan penerusan data.
Pernyataan SQL
Anda dapat menulis skrip untuk meneruskan data dari model TSL tersebut menggunakan fitur penerusan data versi baru. Untuk informasi lebih lanjut, lihat Menulis skrip.
Data JSON dapat dipetakan ke tabel virtual. Kunci dalam rekaman data JSON sesuai dengan nama kolom, sedangkan nilai dalam rekaman data JSON sesuai dengan nilai kolom. Setelah rekaman data JSON dipetakan ke tabel virtual, data tersebut dapat diproses dengan menulis pernyataan SQL. Gambar berikut menunjukkan format pernyataan SQL untuk aturan penerusan data.

Contoh:
- Contoh SQL berikut menunjukkan cara memproses data topik kustom.
Sensor lingkungan dapat digunakan untuk mengumpulkan data suhu, kelembapan, dan tekanan atmosfer. Kode berikut menunjukkan data yang dikirimkan oleh perangkat ke topik kustom /a1hRrzD****/+/user/update.
{ "temperature":25.1, "humidity":65, "pressure":101.5, "location":"***,***" }Jika suhu lebih tinggi dari 38 derajat Celsius, aturan dipicu dan nama perangkat, data suhu, serta data lokasi dikembalikan. Untuk mengimplementasikan kasus penggunaan ini, gunakan pernyataan SQL berikut:
SELECT temperature as t, deviceName() as deviceName, location FROM "/a1hRrzD****/+/user/update" WHERE temperature > 38 - Contoh SQL berikut menunjukkan cara memproses data topik komunikasi dasar dan topik komunikasi berbasis TSL. Data dapat diteruskan dari topik komunikasi dasar dan topik komunikasi berbasis Thing Specification Language (TSL) ke mesin aturan. Setelah data diterima, mesin aturan menguraikan data tersebut. Untuk informasi lebih lanjut tentang format data yang diuraikan, lihat Format data.
Sebagai contoh, sensor suhu dan kelembapan memiliki beberapa properti, seperti yang ditunjukkan pada gambar berikut.

Kode sampel berikut menunjukkan hasil setelah mesin aturan menguraikan data suhu dan kelembapan yang dikirimkan oleh sensor suhu dan kelembapan.
{ "deviceType": "TemperatureHumidityDetector", "iotId": "N5KURkKdibnZvSls****000100", "productKey": "a15NNfl****", "gmtCreate": 1564569974224, "deviceName": "N5KURkKdibnZvSls3Yfx", "items": { "CurrentHumidity": { "value": 70, "time": 1564569974229 }, "CurrentTemperature": { "value": 23.5, "time": 1564569974229 } } }Penting Saat melakukan kueri SQL, gunakan variabelitems.${Pengenal Properti}.valueuntuk mengakses data properti tertentu.Jika suhu lebih tinggi dari 38 derajat Celsius, aturan dipicu dan nama perangkat, data suhu saat ini, serta data kelembapan saat ini dikembalikan. Untuk mengimplementasikan kasus penggunaan ini, gunakan pernyataan SQL berikut:

SELECTdeviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature FROM "/sysa15NNfl****/N5KUR***/thing/event/property/post" WHERE items.CurrentTemperature.value > 38Jika properti milik modul kustom seperti testFB, format pengenal properti adalah
${Pengenal Modul}:${Pengenal Properti}. Apit pengenal properti dengan sepasang tanda kutip ganda ("") saat menentukan properti yang datanya ingin Anda kueri. Pernyataan SQL berikut memberikan contoh cara mengkueri data properti:SELECTdeviceName() as deviceName, "items.testFB:CurrentHumidity.value" as Humidity, "items.testFB:CurrentTemperature.value" as Temperature FROM "/sysa15NNfl****/N5KUR***/thing/event/property/post" WHERE "items.testFB:CurrentTemperature.value" > 38
SELECT
- Contoh berikut menunjukkan data JSON yang berisi label:
Gunakan hasil penguraian payload pesan sebagai bidang pernyataan SELECT. Hasil penguraian mencakup kunci dan nilai data JSON. Anda juga dapat menggunakan fungsi bawaan SQL, seperti
deviceName(), sebagai bidang pernyataan SELECT. Untuk informasi lebih lanjut tentang fungsi bawaan SQL mesin aturan, lihat Fungsi.Anda dapat menggunakan tanda bintang (
*) bersama dengan fungsi. Subkueri SQL tidak didukung.Data yang dikirimkan dalam format JSON dapat berupa array atau data JSON bertingkat. Gunakan JSONPath untuk mendapatkan nilai properti dari pernyataan SQL. Sebagai contoh, gunakan
a.key2untuk mendapatkan nilaiv2dari pernyataan{a:{key1:v1, key2:v2}}. Saat menentukan variabel dalam pernyataan SQL, perhatikan perbedaan antara tanda kutip tunggal (') dan tanda kutip ganda ("). Konstanta diapit oleh sepasang tanda kutip tunggal (''), sedangkan variabel diapit oleh sepasang tanda kutip ganda (""). Variabel juga dapat ditulis tanpa diapit oleh tanda kutip. Sebagai contoh,'a.key2'menunjukkan konstanta yang nilainya adalaha.key2.Dalam contoh SQL ini:
- Pernyataan
SELECT temperature as t, deviceName() as deviceName, locationdigunakan untuk memproses data topik kustom. Bidangtemperaturedanlocationdiperoleh dari data yang dikirimkan.deviceName()adalah fungsi bawaan SQL. - Pernyataan
SELECT deviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperaturedigunakan untuk memproses data properti yang dikirimkan dari topik. Bidangitems.CurrentHumidity.valuedanitems.CurrentTemperature.valuediperoleh dari data properti yang dikirimkan dari modul default.deviceName()adalah fungsi bawaan SQL.Catatan Bidangitems.testFB:CurrentHumidity.valuedanitems.testFB:CurrentTemperature.valuediperoleh dari data properti yang dikirimkan dari modul kustom.
- Pernyataan
- Data biner
- Masukkan tanda bintang (
*) untuk meneruskan data biner. Setelah menentukan tanda bintang (*), Anda tidak dapat lagi menggunakan fungsi. - Anda dapat menggunakan fungsi bawaan. Fungsi
to_base64(*)mengonversi payload biner asli menjadi string Base64. FungsideviceName()mengekstrak nama perangkat.
- Masukkan tanda bintang (
FROM
Tentukan topik dalam klausa FROM. Topik ini merupakan sumber dari mana pesan perangkat yang akan diproses diperoleh. Dalam topik ini, Anda dapat menggunakan tanda tambah (+) sebagai wildcard untuk kategori nama perangkat. Tanda tambah (+) mewakili semua kategori pada tingkat saat ini. Dalam hal ini, tanda tambah (+) mewakili semua perangkat produk tertentu. Setelah menentukan topik kustom, Anda dapat menggunakan tanda pagar (#) sebagai wildcard. Tanda pagar (#) mewakili semua kategori pada tingkat saat ini dan tingkat berikutnya. Untuk informasi lebih lanjut tentang wildcard, lihat Gunakan topik kustom untuk komunikasi.
Ketika pesan diterima dari topik tertentu, data payload pesan dikonversi menjadi data dalam format JSON. Data JSON diproses berdasarkan pernyataan SQL yang ditentukan. Jika format pesan tidak valid, pesan diabaikan. Anda dapat menggunakan fungsi topic() untuk menentukan topik.
Dalam contoh SQL sebelumnya:
- Klausa
FROM "/a1hRrzD****/+/user/update"menunjukkan bahwa pernyataan SQL terkait hanya memproses pesan dari topik kustom /a1hRrzD****/+/user/update. - Klausa
FROM "/sys/a15NNfl****/N5KURkKdibnZvSls3Yfx/thing/event/property/post"menunjukkan bahwa pernyataan SQL terkait hanya memproses pesan dari topik perangkat N5KURkKdibnZvSls3Yfx. Topik digunakan oleh perangkat untuk mengirimkan data properti.
WHERE
- Data JSON
Klausa WHERE digunakan sebagai kondisi untuk memicu aturan. Subkueri SQL tidak didukung. Bidang yang dapat digunakan dalam klausa WHERE sama dengan bidang yang dapat digunakan dalam pernyataan SELECT. Ketika pesan diterima dari topik tertentu, hasil yang diperoleh dengan menggunakan klausa WHERE digunakan untuk memeriksa apakah aturan dipicu. Untuk informasi lebih lanjut, lihat bagian "Ekspresi WHERE yang didukung" dari topik ini.
Dalam contoh sebelumnya, kondisi
WHERE temperature > 38menunjukkan bahwa aturan dipicu hanya ketika suhu lebih tinggi dari 38 derajat Celsius. - Data biner
Jika pesan yang diterima terdiri dari data biner, Anda hanya dapat menggunakan fungsi bawaan dan kondisi dalam klausa WHERE. Anda tidak dapat menggunakan bidang dalam payload pesan.
Hasil SQL
Setelah pernyataan SQL dieksekusi, Anda dapat meneruskan hasil kueri. Jika terjadi kesalahan ketika IoT Platform menguraikan payload pesan yang diterima, aturan gagal dieksekusi.
Anda dapat meneruskan data ke Tablestore (OTS). Dalam hal ini, gunakan variabel ${expression} untuk menentukan nilai yang diperlukan saat menentukan tujuan penerusan data.
Dalam contoh SQL sebelumnya, jika Anda ingin menggunakan aturan terkait untuk meneruskan data ke tabel OTS, tentukan variabel berikut sebagai kunci utama:
- ${t}, ${deviceName}, dan ${loaction}.
- ${deviceName}, ${Humidity}, dan ${Temperature}.
Array
Apit setiap ekspresi array dalam sepasang tanda kutip ganda (""). Gunakan $. untuk mendapatkan objek JSON. $. dapat dihapus. Gunakan . untuk mendapatkan array JSON.
{"a":[{"v":0},{"v":1},{"v":2}]}, hasil berikut diperoleh berdasarkan ekspresi yang ditentukan:- Hasil dari
"a[0]"adalah{"v":0} - Hasil dari
"$.a[0]"adalah{"v":0} - Hasil dari
".a[0]"adalah[{"v":0}]
- Hasil dari
"a[1].v"adalah1 - Hasil dari
"$.a[1].v"adalah1 - Hasil dari
".a[1].v"adalah[1]
Kondisi WHERE yang didukung
| Operator | Deskripsi | Contoh |
| = | Sama dengan | color = 'red' |
| <> | Tidak sama dengan | color <> 'red' |
| AND | Logika AND | color = 'red' AND siren = 'on' |
| OR | Logika OR | color = 'red' OR siren = 'on' |
| + | Tambah | 4 + 5 |
| - | Kurangi | 5 - 4 |
| / | Bagi | 20 / 4 |
| * | Kalikan | 5 * 4 |
| % | Mengembalikan sisa bagi | 20 % 6 |
| < | Kurang dari | 5 < 6 |
| <= | Kurang dari atau sama dengan | 5 <= 6 |
| > | Lebih besar dari | 6 > 5 |
| >= | Lebih besar dari atau sama dengan | 6 >= 5 |
| Pemanggilan fungsi | Fungsi. Untuk informasi lebih lanjut, lihat Fungsi. | deviceId() |
| Bidang yang ditentukan dalam format JSON | Anda dapat mengekstrak atribut dari payload pesan dan menyatakan atribut tersebut dalam format JSON. | state.desired.color,a.b.c[0].d |
| CASE … WHEN … THEN … ELSE …END | Ekspresi CASE. Ekspresi bersarang tidak didukung. | CASE col WHEN 1 THEN 'Y' WHEN 0 THEN 'N' ELSE '' END as flag |
| IN | Hanya enumerasi yang didukung. Subkueri tidak didukung. | Sebagai contoh, Anda dapat menggunakan WHERE a IN(1, 2, 3 ). Namun, Anda tidak dapat menggunakan WHERE a IN(select xxx). |
| like | Operator ini digunakan untuk mencocokkan string. Saat menggunakan operator LIKE, Anda hanya dapat menggunakan tanda persen (%) sebagai wildcard untuk menentukan string arbitrer.
| where c1 like '%abc' |
| not like | where c1 not like '%def%' |
Debug pernyataan SQL
Jika Anda memilih JSON di bidang Data Type saat membuat aturan penerusan data, Anda dapat men-debug pernyataan SQL di konsol IoT Platform. Prosedur:
- Setelah pernyataan SQL ditulis, klik Debug SQL.
- Di panel Debug SQL, klik tab Debug parameters. Di tab yang muncul, masukkan data debug yang diperlukan dan klik Debugging.
Masukkan data payload yang diperlukan untuk debugging berdasarkan jenis data yang dikirimkan oleh topik. Deskripsi tipe data:
- Jika menggunakan topik kustom, jenis data payload yang ditentukan harus sama dengan jenis data yang dikirimkan oleh topik kustom.
- Jika menggunakan topik komunikasi dasar atau topik komunikasi berbasis TSL, lihat Format data.

- Klik tab Commissioning results untuk melihat hasilnya.
