全部产品
Search
文档中心

Lindorm:Kueri kontinu

更新时间:Jul 02, 2025

Kueri kontinu adalah kemampuan komputasi aliran sederhana yang secara berkala mengeksekusi kueri SQL dan menyimpan hasilnya di tabel data yang ditentukan. Anda dapat menggunakannya dalam skenario pra-pengambilan sampel dan pra-komputasi untuk menurunkan sampel data guna penyimpanan jangka panjang serta meningkatkan performa kueri. Topik ini menjelaskan konsep, penggunaan, dan skenario aplikasi kueri kontinu di LindormTSDB.

Informasi latar belakang

Dalam skenario penulisan data deret waktu real-time ke database secara kronologis, Anda mungkin ingin memproses data tersebut pada interval terjadwal berdasarkan kondisi kueri tertentu dan menyimpan hasilnya. Sebagai contoh, Anda dapat menggabungkan data yang ditulis ke database dalam jendela tertentu pada interval terjadwal. Kueri kontinu cocok untuk skenario-skenario ini.

Gambar berikut menunjukkan skenario sampel di mana data deret waktu digabungkan pada interval terjadwal.

Ikhtisar

Kueri kontinu menyediakan kemampuan komputasi aliran sederhana yang digunakan untuk secara berkala mengeksekusi kueri SQL pada data deret waktu dan menyimpan hasilnya di tabel data yang ditentukan.

Kueri kontinu menghitung deret waktu dalam jendela waktu pada interval terjadwal.

Sebagai contoh, jika interval dan jendela waktu kueri kontinu diatur menjadi 1 jam, kueri akan menghitung data dari jam sebelumnya di awal setiap jam. Jika perhitungan dipicu pada pukul 20:00, data deret waktu yang ditulis ke database dalam rentang waktu berikut dihitung: [19:00:00, 20:00:00).

Penting
  • Kueri kontinu memicu perhitungan pada interval terjadwal. Namun, hasil perhitungan mungkin disimpan ke tujuan yang ditentukan setelah periode waktu tertentu berdasarkan ukuran data yang dihitung dan beban kerja real-time dari instance.

  • Akurasi hasil kueri kontinu bergantung pada apakah data ditulis secara kronologis. Jika data tidak ditulis ke tabel deret waktu asli secara kronologis, data dalam jendela waktu sebelumnya mungkin masih ditulis sporadis ke tabel setelah dimulainya jendela waktu berikutnya, dan kueri kontinu tidak menghitung ulang data historis sebelum jendela waktu saat ini.

  • Anda dapat melakukan kueri kontinu tanpa menentukan jendela waktu. Dalam hal ini, jendela waktu sama dengan interval yang ditentukan untuk kueri kontinu.

Menggunakan kueri kontinu

Mengelola kueri kontinu

LindormTSDB memungkinkan Anda menggunakan SQL untuk mengelola kueri kontinu di database Anda.

  • Membuat Kueri Kontinu

    Anda dapat membuat kueri kontinu di database yang ditentukan. Untuk informasi lebih lanjut tentang sintaks SQL, lihat CREATE CONTINUOUS QUERY.

    Catatan
    • Kueri kontinu terkait dengan database tertentu. Saat Anda menghapus database, kueri kontinu yang dibuat di database tersebut akan otomatis dihapus.

    • Jika Anda tidak menentukan database saat membuat kueri kontinu, kueri dibuat di database saat ini yang ditentukan oleh sintaks USE DATABASE.

  • Menghapus Kueri Kontinu

    Anda dapat menghapus kueri kontinu yang ada dari database yang ditentukan. Untuk informasi lebih lanjut tentang sintaks SQL, lihat DROP CONTINUOUS QUERY.

  • Menampilkan Informasi tentang Kueri Kontinu

    Anda dapat menanyakan metadata dari kueri kontinu. Untuk informasi lebih lanjut tentang sintaks SQL, lihat SHOW CONTINUOUS QUERIES.

Menampilkan log kueri kontinu

Pada LindormTSDB 3.4.41 dan versi berikutnya, Anda dapat melihat log kueri kontinu dengan menggunakan fitur log audit. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Aktifkan fitur log audit untuk LindormTSDB di konsol Lindorm. Untuk informasi lebih lanjut tentang cara mengaktifkan fitur log audit, lihat Aktifkan Fitur Log Audit.

  2. Cari kata kunci CQ di tab Audit Logs untuk melihat log kueri kontinu.

Skenario umum dan contoh

Pengambilan sampel data dan penyimpanan jangka panjang

Dalam skenario yang melibatkan jumlah data besar, biaya penyimpanan data menjadi masalah kritis. LindormTSDB memungkinkan Anda mengonfigurasi waktu hidup (TTL) data untuk setiap database. Anda dapat menggunakan kueri kontinu untuk menurunkan sampel data dan menulis hasilnya ke database dengan TTL yang lebih lama. Contoh berikut menunjukkan cara menggunakan kueri kontinu dan TTL database untuk mengimplementasikan pengambilan sampel data dan penyimpanan jangka panjang.

Contoh

Dalam contoh berikut, data asli diambil sampelnya dengan interval 1 detik. Dalam hal ini, sejumlah besar data diambil sampelnya dan disimpan. Hanya data yang dihasilkan dalam bulan terakhir yang dapat disimpan. Jika Anda mengatur interval menjadi satu menit, data yang diambil sampelnya dalam tahun terakhir dapat disimpan.

  1. Buat database bernama db_sensor_month untuk menyimpan data deret waktu asli dan atur TTL database menjadi 30 hari.

    CREATE DATABASE db_sensor_month WITH (ttl=30);
  2. Buat tabel bernama sensor di database db_sensor_month.

    USE db_sensor_month;
    
    CREATE TABLE sensor (
        device_id VARCHAR TAG,
        region VARCHAR TAG,
        time TIMESTAMP,
        temperature DOUBLE,
        humidity BIGINT);
  3. Buat database lain bernama db_sensor_year untuk menyimpan data yang telah diambil sampelnya dan atur TTL database menjadi 365 hari.

    CREATE DATABASE db_sensor_year WITH (ttl=365);
  4. Buat tabel bernama db_sensor_year.sensor untuk menyimpan data yang telah diambil sampelnya.

    USE db_sensor_year;
    
    CREATE TABLE sensor (
        device_id VARCHAR TAG,
        region VARCHAR TAG,
        time TIMESTAMP,
        temperature DOUBLE,
        humidity BIGINT);
  5. Buat kueri kontinu untuk mengeksekusi kueri pengambilan sampel dan menulis data yang telah diambil sampelnya ke tabel db_sensor_year.sensor.

    CREATE CONTINUOUS QUERY db_sensor_year.my_cq WITH(`interval`='1m')
    AS
      INSERT into db_sensor_year.sensor(time, temperature, humidity, device_id,region)
      SELECT time, avg(temperature) as temperature, avg(humidity) humidity, device_id, region
      FROM db_sensor_month.sensor
      sample by 60s;
  6. Tulis data ke tabel data deret waktu asli db_sensor_month.sensor.

    insert into db_sensor_month.sensor(region,device_id,time,temperature,humidity) values ('hz', 'id123', current_timestamp, 37, 70);
    insert into db_sensor_month.sensor(region,device_id,time,temperature,humidity) values ('hz', 'id123', current_timestamp, 38, 67);
  7. Kueri data yang telah diambil sampelnya di tabel db_sensor_year.sensor.

    select * from db_sensor_year.sensor;

    Hasil berikut dikembalikan:

    +-----------+--------+---------------------------+-------------+----------+
    | device_id | region |           time            | temperature | humidity |
    +-----------+--------+---------------------------+-------------+----------+
    | id123     | hz     | 2023-10-08T19:54:00+08:00 | 37.500000   | 68.5     |
    +-----------+--------+---------------------------+-------------+----------+

Mengimplementasikan pra-komputasi untuk meningkatkan performa kueri

Jika Anda melakukan kueri pengambilan sampel atau kueri agregasi pada data dalam jendela waktu yang panjang, hasil kueri mungkin memerlukan waktu lama untuk dikembalikan. Dalam hal ini, Anda dapat menggunakan kueri kontinu untuk mengimplementasikan pra-komputasi pada data asli dan langsung menanyakan data yang telah dihitung di tabel hasil. Ini membantu Anda meningkatkan performa dan throughput kueri.