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.

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
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=AnalyticalStoreParameter
Parameter | Deskripsi |
nama_tabel | Nama tabel pemetaan, yang digunakan untuk mengidentifikasi tabel pemetaan. Formatnya adalah |
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.
|
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
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 Anda dapat menggunakan ekspresi kolom untuk menentukan kolom yang ingin Anda kueri. Saat menggunakan ekspresi kolom, Anda harus mematuhi aturan berikut:
|
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 Saat menggunakan kondisi_where, Anda harus mematuhi aturan berikut:
|
kondisi_groupby | Tidak | Klausa GROUP BY untuk kueri berkelompok, yang dapat digunakan dengan fungsi deret waktu. Saat menggunakan kondisi_groupby, perhatikan hal-hal berikut:
|
kondisi_order | Tidak | Klausa ORDER BY untuk pengurutan dalam format
|
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:00hingga2023-01-07 09:14:00.PentingZona waktu
unix_timestamp_micros("2023-01-05 05:14:00.000000")adalah zona waktu sistem (untuk Tiongkok, itu adalahUTC+8waktu 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: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 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: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: 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: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;