Topik ini menjelaskan cara menggunakan Simple Log Service SDK untuk C++ untuk memanfaatkan fitur SQL Dedicated.
Prasyarat
Pengguna Resource Access Management (RAM) telah dibuat, dan izin yang diperlukan telah diberikan kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Buat Pengguna RAM dan Berikan Izin kepada Pengguna RAM.
Variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
PentingPasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Kami menyarankan Anda menggunakan pasangan AccessKey dari pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
Kami menyarankan Anda untuk tidak menyimpan ID AccessKey atau Rahasia AccessKey dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor, dan keamanan semua sumber daya dalam akun Anda mungkin terganggu.
Simple Log Service SDK untuk C++ versi terbaru telah diinstal. Untuk informasi lebih lanjut, lihat Alibaba Cloud Simple Log Service SDK untuk C++.
Informasi latar belakang
Simple Log Service menyediakan fitur SQL Dedicated untuk meningkatkan kemampuan analisis SQL. Anda dapat menggunakan fitur ini untuk memproses ratusan miliar baris data. Untuk informasi lebih lanjut, lihat Aktifkan SQL Dedicated.
Simple Log Service menyediakan operasi ExecuteLogStoreSql dan ExecuteProjectSql. Anda dapat memanggil operasi ini untuk menggunakan fitur SQL Dedicated secara efisien.
ExecuteLogStoreSql: menggunakan fitur SQL Dedicated di Logstore tertentu. Operasi ini mendukung sintaksis SQL-92. Pernyataan kueri berada dalam format
Pernyataan Pencarian|Pernyataan Analitik, dan pernyataan analitik mengikuti sintaksis SQL-92 standar.ExecuteProjectSql: menggunakan fitur SQL Dedicated di proyek tertentu. Operasi ini mendukung sintaksis SQL-92. Anda harus menentukan kondisi filter dan rentang waktu dalam klausa WHERE dari pernyataan SQL.
Jika Anda ingin menyaring data sebelum menganalisis data, kami sarankan Anda memanggil operasi ExecuteLogStoreSql dan menentukan pernyataan kueri dalam format Pernyataan Pencarian|Pernyataan Analitik. Ini meningkatkan efisiensi analisis.
Contoh kode
Berikut adalah contoh kode yang menunjukkan cara menggunakan fitur SQL Dedicated. Untuk informasi lebih lanjut, lihat Alibaba Cloud Simple Log Service SDK untuk C++.
#include <cstdlib>
// Titik akhir Simple Log Service. Dalam contoh ini, titik akhir Simple Log Service untuk wilayah China (Hangzhou) digunakan. Ganti nilai parameter dengan titik akhir sebenarnya.
std::string endpoint = "cn-hangzhou.log.aliyuncs.com";
// Konfigurasikan variabel lingkungan. Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
string accessId = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
string accessKey = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Nama proyek.
std::string project = "nama_proyek_anda";
// Nama Logstore.
std::string logStore = "your_logstore";
// Buat klien Simple Log Service.
LOGClient client(endpoint, accessId, accessKey);
// Jalankan pernyataan SQL di Logstore yang ditentukan.
try
{
std::string sql = "* | select count(1)";
int from = time(NULL) - 600;
int to = from + 600;
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore,
1627268185,1627269085,"* | SELECT count(*)",true);
// Cetak statistik hasil analisis.
std::cout << "Hasil sql yang dikembalikan:" << std::endl
<< "jumlah:" << logsResponse.result.logline << std::endl // Jumlah baris data log yang dikembalikan dalam hasil analisis.
<< "baris diproses:" << logsResponse.processedRows << std::endl // Jumlah baris data log yang diproses.
<< "waktu habis (ms):" << logsResponse.elapsedMilli << std::endl // Waktu yang diperlukan untuk menjalankan pernyataan SQL.
<< "cpu detik:" << logsResponse.cpuSec << std::endl // Waktu CPU yang dikonsumsi untuk menjalankan pernyataan SQL setelah fitur SQL Dedicated diaktifkan. Unit: detik. Anda akan dikenakan biaya atas waktu CPU yang dikonsumsi saat menggunakan fitur SQL Dedicated untuk melakukan operasi kueri dan analisis. Untuk informasi lebih lanjut, lihat Item yang dapat ditagih.
<< "inti cpu:" << logsResponse.cpuCore << std::endl; // Jumlah inti CPU yang digunakan untuk menjalankan pernyataan SQL setelah fitur SQL Dedicated diaktifkan.
for (std::vector<LogItem>::const_iterator itr = logsResponse.result.logdatas.begin();
itr != logsResponse.result.logdatas.end(); ++itr)
{
const LogItem &item = *itr;
for (std::vector<std::pair<std::string, std::string>>::const_iterator itr_data = item.data.begin();
itr_data != item.data.end(); ++itr_data)
{
std::cout << itr_data->first << ":" << itr_data->second;
}
}
}
catch (LOGException &e)
{
std::cout << "kode kesalahan :" << e.GetErrorCode() << std::endl;
std::cout << "pesan kesalahan :" << e.GetMessage() << std::endl;
throw e;
}
// Jalankan pernyataan SQL di proyek yang ditentukan.
try
{
int now = time(NULL);
std::string sql = "select count(1) as cnt from xxx where __time__ > " + to_string(now);
ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project,"select avg(latency),max(latency) ,count(1) as c from sample-logstore where status>200 and __time__>=1500975424 and __time__ < 1501035044 GROUP BY method ORDER BY c",true);
// Cetak statistik hasil analisis.
std::cout << "Hasil sql yang dikembalikan:" << std::endl
<< "jumlah:" << logsResponse.result.logline << std::endl // Jumlah baris data log yang dikembalikan dalam hasil analisis.
<< "baris diproses:" << logsResponse.processedRows << std::endl // Jumlah baris data log yang diproses.
<< "waktu habis (ms):" << logsResponse.elapsedMilli << std::endl // Waktu yang diperlukan untuk menjalankan pernyataan SQL.
<< "cpu detik:" << logsResponse.cpuSec << std::endl // Waktu CPU yang dikonsumsi untuk menjalankan pernyataan SQL setelah fitur SQL Dedicated diaktifkan. Unit: detik. Anda akan dikenakan biaya atas waktu CPU yang dikonsumsi saat menggunakan fitur SQL Dedicated untuk melakukan operasi kueri dan analisis. Untuk informasi lebih lanjut, lihat Item yang dapat ditagih.
<< "inti cpu:" << logsResponse.cpuCore << std::endl; // Jumlah inti CPU yang digunakan untuk menjalankan pernyataan SQL setelah fitur SQL Dedicated diaktifkan.
for (std::vector<LogItem>::const_iterator itr = logsResponse.result.logdatas.begin(); itr != logsResponse.result.logdatas.end(); ++itr)
{
const LogItem &item = *itr;
for (std::vector<std::pair<std::string, std::string>>::const_iterator itr_data = item.data.begin();
itr_data != item.data.end(); ++itr_data)
{
std::cout << itr_data->first << ":" << itr_data->second;
}
}
}
catch (LOGException &e)
{
std::cout << "kode kesalahan :" << e.GetErrorCode() << std::endl;
std::cout << "pesan kesalahan :" << e.GetMessage() << std::endl;
throw e;
}Operasi ExecuteLogStoreSql
Anda dapat memanggil operasi ExecuteLogStoreSql untuk menggunakan fitur SQL Dedicated. Permintaan harus dalam format
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore, from, to, query, powerSql). Tabel berikut menjelaskan parameter permintaan.Parameter
Tipe
Diperlukan
Contoh
Deskripsi
project
String
Ya
N/A
Nama proyek.
Saat membuat klien Simple Log Service, Anda harus menentukan nilai untuk parameter project. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
logStore
String
Ya
N/A
Nama Logstore.
Saat membuat klien Simple Log Service, Anda harus menentukan nilai untuk parameter logStore. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
from
Long
Ya
1.627.268.185
Awal rentang waktu untuk kueri. Nilainya adalah timestamp yang mengikuti format waktu UNIX. Ini adalah jumlah detik yang telah berlalu sejak 00:00:00 UTC, Kamis, 1 Januari 1970.
to
Long
Ya
1.627.269.085
Akhir rentang waktu untuk kueri. Nilainya adalah timestamp yang mengikuti format waktu UNIX. Ini adalah jumlah detik yang telah berlalu sejak 00:00:00 UTC, Kamis, 1 Januari 1970.
query
String
Ya
"* | SELECT count(*)"Pernyataan kueri. Format:
Pernyataan Pencarian|Pernyataan Analitik. Untuk informasi lebih lanjut, lihat Sintaksis.Secara default, Simple Log Service mengembalikan 100 baris data. Anda dapat menggunakan klausa LIMIT untuk menentukan jumlah baris data yang akan dikembalikan. Untuk informasi lebih lanjut, lihat Klausa LIMIT.
powerSql
Boolean
Tidak
true
Menentukan apakah akan menggunakan SQL Dedicated. Untuk informasi lebih lanjut, lihat Aktifkan SQL Dedicated. Nilai valid:
true: menggunakan SQL Dedicated.
false (default): menggunakan SQL Standar.
Operasi ExecuteProjectSql
Anda dapat memanggil operasi ExecuteProjectSql untuk menggunakan fitur SQL Dedicated. Permintaan harus dalam format
ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project, query, powerSql). Tabel berikut menjelaskan parameter permintaan.Parameter
Tipe
Diperlukan
Contoh
Deskripsi
project
String
Ya
N/A
Nama proyek.
Saat membuat klien Simple Log Service, Anda harus menentukan nilai untuk parameter project. Oleh karena itu, Anda tidak perlu mengonfigurasi parameter ini lagi.
query
String
Ya
"select avg(latency),max(latency) ,count(1) as c from sample-logstore where status>200 and __time__>=1500975424 and __time__ < 1501035044 GROUP BY method ORDER BY c"Pernyataan SQL di mana kondisi filter dan rentang waktu harus ditentukan dalam klausa WHERE.
Secara default, Simple Log Service mengembalikan 100 baris data. Anda dapat menggunakan klausa LIMIT untuk menentukan jumlah baris data yang akan dikembalikan. Untuk informasi lebih lanjut, lihat Klausa LIMIT.
powerSql
Boolean
Tidak
true
Menentukan apakah akan menggunakan SQL Dedicated. Untuk informasi lebih lanjut, lihat Aktifkan SQL Dedicated. Nilai valid:
true: menggunakan SQL Dedicated.
false (default): menggunakan SQL Standar.