Ejecute consultas Dedicated SQL sobre datos de registro mediante el SDK de Simple Log Service para C++. Dedicated SQL admite el procesamiento de cientos de miles de millones de filas de datos.
Requisitos previos
Se creó un usuario de RAM y se le otorgaron los permisos obligatorios. Para obtener más información, consulte Create a RAM user and grant permissions.
-
Las variables de entorno
ALIBABA_CLOUD_ACCESS_KEY_IDyALIBABA_CLOUD_ACCESS_KEY_SECRETestán configuradas. Para obtener más información, consulte Configure environment variables on Linux, macOS, and Windows.ImportanteEl par de AccessKey de una cuenta de Alibaba Cloud tiene acceso a todas las operaciones de la API. Utilice el par de AccessKey de un usuario de RAM para las llamadas a la API o para tareas rutinarias de operación y mantenimiento.
No codifique su AccessKey ID ni su AccessKey Secret directamente en el código del proyecto. Un par de AccessKey comprometido pone en riesgo la seguridad de todos los recursos de su cuenta.
Está instalada la versión más reciente del SDK de Simple Log Service para C++. Para obtener más información, consulte SDK de Simple Log Service para C++ de Alibaba Cloud.
Contexto
Dedicated SQL mejora las capacidades de análisis SQL y permite procesar cientos de miles de millones de filas de datos. Para obtener más información, consulte Enable Dedicated SQL.
Simple Log Service proporciona las operaciones ExecuteLogStoreSql y ExecuteProjectSql para Dedicated SQL.
ExecuteLogStoreSql: ejecuta una consulta Dedicated SQL en un logstore específico. Esta operación admite sintaxis de consulta y análisis compatible con SQL-92 estándar. El formato es
search statement|analytic statement, donde la instrucción de análisis sigue la sintaxis estándar de SQL-92.ExecuteProjectSql: ejecuta una consulta Dedicated SQL en un proyecto específico. Esta operación admite la sintaxis SQL-92. Especifique una condición de filtro y un intervalo de tiempo en la cláusula WHERE de la instrucción SQL.
Para filtrar datos antes del análisis, utilice la sintaxis search statement|analytic statement con la operación ExecuteLogStoreSql y obtenga un mejor rendimiento.
Código de ejemplo
A continuación se muestra un código que utiliza la función Dedicated SQL. Para consultar el SDK completo, visite SDK de Simple Log Service para C++ de Alibaba Cloud.
#include <cstdlib>
// Simple Log Service endpoint. Replace with your actual endpoint.
std::string endpoint = "cn-hangzhou.log.aliyuncs.com";
// Retrieve the AccessKey ID and AccessKey Secret from environment variables.
string accessId = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
string accessKey = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Project name.
std::string project = "your_project_name";
// Logstore name.
std::string logStore = "your_logstore";
// Create a Simple Log Service client.
LOGClient client(endpoint, accessId, accessKey);
// Run a SQL query in the specified Logstore.
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);
// Print the query result statistics.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // Number of rows in the result.
<< "processed rows:" << logsResponse.processedRows << std::endl // Number of log rows processed.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // SQL query execution duration.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // CPU time (seconds) for Dedicated SQL. Billing is based on this value. For more information, see billable items.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // Number of CPU cores used for the Dedicated SQL query.
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 << "error code :" << e.GetErrorCode() << std::endl;
std::cout << "error message :" << e.GetMessage() << std::endl;
throw e;
}
// Run a SQL query in the specified project.
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);
// Print the query result statistics.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // Number of rows in the result.
<< "processed rows:" << logsResponse.processedRows << std::endl // Number of log rows processed.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // SQL query execution duration.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // CPU time (seconds) for Dedicated SQL. Billing is based on this value. For more information, see billable items.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // Number of CPU cores used for the Dedicated SQL query.
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 << "error code :" << e.GetErrorCode() << std::endl;
std::cout << "error message :" << e.GetMessage() << std::endl;
throw e;
}
-
ExecuteLogStoreSql
Llame a la operación ExecuteLogStoreSql con el siguiente formato:
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore, from, to, query, powerSql). En la siguiente tabla se describen los parámetros.Parámetro
Tipo
Obligatorio
Ejemplo
Descripción
project
String
Sí
N/A
Nombre del proyecto.
Ya se definió al crear el cliente. No se requiere configuración adicional.
logStore
String
Sí
N/A
Nombre del logstore.
Ya se definió al crear el cliente. No se requiere configuración adicional.
from
Long
Sí
1627268185
Inicio del intervalo de tiempo de la consulta. El valor es una marca de tiempo UNIX en segundos.
to
Long
Sí
1627269085
Fin del intervalo de tiempo de la consulta. El valor es una marca de tiempo UNIX en segundos.
query
String
Sí
" | SELECT count()"Instrucción de consulta y análisis para Simple Log Service, con el formato
search statement|analytic statement. Para obtener más información, consulte Basic syntax.De forma predeterminada, Simple Log Service devuelve 100 filas de datos. Para devolver más filas, agregue una cláusula LIMIT. Para obtener más información, consulte LIMIT clause.
powerSql
Boolean
No
true
Indica si se debe usar Dedicated SQL. Para obtener más información, consulte Enable Dedicated SQL. Valores válidos:
-
true: usa Dedicated SQL.
-
false (predeterminado): usa Standard SQL.
-
-
ExecuteProjectSql
Llame a la operación ExecuteProjectSql con el siguiente formato:
ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project, query, powerSql). En la siguiente tabla se describen los parámetros.Parámetro
Tipo
Obligatorio
Ejemplo
Descripción
project
String
Sí
N/A
Nombre del proyecto.
Ya se definió al crear el cliente. No se requiere configuración adicional.
query
String
Sí
"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"Instrucción SQL-92 estándar. Especifique una condición de filtro y un intervalo de tiempo en la cláusula WHERE.
De forma predeterminada, Simple Log Service devuelve 100 filas de datos. Para devolver más filas, agregue una cláusula LIMIT. Para obtener más información, consulte LIMIT clause.
powerSql
Boolean
No
true
Indica si se debe usar Dedicated SQL. Para obtener más información, consulte Enable Dedicated SQL. Valores válidos:
-
true: usa Dedicated SQL.
-
false (predeterminado): usa Standard SQL.
-