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

Simple Log Service:SQL 拡張

最終更新日:Apr 16, 2025

このトピックでは、SQL 拡張の実装と使用方法の手順について説明します。 このようにして、コア機能を効率的に使用できます。

実装

背景情報

Simple Log Service は、ストレージとコンピューティングを分離します。 ストレージレイヤーはシャードとして抽象化され、データのストレージと管理に使用されます。 コンピューティングレイヤーは SQL として抽象化され、クエリと分析機能を提供します。

Simple Log Service の分析パフォーマンスを向上させるには、ストレージレイヤーとコンピューティングレイヤーの機能を拡張する必要があります。 次のセクションでは、一般的なソリューションとソリューションの比較を示します。

ソリューション 1:シャードを分割する

シャードを手動で分割して、ストレージレイヤーの機能を拡張できます。 このようにして、コンピューティングスループットが向上します。 詳細については、「シャードを分割する」をご参照ください。

制限:

  • このメソッドは、新しく書き込まれたデータに対してのみ有効です。

  • アクティブなシャードに対して課金されます。 詳細については、「請求の説明」をご参照ください。

  • クエリは、同時実行文の最大数とデータ量の影響を受けます。

  • シャードの分割またはマージには、手動操作が必要です。

ソリューション 2:クエリをサブクエリに分割する

クエリをサブクエリに分割し、サブクエリ結果に基づいて二次集約を実行して、最終結果を取得できます。

制限:

  • 二次集約ロジックを維持し、サブクエリ結果を保存する必要があります。 詳細については、「スケジュール済み SQL」をご参照ください。

  • 分析ディメンションの変更により、集約ロジックの再構築が必要になります。

  • データ量が大きすぎると、コンピューティングのボトルネックが依然として存在します。

ソリューション 3:SQL 拡張を有効にする

SQL 拡張を有効にすると、Simple Log Service はデータ量に基づいてストレージとコンピューティングリソースを自動的にスケーリングして、データ分析を高速化します。

比較項目

ソリューション 1

ソリューション 2

ソリューション 3

リソースの隔離

排他的ストレージリソースと共有コンピューティングリソース。

排他的ストレージリソースと共有コンピューティングリソース。

排他的ストレージリソースとエラスティック専用リソースのサポート。

スケーリング

ストレージレイヤースケーリング。

コンピューティングレイヤースケーリング。

ストレージレイヤーとコンピューティングレイヤーの自動スケーリング。

O&M コスト

手動操作が必要です。

クエリはサブクエリに分割されます。

完全自動スケジューリング。

クエリの複雑さ

ネイティブ SQL サポート。

カスタム開発が必要です。

ネイティブ SQL サポート。

前提条件

手順

Simple Log Service では、次の方法に基づいて SQL 拡張を有効にできます。

  • 1 回有効化:1 回有効化方式に基づいて SQL 拡張が有効化されると、現在のログストアのクエリ操作と分析操作のみが SQL 拡張を使用できます。

  • デフォルトで有効:デフォルトで有効方式に基づいて SQL 拡張が有効化されると、アラート関連操作やダッシュボード関連操作など、現在のプロジェクトのすべてのクエリ操作と分析操作で SQL 拡張を使用できます。

コンソール

1 回有効化

  1. Simple Log Service コンソール にログオンします。

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. [ログストレージ] > [ログストア] タブで、管理するログストアをクリックします。

    image

  4. image > [SQL 拡張] を選択します。

    image

デフォルトで有効

  1. Simple Log Service コンソール にログオンします。

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. 项目概览 アイコンをクリックします。

    image.png

  4. [SQL 専用インスタンスの CU] にポインターを移動し、[変更] をクリックします。

    SQL独享版

  5. [SQL 専用インスタンスの CU を変更] パネルで、[デフォルトで有効] をオンにして、[OK] をクリックします。

API

1 回有効化

  • GetLogs (クエリ結果は圧縮されずに直接返されます)

    次のパラメーターのいずれか 1 つだけを構成する必要があります。

    • powerSql: 有効な値:true および false (デフォルト)。 値 true は、現在のクエリで SQL 拡張を使用することを指定します。 値 false は、現在のクエリで標準 SQL を使用することを指定します。

    • query: この例では、* | select count(*) as pv クエリ文が実行されます。 set session parallel_sql=true; を分析文に追加して、SQL 拡張が使用されることを示します。 クエリ文は * | set session parallel_sql=true; select count(*) as pv になります。

  • GetLogsV2 (クエリ結果は圧縮されて返されます)

    次のパラメーターのいずれか 1 つだけを構成する必要があります。

    • powerSql: 有効な値:true および false (デフォルト)。 値 true は、現在のクエリで SQL 拡張を使用することを指定します。 値 false は、現在のクエリで標準 SQL を使用することを指定します。

    • query: この例では、* | select count(*) as pv クエリ文が実行されます。 set session parallel_sql=true; を分析文に追加して、SQL 拡張が使用されることを示します。 クエリ文は * | set session parallel_sql=true; select count(*) as pv になります。

デフォルトで有効

CreateSqlInstance: この操作では、useAsDefault を true に設定して、プロジェクトの SQL 拡張を自動的に有効にします。

SDK

この例では、Java 用 Simple Log Service SDK を使用します。

前提条件

Java 用 Simple Log Service SDK がインストールされていること。 詳細については、「Java 用 Simple Log Service SDK をインストールする」をご参照ください。

1 回有効化

  • GetLogs() メソッド

    次のパラメーターのいずれか 1 つだけを構成する必要があります。

    • powerSql: 有効な値:true および false (デフォルト)。 値 true は、現在のクエリで SQL 拡張を使用することを指定します。 値 false は、現在のクエリで標準 SQL を使用することを指定します。

    • query: この例では、* | select count(*) as pv クエリ文が実行されます。 set session parallel_sql=true; を分析文に追加して、SQL 拡張が使用されることを示します。 クエリ文は * | set session parallel_sql=true; select count(*) as pv になります。

    import com.aliyun.openservices.log.Client;
    import com.aliyun.openservices.log.exception.LogException;
    import com.aliyun.openservices.log.response.GetLogsResponse;
    
    import java.util.Date;
    
    public class CreateSqlInstance {
        public static void main(String[] args) throws LogException {
            // 環境変数を構成します。 この例では、AccessKey ID と AccessKey シークレットは環境変数から取得されます。
            String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
            // Simple Log Service エンドポイント。 この例では、中国 (杭州) リージョンの Simple Log Service エンドポイントが使用されます。 パラメーター値を実際のエンドポイントに置き換えます。
            String host = "https://cn-beijing.log.aliyuncs.com";
            // Simple Log Service クライアントを作成します。
            Client client = new Client(host, accessId, accessKey);
            // プロジェクト名。
            String projectName = "aliyun-project-test";
            // ログストア名。
            String logstore = "request_log";
            // SQL 拡張を使用するかどうかを指定します。 デフォルト値:false。
            boolean useAsDefault = true;
            // クエリ文を指定します。
            String query = "* | select count(1)";
            // リクエストに対して返すログの最大数。 このパラメーターは、query パラメーターが検索文に設定されている場合にのみ有効になります。 最小値:0。 最大値:100。 デフォルト値:100。
            int line = 3;
            // クエリの開始行。 このパラメーターは、query パラメーターが検索文に設定されている場合にのみ有効になります。 デフォルト値:0。
            int offset = 0;
            // ログのタイムスタンプの逆 chron 順にログを返すかどうかを指定します。 ログのタイムスタンプは分単位で正確です。 有効な値:
            // true: ログはログのタイムスタンプの逆 chron 順に返されます。
            // false (デフォルト): ログはログのタイムスタンプの chron 順に返されます。
            boolean reverse = false;
            // SQL 拡張を使用するかどうかを指定します。 有効な値:
            // true: SQL 拡張を使用します。
            // false (デフォルト): 標準 SQL を使用します。
            boolean powerSql = true;
            int from = (int) (new Date().getTime() / 1000 - 600);
            int to = (int) (new Date().getTime() / 1000);
            GetLogsResponse getLogsResponse = client.GetLogs(projectName, logstore, from, to, "", query, line, offset, reverse, powerSql); // "sql" should be "query"
            System.out.println(getLogsResponse.getCpuSec());
        }
    }

デフォルトで有効

boolean useAsDefault を true に設定して、プロジェクトの SQL 拡張を自動的に有効にします。

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateOrUpdateSqlInstanceRequest;

public class CreateSqlInstance {
    public static void main(String[] args) throws LogException {
        // 環境変数を構成します。 この例では、AccessKey ID と AccessKey シークレットは環境変数から取得されます。
        String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // プロジェクト名。
        String projectName = "aliyun-test-project";
        // Simple Log Service エンドポイント。 この例では、中国 (杭州) リージョンの Simple Log Service エンドポイントが使用されます。 パラメーター値を実際のエンドポイントに置き換えます。
        String host = "https://cn-beijing.log.aliyuncs.com";
        // Simple Log Service クライアントを作成します。
        Client client = new Client(host, accessId, accessKey);
        int cu = 100;
        boolean useAsDefault = true;
        client.createSqlInstance(new CreateOrUpdateSqlInstanceRequest(projectName, cu, useAsDefault));
    }
}

FAQ

  • 使用した CPU 時間の量はどのように取得しますか?

    分析操作とクエリ操作を実行した後、[分析結果] にポインターを移動すると、使用した CPU 時間の量を確認できます。 次の図は例を示しています。计费

  • クエリ文を 1 回実行した場合の専用 SQL 機能の料金はいくらですか?

    専用 SQL 機能の料金は、クエリ文を実行するデータ量によって異なります。 次の表に例を示します。

    クエリ文

    データ量 (行)

    実行ごとの平均コスト (USD)

    * | select avg(double_0) from stress_s1_mil1

    40億

    0.004435

    * | select avg(double_0), sum(double_0),), min(double_0), count(double_0) from stress_s1_mil1

    40億

    0.006504

    * | select avg(double_0), sum(double_1), max(double_2), min(double_3), count(double_4) from stress_s1_mil1

    40億

    0.013600

    * | select key_0 , avg(double_0) as pv from stress_s1_mil1 group by key_0 order by pv desc limit 1000

    40億

    0.011826

    * | select long_0, avg(double_0) as pv from stress_s1_mil1 group by long_0 order by pv desc limit 1000

    40億

    0.011087

    * | select long_0, long_1, avg(double_0) as pv from stress_s1_mil1 group by long_0,long_1 order by pv desc limit 1000

    3億

    0.010791

    * | select avg(double_0) from stress_s1_mil1 where key_0='key_987'

    40億

    0.00007