All Products
Search
Document Center

Tablestore:Contoh kueri SQL

Last Updated:Sep 10, 2026

Setelah membuat tabel pemetaan untuk analytical store, Anda dapat menggunakan pernyataan SQL untuk mengkueri dan menganalisis data deret waktu. Topik ini menjelaskan contoh penggunaan pernyataan SQL untuk mengkueri data di analytical store.

Skenario contoh

Sebuah pabrikan memiliki 100.000 perangkat, masing-masing menghasilkan sekelompok data pemantauan CPU setiap dua menit. Untuk mempermudah manajemen dan analisis status perangkat, pabrikan tersebut menyimpan data pemantauan yang dikumpulkan di cloud guna mengurangi biaya operasional serta memantau operasi perangkat melalui analisis statusnya.

Dalam skenario ini, Anda dapat memanfaatkan fitur kueri SQL untuk mengkueri dan menganalisis data deret waktu secara cepat. Asumsikan data pemantauan perangkat disimpan dalam tabel deret waktu Tablestore bernama device, dan tabel pemetaan yang dibuat untuk tabel deret waktu tersebut bernama `device::cpu`. Gambar berikut menunjukkan skema tabel pemetaan yang dibuat untuk tabel deret waktu tersebut.

image.png

Langkah 1: Membuat tabel pemetaan untuk analytical store

Buat tabel pemetaan dalam model multi-value untuk tabel deret waktu menggunakan pernyataan CREATE TABLE. Untuk informasi selengkapnya, lihat Tabel pemetaan untuk tabel deret waktu dalam SQL.

Sintaks

Catatan

Bidang _m_name, _data_source, _tags, dan _time merupakan konfigurasi tetap. Pertahankan konfigurasi ini tanpa modifikasi.

CREATE TABLE table_name (
  `_m_name` VARCHAR(1024), 
  `_data_source` VARCHAR(1024), 
  `_tags` VARCHAR(1024), 
  `_time` BIGINT(20),
  `column_name ` data_type, 
  ......
  `user_column_namen ` data_type,
  PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`))ENGINE=AnalyticalStore

Parameter

Parameter

Deskripsi

table_name

Nama tabel pemetaan, yang digunakan untuk mengidentifikasi tabel pemetaan tersebut. Formatnya adalah time_series_table_name::mapping_table_identifier. time_series_table_name harus sama dengan nama tabel deret waktu yang sebenarnya. Anda harus menentukan mapping_table_identifier sesuai kebutuhan bisnis Anda.

column_name

Nama kolom. Nama kolom dalam SQL harus ekuivalen dengan nama kolom dalam tabel Tablestore. Misalnya, jika nama kolom dalam tabel Tablestore adalah Aa, maka nama kolom dalam SQL harus berupa Aa, AA, aA, atau aa.

data_type

Tipe data kolom, seperti BIGINT, DOUBLE, atau BOOL.

Tipe data kolom dalam SQL harus sesuai dengan tipe data kolom dalam tabel Tablestore. Untuk informasi selengkapnya tentang pemetaan tipe data, lihat Pemetaan tipe data dalam SQL.

ENGINE

Mesin eksekusi yang digunakan saat Anda menggunakan tabel pemetaan untuk mengkueri data.

  • Jika parameter ini diatur ke AnalyticalStore, mesin analytical store akan digunakan.

  • Jika parameter ini tidak dikonfigurasi, mesin analytical store tidak digunakan.

Contoh

Buat tabel pemetaan di model multi-nilai bernama `device::cpu` untuk tabel deret waktu perangkat.

CREATE TABLE `device::cpu` 
(`_m_name` VARCHAR(1024),
 `_data_source` VARCHAR(1024),
 `_tags` VARCHAR(1024),
 `_time` BIGINT(20), 
 `usage_user` BIGINT(20), 
 `usage_system` BIGINT(20),  
 `usage_idle` BIGINT(20), 
 `usage_nice` BIGINT(20), 
 `usage_iowait` BIGINT(20), 
 `usage_irq` BIGINT(20), 
 `usage_softirq` BIGINT(20), 
 `usage_steal` BIGINT(20),
 `usage_guest` BIGINT(20), 
 `usage_guest_nice` BIGINT(20),
 `one_hour_stamp` BIGINT(20),
 `one_minute_stamp` BIGINT(20),
 PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`))  ENGINE=AnalyticStore;

Langkah 2: Mengkueri data dengan mengeksekusi pernyataan SQL

Setelah membuat tabel pemetaan untuk analytical store, Anda dapat mengeksekusi pernyataan SELECT untuk mengkueri data di analytical store. Terdapat latensi sinkronisasi saat data disinkronkan dari tabel deret waktu ke analytical store. Oleh karena itu, saat mengkueri data terbaru, beberapa data mungkin belum tersinkronisasi ke analytical store.

Sintaks

Catatan

Prioritas eksekusi klausa dalam pernyataan SELECT adalah WHERE > GROUP BY > ORDER BY > LIMIT dan OFFSET.

SELECT
 select_expr [, select_expr] ...
 [FROM table_references]
 [WHERE where_condition]
 [GROUP BY groupby_condition]
 [ORDER BY order_condition]
 [LIMIT {[offset,] row_count | row_count OFFSET offset}]

Parameter

Parameter

Wajib

Deskripsi

select_expr

Ya

Nama kolom atau ekspresi kolom dalam format column_name[, column_name][, column_exp],....

Anda dapat menggunakan ekspresi kolom untuk menentukan kolom yang ingin dikueri. Saat menggunakan ekspresi kolom, Anda harus mematuhi aturan berikut:

  • Anda dapat menggunakan karakter wildcard asterisk (*) untuk mengkueri semua kolom. Anda juga dapat menggunakan klausa WHERE untuk menentukan kondisi kueri.

  • Anda dapat menggunakan nama kolom untuk menentukan kolom yang ingin dikueri.

  • Anda dapat menggunakan fungsi agregat untuk mengumpulkan statistik dan melakukan analisis.

  • Anda dapat menggunakan fungsi waktu untuk melakukan pengelompokan berdasarkan waktu.

table_references

Ya

Nama tabel pemetaan yang dibuat untuk tabel deret waktu.

where_condition

Tidak

Klausa WHERE, yang dapat digunakan dengan berbagai kondisi untuk mengimplementasikan fitur tertentu. Anda dapat menggunakan klausa WHERE dengan operator relasional dalam format column_name operator value [AND | OR] [column_name operator value] untuk mengkueri data yang memenuhi kondisi tertentu.

Saat menggunakan where_condition, Anda harus mematuhi aturan berikut:

  • Anda dapat menggunakan ekspresi sederhana yang dibangun dengan operator aritmetika dan operator relasional.

  • Anda dapat menggunakan ekspresi gabungan yang dibangun dengan operator logika.

  • Anda dapat menggunakan fungsi waktu dengan kolom _time dalam tabel deret waktu untuk memilih rentang waktu.

  • Anda dapat menggunakan fungsi deret waktu dengan kolom _tags dalam tabel deret waktu untuk mengkueri data dengan nilai tag tertentu.

groupby_condition

Tidak

Klausa GROUP BY untuk kueri berkelompok, yang dapat digunakan bersama fungsi deret waktu.

Saat menggunakan groupby_condition, perhatikan hal-hal berikut:

  • Anda dapat mengelompokkan data berdasarkan bidang.

  • Anda dapat menggunakan fungsi deret waktu untuk mengelompokkan data berdasarkan waktu.

order_condition

Tidak

Klausa ORDER BY untuk pengurutan dalam format column_name [ASC | DESC][,column_name [ASC | DESC],...].

  • Anda dapat menggunakan ASC atau DESC untuk menentukan metode pengurutan. Metode pengurutan default adalah ascending (ASC).

  • Anda dapat menentukan beberapa bidang untuk pengurutan.

  • Dalam kebanyakan kasus, order_condition digunakan bersama klausa LIMIT untuk menentukan jumlah maksimum baris yang dapat dikembalikan.

row_count

Tidak

Jumlah maksimum baris yang dikembalikan untuk kueri ini.

offset

Tidak

Offset data untuk kueri ini. Offset default adalah 0.

Contoh

  • Contoh 1: Kueri nilai maksimum kolom usage_irq dan nilai maksimum kolom usage_softirq untuk semua perangkat per hari dalam rentang waktu dari 2023-01-05 05:14:00 hingga 2023-01-07 09:14:00.

    Penting

    Zona waktu untuk unix_timestamp_micros("2023-01-05 05:14:00.000000") adalah zona waktu sistem (untuk Tiongkok, yaitu waktu Beijing UTC+8).

    SELECT time_bin(_time,"1day"), max(usage_irq),max(usage_softirq) 
    FROM `device::cpu` 
    WHERE _time > unix_timestamp_micros("2023-01-05 05:14:00.000000") 
    AND _time < unix_timestamp_micros("2023-01-07 09:14:00.000000") 
    GROUP BY 1 ORDER BY 1;
  • Contoh 2: Kueri rata-rata semua nilai dalam kolom usage_nice untuk semua periode waktu pada perangkat dengan host_50625 dan arsitektur CPU x64.

    SELECT avg(usage_nice) 
    FROM `device::cpu` 
    WHERE _data_source = "host_50625" 
    AND tag_value_at(_tags,"arch") = "x64";
  • Contoh 3: Kueri jumlah baris data, rata-rata semua nilai dalam kolom usage_user, dan rata-rata semua nilai dalam kolom usage_system untuk semua perangkat dalam rentang waktu dari 2023-01-05 05:14:00 hingga 2023-01-07 09:14:00.

    SELECT count(*),avg(usage_idle),avg(usage_system) 
    FROM `device::cpu` 
    WHERE _time > unix_timestamp_micros("2023-01-05 05:14:00.000000") 
    AND _time < unix_timestamp_micros("2023-01-07 09:14:00.000000");
  • Contoh 4: Kelompokkan data CPU berdasarkan minggu, lalu kelompokkan setiap kelompok berdasarkan jam untuk menghitung deviasi standar nilai dalam kolom usage_user di setiap kelompok.

    SELECT week(from_unixtime_micros(_time)) as week,time_bin(_time,"1h"), stddev(usage_user) 
    FROM `device::cpu` 
    GROUP BY 1,2 ORDER BY 1,2;
  • Contoh 5: Kueri nilai kolom usage_user, usage_system, dan usage_nice pada titik terakhir (lastpoint) setiap dua jam untuk semua perangkat dengan host_50625 dalam rentang waktu dari 2023-01-05 05:14:00 hingga 2023-01-07 09:14:00.

    SELECT time_bin(_time,"2h"), max_by(usage_user,_time),
    max_by(usage_system,_time),max_by(usage_nice,_time) 
    FROM `device::cpu` 
    WHERE _time > unix_timestamp_micros("2023-01-05 05:14:00.000000") 
    AND _time < unix_timestamp_micros("2023-01-07 09:14:00.000000")
    AND _data_source = 'host_50625'
    GROUP BY 1 ORDER BY 1;
  • Contoh 6: Tampilkan waktu, bulan, hari dalam seminggu, jam, menit, detik, dan mikrodetik saat nilai kolom usage_user adalah 100 dalam rentang waktu dari 2023-01-05 05:14:00 hingga 2023-01-07 09:14:00.

    SELECT from_unixtime_micros(_time) as time, 
    monthname(from_unixtime_micros(_time)) as monthname,
    dayname(from_unixtime_micros(_time)) as dayname,
    hour(from_unixtime_micros(_time)) as hour,
    minute(from_unixtime_micros(_time)) as minute,
    second(from_unixtime_micros(_time)) as second,
    microsecond(from_unixtime_micros(_time)) as microsecond 
    FROM `device::cpu` 
    WHERE _time > unix_timestamp_micros("2023-01-05 05:14:00.000000") 
    AND _time < unix_timestamp_micros("2023-01-07 09:14:00.000000") 
    AND usage_user = 100 LIMIT 100;