すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Simple Log Service SDK for C ++ を使用して専用SQLを使用する

最終更新日:Sep 05, 2024

このトピックでは、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を使用します。