全部产品
Search
文档中心

IoT Platform:Pernyataan SQL

更新时间:Jul 02, 2025

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

Penting Jika menggunakan fitur penerusan data versi lama, Anda tidak dapat menulis pernyataan SQL untuk meneruskan data model Thing Specification Language (TSL) dengan pengenal yang dimulai dengan angka.

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.

SQL statements

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.

    Properties

    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 variabel items.${Pengenal Properti}.value untuk 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:

    Write an SQL Statement
    SELECTdeviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature
    FROM "/sysa15NNfl****/N5KUR***/thing/event/property/post"
    WHERE items.CurrentTemperature.value > 38

    Jika 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.key2 untuk mendapatkan nilai v2 dari 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 adalah a.key2.

    Dalam contoh SQL ini:

    • Pernyataan SELECT temperature as t, deviceName() as deviceName, location digunakan untuk memproses data topik kustom. Bidang temperature dan location diperoleh dari data yang dikirimkan. deviceName() adalah fungsi bawaan SQL.
    • Pernyataan SELECT deviceName() as deviceName, items.CurrentHumidity.value as Humidity, items.CurrentTemperature.value as Temperature digunakan untuk memproses data properti yang dikirimkan dari topik. Bidang items.CurrentHumidity.value dan items.CurrentTemperature.value diperoleh dari data properti yang dikirimkan dari modul default. deviceName() adalah fungsi bawaan SQL.
      Catatan Bidang items.testFB:CurrentHumidity.value dan items.testFB:CurrentTemperature.value diperoleh dari data properti yang dikirimkan dari modul kustom.
  • 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. Fungsi deviceName() mengekstrak nama perangkat.
Catatan Pernyataan SELECT dapat mencakup maksimal 50 bidang.

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 > 38 menunjukkan 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.

Jika pesan perangkat adalah {"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" adalah 1
  • Hasil dari "$.a[1].v" adalah 1
  • Hasil dari ".a[1].v" adalah [1]

Kondisi WHERE yang didukung

OperatorDeskripsiContoh
=Sama dengancolor = 'red'
<>Tidak sama dengancolor <> 'red'
ANDLogika ANDcolor = 'red' AND siren = 'on'
ORLogika ORcolor = 'red' OR siren = 'on'
+Tambah4 + 5
-Kurangi5 - 4
/Bagi20 / 4
*Kalikan5 * 4
%Mengembalikan sisa bagi20 % 6
<Kurang dari5 < 6
<=Kurang dari atau sama dengan5 <= 6
>Lebih besar dari6 > 5
>=Lebih besar dari atau sama dengan6 >= 5
Pemanggilan fungsiFungsi. Untuk informasi lebih lanjut, lihat Fungsi. deviceId()
Bidang yang ditentukan dalam format JSONAnda 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 …ENDEkspresi CASE. Ekspresi bersarang tidak didukung. CASE col WHEN 1 THEN 'Y' WHEN 0 THEN 'N' ELSE '' END as flag
INHanya 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).
likeOperator ini digunakan untuk mencocokkan string. Saat menggunakan operator LIKE, Anda hanya dapat menggunakan tanda persen (%) sebagai wildcard untuk menentukan string arbitrer.
  • like: mencari data yang mencakup string tertentu.
  • not like: mencari data yang tidak mencakup string tertentu.
where c1 like '%abc'
not likewhere 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:

  1. Setelah pernyataan SQL ditulis, klik Debug SQL.
  2. 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.
    SQLtest1
  3. Klik tab Commissioning results untuk melihat hasilnya.SQLtestResult