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

Simple Log Service:C++ SDK を使用した専用 SQL の利用

最終更新日:Apr 10, 2026

このトピックでは、Simple Log Service の C++ SDK を使用して専用 SQL 機能を利用する方法について説明します。

前提条件

  • RAM ユーザーを作成し、必要な権限を付与します。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。

  • `ALIBABA_CLOUD_ACCESS_KEY_ID` および `ALIBABA_CLOUD_ACCESS_KEY_SECRET` 環境変数を設定します。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。

    重要

    Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作にアクセスできます。API 呼び出しや日常の運用保守には、RAM ユーザーの AccessKey ペアを使用することを推奨します。

    セキュリティリスクを防ぐため、AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。AccessKey ペアが漏洩すると、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。

  • 最新バージョンの Simple Log Service C++ SDK がインストールされていること。詳細については、「Alibaba Cloud Simple Log Service SDK for C++」をご参照ください。

背景情報

Simple Log Service は、SQL 分析機能を強化するために専用 SQL 機能を提供します。この機能を使用して、数千億行のデータを処理できます。詳細については、「専用 SQL の有効化」をご参照ください。

Simple Log Service は、ExecuteLogStoreSql および ExecuteProjectSql 操作を提供します。これらの操作を呼び出すことで、専用 SQL 機能を効率的に使用できます。

  • ExecuteLogStoreSql 操作:指定された Logstore で専用 SQL クエリを実行します。この操作は、標準 SQL-92 と互換性のあるクエリ・分析構文をサポートします。フォーマットは 検索文|分析文 で、分析文は標準 SQL-92 構文に従います。

  • ExecuteProjectSql 操作:指定されたプロジェクトで専用 SQL 機能を使用します。この操作は SQL-92 構文をサポートします。SQL ステートメントの WHERE 句でフィルター条件と時間範囲を指定する必要があります。

説明

分析前にデータをフィルタリングするには、パフォーマンス向上のため、ExecuteLogStoreSql 操作で 検索文|分析文 構文を使用してください。

サンプルコード

次のサンプルコードは、専用 SQL 機能の使用方法を示しています。詳細については、「Alibaba Cloud Simple Log Service SDK for C++」をご参照ください。

#include <cstdlib>

// Simple Log Service のエンドポイント。この例では、中国 (杭州) を使用します。実際のエンドポイントに置き換えてください。
std::string endpoint = "cn-hangzhou.log.aliyuncs.com";
// この例では、環境変数から AccessKey ID と AccessKey Secret を取得します。
string accessId = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
string accessKey = (string)getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// プロジェクト名。
std::string project = "your_project_name";
// Logstore 名。
std::string logStore = "your_logstore";

// Simple Log Service クライアントを作成します。
LOGClient client(endpoint, accessId, accessKey);

// 指定された Logstore で SQL 分析を実行します。
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);
    // 分析結果の統計情報を出力します。
    std::cout << "Returned sql result:" << std::endl
              << "count:" << logsResponse.result.logline << std::endl          // 結果の行数。
              << "processed rows:" << logsResponse.processedRows << std::endl  // 処理されたログ行数。
              << "elapsed milli:" << logsResponse.elapsedMilli << std::endl    // SQL 分析の実行時間。
              << "cpu sec:" << logsResponse.cpuSec << std::endl                // 専用 SQL 分析の CPU 時間 (秒)。専用 SQL はこの値に基づいて課金されます。詳細については、課金項目をご参照ください。
              << "cpu core:" << logsResponse.cpuCore << std::endl;             // 専用 SQL を有効にした SQL 分析で使用された CPU コア数。
    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;
}

// 指定されたプロジェクトで SQL 分析を実行します。
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);
    
    // 分析結果の統計情報を出力します。
    std::cout << "Returned sql result:" << std::endl       
              << "count:" << logsResponse.result.logline << std::endl          // 結果の行数。
              << "processed rows:" << logsResponse.processedRows << std::endl  // 処理されたログ行数。
              << "elapsed milli:" << logsResponse.elapsedMilli << std::endl    // SQL 分析の実行時間。
              << "cpu sec:" << logsResponse.cpuSec << std::endl                // 専用 SQL 分析の CPU 時間 (秒)。専用 SQL はこの値に基づいて課金されます。詳細については、課金項目をご参照ください。
              << "cpu core:" << logsResponse.cpuCore << std::endl;             // 専用 SQL を有効にした SQL 分析で使用された CPU コア数。
    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 操作は、LogStoreSqlResponse logsResponse = client.ExecuteLogStoreSql(project, logStore, from, to, query, powerSql) の形式で呼び出します。パラメーターは次の表のとおりです。

    パラメーター

    タイプ

    必須

    説明

    project

    String

    はい

    N/A

    プロジェクト名。

    Simple Log Service クライアントの作成時に project パラメーターの値を指定するため、ここで再度パラメーターを設定する必要はありません。

    logStore

    String

    はい

    N/A

    Logstore 名。

    Simple Log Service クライアントの作成時に logStore パラメーターの値を指定するため、ここで再度パラメーターを設定する必要はありません。

    from

    Long

    はい

    1627268185

    クエリ対象の時間範囲の開始時刻。値は UNIX 時間形式のタイムスタンプです。1970年1月1日 00:00:00 (UTC) からの経過秒数を表します。

    to

    Long

    はい

    1627269085

    クエリ対象の時間範囲の終了時刻。値は UNIX 時間形式のタイムスタンプです。1970年1月1日 00:00:00 (UTC) からの経過秒数を表します。

    query

    String

    はい

    "* | SELECT count(*)"

    Simple Log Service のクエリ・分析ステートメント。フォーマットは 検索文|分析文 です。詳細については、「基本構文」をご参照ください。

    デフォルトでは、Simple Log Service は 100 行のデータを返します。LIMIT 句を使用して、返すデータ行数を指定できます。詳細については、「LIMIT 句」をご参照ください。

    powerSql

    Boolean

    いいえ

    true

    専用 SQL を使用するかどうかを指定します。詳細については、「専用 SQL の有効化」をご参照ください。有効な値:

    • true:専用 SQL を使用します。

    • false (デフォルト):標準 SQL を使用します。

  • ExecuteProjectSql 操作

    ExecuteProjectSql 操作は、ProjectSqlResponse logsResponse = client.ExecuteProjectSql(project, query, powerSql) の形式で呼び出します。パラメーターは次の表のとおりです。

    パラメーター

    タイプ

    必須

    説明

    project

    String

    はい

    N/A

    プロジェクト名。

    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"

    SQL ステートメント。WHERE 句でフィルター条件と時間範囲を指定する必要があります。

    デフォルトでは、Simple Log Service は 100 行のデータを返します。LIMIT 句を使用して、返すデータ行数を指定できます。詳細については、「LIMIT 句」をご参照ください。

    powerSql

    Boolean

    いいえ

    true

    専用 SQL を使用するかどうかを指定します。詳細については、「専用 SQL の有効化」をご参照ください。有効な値:

    • true:専用 SQL を使用します。

    • false (デフォルト):標準 SQL を使用します。