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.

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
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 |
|
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.
|
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
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 Anda dapat menggunakan ekspresi kolom untuk menentukan kolom yang ingin dikueri. Saat menggunakan ekspresi kolom, Anda harus mematuhi aturan berikut:
|
|
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 Saat menggunakan where_condition, Anda harus mematuhi aturan berikut:
|
|
groupby_condition |
Tidak |
Klausa GROUP BY untuk kueri berkelompok, yang dapat digunakan bersama fungsi deret waktu. Saat menggunakan groupby_condition, perhatikan hal-hal berikut:
|
|
order_condition |
Tidak |
Klausa ORDER BY untuk pengurutan dalam format
|
|
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:00hingga2023-01-07 09:14:00.PentingZona waktu untuk
unix_timestamp_micros("2023-01-05 05:14:00.000000")adalah zona waktu sistem (untuk Tiongkok, yaitu waktu BeijingUTC+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:00hingga2023-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:00hingga2023-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:00hingga2023-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;