このトピックでは、Simple Log Service SDK for C ++ を使用して専用SQL機能を使用する方法について説明します。
前提条件
RAM (Resource Access Management) ユーザーが作成され、必要な権限がRAMユーザーに付与されます。 詳細については、「RAMユーザーの作成とRAMユーザーへの権限付与」をご参照ください。
ALIBABA_CLOUD_ACCESS_KEY_IDおよびALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数が設定されています。 詳細については、「環境変数の設定」をご参照ください。
重要Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。
プロジェクトコードにAccessKey IDまたはAccessKey secretを保存しないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
最新バージョンのSimple Log Service SDK for C ++ がインストールされています。 詳細については、「Alibaba Cloud Simple Log Service SDK For C ++ 」をご参照ください。
背景情報
Simple Log Serviceは、SQL分析機能を強化する専用SQL機能を提供します。 この機能を使用して、数千億行のデータを処理できます。 詳細については、「Dedicated SQLの有効化」をご参照ください。
Simple Log Serviceは、ExecuteLogStoreSqlおよびExecuteProjectSql操作を提供します。 これらの操作を呼び出して、Dedicated SQL機能を効率的に使用できます。
ExecuteLogStoreSql: 指定されたLogstoreで専用SQL機能を使用します。 この操作はSQL-92構文をサポートしています。 クエリステートメントは
Searchステートメント | Analyticステートメント
の形式であり、分析ステートメントは標準のSQL-92構文に従います。ExecuteProjectSql: 指定したプロジェクトで専用SQL機能を使用します。 この操作はSQL-92構文をサポートしています。 SQL文のWHERE句でフィルター条件と時間範囲を指定する必要があります。
データを分析する前にデータをフィルタリングする場合は、ExecuteLogStoreSql操作を呼び出して、Searchステートメント | Analyticステートメント
形式のクエリステートメントを指定することを推奨します。 これにより、分析効率が向上する。
サンプルコード
次のサンプルコードは、Dedicated SQL機能の使用方法を示しています。 詳細については、「Alibaba Cloud Simple Log Service SDK For C ++ 」をご参照ください。
#include <cstdlib>
// The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
std::string endpoint = "cn-hangzhou.log.aliyuncs.com";
// Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
string accessId = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
string accessKey = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// The name of the project.
std::string project = "your_project_name";
// The name of the Logstore.
std::string logStore = "your_logstore";
// Create a Simple Log Service client.
LOGClient client(endpoint, accessId, accessKey);
// Execute an SQL statement 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 statistics of the analysis result.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // The number of rows of log data that is returned in the analysis result.
<< "processed rows:" << logsResponse.processedRows << std::endl // The number of rows of log data that is processed.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // The time that is required to execute the SQL statement.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // The CPU time that is consumed to execute the SQL statement after the Dedicated SQL feature is enabled. Unit: seconds. You are charged for the CPU time that is consumed when you use the Dedicated SQL feature to perform query and analysis operations. For more information, see Billable items.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled.
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;
}
// Execute an SQL statement 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 statistics of the analysis result.
std::cout << "Returned sql result:" << std::endl
<< "count:" << logsResponse.result.logline << std::endl // The number of rows of log data that is returned in the analysis result.
<< "processed rows:" << logsResponse.processedRows << std::endl // The number of rows of log data that is processed.
<< "elapsed milli:" << logsResponse.elapsedMilli << std::endl // The time that is required to execute the SQL statement.
<< "cpu sec:" << logsResponse.cpuSec << std::endl // The CPU time that is consumed to execute the SQL statement after the Dedicated SQL feature is enabled. Unit: seconds. You are charged for the CPU time that is consumed when you use the Dedicated SQL feature to perform query and analysis operations. For more information, see Billable items.
<< "cpu core:" << logsResponse.cpuCore << std::endl; // The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled.
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操作
ExecuteLogStoreSql操作を呼び出して、Dedicated SQL機能を使用できます。 リクエストは、
LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore, from, to, query, powerSql)
形式である必要があります。 次の表に、リクエストパラメーターを示します。パラメーター
データ型
必須
例
説明
project
String
課金されます
非該当
プロジェクトの名前。
Simple Log Serviceクライアントを作成するときは、projectパラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。
logStore
String
課金されます
非該当
ログストアの名前
Simple Log Serviceクライアントを作成するときは、logStoreパラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。
から
Long
課金されます
1627268185
照会する期間の開始時刻です。 値は、UNIXの時刻形式に続くタイムスタンプです。 1970年1月1日木曜日のUTC 00:00:00から経過した秒数です。
に
Long
課金されます
1627269085
照会する期間の終了時刻を設定します。 値は、UNIXの時刻形式に続くタイムスタンプです。 1970年1月1日木曜日のUTC 00:00:00から経過した秒数です。
query
String
課金されます
"* | SELECT count(*)"
クエリ 文。 形式:
Search statement | Analytic statement
詳細については、「構文」をご参照ください。デフォルトでは、Simple Log Serviceは100行のデータを返します。 LIMIT句を使用して、返すデータの行数を指定できます。 詳細は、「LIMIT句」をご参照ください。
powerSql
ブール値
課金されません
true
Dedicated SQLを使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。 有効な値:
true: 専用SQLを使用します。
false (デフォルト): 標準SQLを使用します。
ExecuteProjectSql操作
ExecuteProjectSql操作を呼び出して、Dedicated SQL機能を使用できます。 リクエストは、
ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project, query, powerSql)
形式である必要があります。 次の表に、リクエストパラメーターを示します。パラメーター
データ型
必須
例
説明
project
String
課金されます
非該当
プロジェクトの名前。
Simple Log Serviceクライアントを作成するときは、projectパラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。
query
String
課金されます
"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"
WHERE句でフィルター条件と時間範囲を指定する必要があるSQL文。
デフォルトでは、Simple Log Serviceは100行のデータを返します。 LIMIT句を使用して、返すデータの行数を指定できます。 詳細は、「LIMIT句」をご参照ください。
powerSql
ブール値
課金されません
true
Dedicated SQLを使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。 有効な値:
true: 専用SQLを使用します。
false (デフォルト): 標準SQLを使用します。