All Products
Search
Document Center

Tablestore:Contoh kueri SQL

Last Updated:Jul 02, 2025

Setelah membuat tabel pemetaan untuk penyimpanan analitik, Anda dapat menggunakan pernyataan SQL untuk mengkueri dan menganalisis data deret waktu. Topik ini memberikan contoh penggunaan pernyataan SQL untuk mengkueri data dalam penyimpanan analitik.

Skenario sampel

Sebuah pabrikan memiliki 100.000 perangkat, masing-masing menghasilkan sekelompok data pemantauan CPU setiap dua menit. Untuk memudahkan pengelolaan dan analisis status perangkat, pabrikan menyimpan data pemantauan perangkat yang dikumpulkan di cloud guna mengurangi biaya bisnis serta memantau operasi perangkat dengan menganalisis statusnya.

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

image.png

Langkah 1: Buat tabel pemetaan untuk penyimpanan analitik

Buat tabel pemetaan dalam model multi-nilai untuk tabel deret waktu menggunakan pernyataan CREATE TABLE. Untuk informasi lebih lanjut, lihat Tabel Pemetaan untuk Tabel Deret Waktu dalam SQL.

Sintaksis

Catatan

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

CREATE TABLE nama_tabel (
  `_m_name` VARCHAR(1024), 
  `_data_source` VARCHAR(1024), 
  `_tags` VARCHAR(1024), 
  `_time` BIGINT(20),
  `nama_kolom ` tipe_data, 
  ......
  `user_column_namen ` tipe_data,
  PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`))ENGINE=AnalyticalStore

Parameter

Parameter

Deskripsi

nama_tabel

Nama tabel pemetaan, yang digunakan untuk mengidentifikasi tabel pemetaan. Formatnya adalah nama_tabel_deret_waktu::pengenal_tabel_pemetaan. nama_tabel_deret_waktu harus sama dengan nama tabel deret waktu aktual. Anda harus menentukan pengenal_tabel_pemetaan berdasarkan kebutuhan bisnis Anda.

nama_kolom

Nama kolom. Nama kolom dalam SQL harus setara dengan nama kolom dalam tabel Tablestore. Sebagai contoh, jika nama kolom dalam tabel Tablestore adalah Aa, nama kolom dalam SQL harus Aa, AA, aA, atau aa.

tipe_data

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

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

ENGINE

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

  • Ketika parameter ini diatur ke AnalyticalStore, mesin penyimpanan analitik digunakan.

  • Ketika parameter ini tidak dikonfigurasi, mesin penyimpanan analitik tidak digunakan.

Contoh

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

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: Kueri data dengan mengeksekusi pernyataan SQL

Setelah membuat tabel pemetaan untuk penyimpanan analitik, Anda dapat menjalankan pernyataan SELECT untuk mengkueri data dalam penyimpanan analitik. Latensi sinkronisasi terjadi ketika data disinkronkan dari tabel deret waktu ke penyimpanan analitik. Saat mengkueri data terbaru, beberapa data mungkin belum disinkronkan ke penyimpanan analitik.

Sintaksis

Catatan

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

SELECT
 select_expr [, select_expr] ...
 [FROM referensi_tabel]
 [WHERE kondisi_where]
 [GROUP BY kondisi_groupby]
 [ORDER BY kondisi_order]
 [LIMIT {[offset,] jumlah_baris | jumlah_baris OFFSET offset}]

Parameter

Parameter

Wajib

Deskripsi

select_expr

Ya

Nama kolom atau ekspresi kolom dalam format nama_kolom[, nama_kolom][, ekspresi_kolom],....

Anda dapat menggunakan ekspresi kolom untuk menentukan kolom yang ingin Anda kueri. 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 Anda kueri.

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

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

referensi_tabel

Ya

Nama tabel pemetaan yang dibuat untuk tabel deret waktu.

kondisi_where

Tidak

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

Saat menggunakan kondisi_where, Anda harus mematuhi aturan berikut:

  • Anda dapat menggunakan ekspresi sederhana yang dibangun dengan operator aritmatika 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.

kondisi_groupby

Tidak

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

Saat menggunakan kondisi_groupby, perhatikan hal-hal berikut:

  • Anda dapat mengelompokkan data berdasarkan bidang.

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

kondisi_order

Tidak

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

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

  • Anda dapat menentukan beberapa bidang untuk pengurutan.

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

jumlah_baris

Tidak

Jumlah maksimum baris yang akan 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 unix_timestamp_micros("2023-01-05 05:14:00.000000") adalah zona waktu sistem (untuk Tiongkok, itu adalah UTC+8 waktu Beijing).

    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 untuk 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 per minggu, lalu kelompokkan setiap kelompok per 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 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: Keluarkan waktu, bulan, hari dalam seminggu, jam, menit, detik, dan mikrodetik ketika 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;