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

Simple Log Service:Python 用 Simple Log Service SDK で専用 SQL 機能を使用する

最終更新日:Feb 19, 2025

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

前提条件

背景情報

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

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

  • execute_logstore_sql: 指定されたログストアで専用 SQL 機能を使用します。この操作は SQL-92 構文をサポートしています。クエリ文は Search statement|Analytic statement 形式で、分析文は標準 SQL-92 構文に従います。

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

説明

データを分析する前にデータをフィルタリングする場合は、execute_logstore_sql 操作を呼び出し、Search statement|Analytic statement 形式のクエリ文を指定して、分析効率を向上させることをお勧めします。

専用 SQL 機能を使用するサンプルコード

操作の説明

  • execute_logstore_sql 操作

    execute_logstore_sql 操作を呼び出して、専用 SQL 機能を使用できます。res = client.execute_logstore_sql(project, logstoreName, from, to, query, powerSql) 形式のリクエストを作成する必要があります。次の表に、リクエストパラメータを示します。

    パラメータ

    タイプ

    必須

    説明

    project_name

    String

    はい

    N/A

    プロジェクトの名前。

    Simple Log Service クライアントを作成するときに、project_name パラメータの値を指定する必要があります。そのため、このパラメータを再度構成する必要はありません。

    logstore_name

    String

    はい

    N/A

    ログストアの名前。

    Simple Log Service クライアントを作成するときに、logstore_name パラメータの値を指定する必要があります。そのため、このパラメータを再度構成する必要はありません。

    from

    Long

    はい

    int(time.time() - 60)

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

    to

    Long

    はい

    int(time.time())

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

    query

    String

    はい

    "* | select count(1) as cnt"

    クエリ文。形式: Search statement|Analytic statement。詳細については、「構文」をご参照ください。

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

    powerSql

    Boolean

    いいえ

    True

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

    • True: 専用 SQL 機能が使用されます。

    • False (デフォルト): 標準 SQL 機能が使用されます。

  • execute_project_sql 操作

    execute_project_sql 操作を呼び出して、専用 SQL 機能を使用できます。res = client.execute_project_sql(project, query, powerSql) 形式のリクエストを作成する必要があります。次の表に、リクエストパラメータを示します。

    パラメータ

    タイプ

    必須

    説明

    project_name

    String

    はい

    aliyun-test-project

    プロジェクトの名前。

    Simple Log Service クライアントを作成するときに、project_name パラメータの値を指定する必要があります。そのため、このパラメータを再度構成する必要はありません。

    query

    String

    はい

    "select count(1) as cnt from %s where __time__ > %s" % (logstore_name, int(time.time() - 60))

    SQL 文。SQL 文の WHERE 句に検索条件を指定する必要があります。

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

    powerSql

    Boolean

    いいえ

    True

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

    • True: 専用 SQL 機能が使用されます。

    • False (デフォルト): 標準 SQL 機能が使用されます。

サンプルコード

次のサンプルコードは、専用 SQL 機能の使用方法の例を示しています。詳細については、「aliyun-log-python-sdk」をご参照ください。

# encoding: utf-8
from __future__ import print_function

import time
import os
from aliyun.log import *


def main():
    # Simple Log Service エンドポイントを指定します。
    endpoint = 'ap-southeast-1.log.aliyuncs.com'
    # 環境変数を構成します。この例では、AccessKey ID と AccessKey シークレットは環境変数から取得されます。
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
    # プロジェクトの名前。
    project_name = 'aliyun-test-project'
    # ログストアの名前。
    logstore_name = 'aliyun-test-logstore'

    # Simple Log Service クライアントを作成します。
    client = LogClient(endpoint, access_key_id, access_key)

    # 指定されたログストアで SQL 文を実行します。
    print("===sample_execute_logstore_sql===")
    res = client.execute_logstore_sql(project_name, logstore_name,
                                      int(time.time() - 60),int(time.time()),
                                      "* | select count(1) as cnt",True)
    # 分析結果の統計情報を表示します。
    res.log_print()
    # 処理されたログデータの行数。
    print("processed_rows: %s" % res.get_processed_rows())
    # SQL 文の実行に消費された時間。
    print("elapsed_mills: %s" % res.get_elapsed_mills())
    # SQL 文が使用されたかどうかを表示します。
    print("has_sql: %s" % res.get_has_sql())
    # 縦棒 (|) の前の WHERE 句。
    print("where_query: %s" % res.get_where_query())
    # 縦棒 (|) の後の SELECT 文。SELECT 文には集計関数が含まれています。
    print("agg_query: %s" % res.get_agg_query())
    # 専用 SQL 機能が有効になった後に SQL 文の実行に消費された CPU 時間。単位: 秒。専用 SQL 機能は、CPU 時間に基づいて課金されます。詳細については、課金項目に関連するトピックをご参照ください。
    print("cpu_sec: %s" % res.get_cpu_sec())
    # 専用 SQL 機能が有効になった後に SQL 文の実行に使用された CPU コア数。
    print("cpu_cores: %s" % res.get_cpu_cores())


    # 指定されたプロジェクトで SQL 文を実行します。
    print("===sample_execute_project_sql===")
    res = client.execute_project_sql(project_name,"select count(1) as cnt from %s where __time__ > %s"
                                     % (logstore_name, int(time.time() - 60)),True)
    # 分析結果の統計情報を表示します。
    res.log_print()
    # 処理されたログデータの行数。
    print("processed_rows: %s" % res.get_processed_rows())
    # SQL 文の実行に消費された時間。
    print("elapsed_mills: %s" % res.get_elapsed_mills())
    # SQL 文が使用されたかどうかを表示します。
    print("has_sql: %s" % res.get_has_sql())
    # 縦棒 (|) の前の WHERE 句。
    print("where_query: %s" % res.get_where_query())
    # 縦棒 (|) の後の SELECT 文。SELECT 文には集計関数が含まれています。
    print("agg_query: %s" % res.get_agg_query())
    # 専用 SQL 機能が有効になった後に SQL 文の実行に消費された CPU 時間。単位: 秒。専用 SQL 機能は、CPU 時間に基づいて課金されます。詳細については、課金項目に関連するトピックをご参照ください。
    print("cpu_sec: %s" % res.get_cpu_sec())
    # 専用 SQL 機能が有効になった後に SQL 文の実行に使用された CPU コア数。
    print("cpu_cores: %s" % res.get_cpu_cores())


if __name__ == '__main__':
    main()

SQL インスタンスを作成、変更、およびクエリするサンプルコード

専用 SQL 機能が有効になったら、SQL インスタンスを作成して CU 数を指定できます。CU 数を変更して、専用 SQL 機能のコストを制御できます。詳細については、「課金」をご参照ください。

次のサンプルコードは、SQL インスタンスを作成、変更、およびクエリする方法の例を示しています。詳細については、「aliyun-log-python-sdk」をご参照ください。

# encoding: utf-8
from __future__ import print_function

import time
import os
from aliyun.log import *

def main():
    # Simple Log Service エンドポイント。詳細については、エンドポイントをご参照ください。この例では、中国 (杭州) リージョンの Simple Log Service エンドポイントが使用されています。パラメータ値を実際のエンドポイントに置き換えてください。
    endpoint = 'ap-southeast-1.log.aliyuncs.com'
    # 環境変数を構成します。この例では、AccessKey ID と AccessKey シークレットは環境変数から取得されます。
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
    # プロジェクトの名前。
    project_name = 'aliyun-test-project'
    # ログストアの名前。
    logstore_name = 'aliyun-test-logstore'

    # Simple Log Service クライアントを作成します。
    client = LogClient(endpoint, access_key_id, access_key)

    # SQL インスタンスを作成します。SQL インスタンスの CU 数を指定できます。有効な値: 0 ~ 1000。
    print("===sample_create_sql_instance===")
    res = client.create_sql_instance(project_name, 500)
    res.log_print()

    # SQL インスタンスの構成を変更します。SQL インスタンスの CU 数を変更できます。有効な値: 0 ~ 1000。
    print("===sample_update_sql_instance===")
    res = client.update_sql_instance(project_name, 800)
    res.log_print()

    # SQL インスタンスの構成をクエリします。
    print("===sample_list_sql_instance===")
    res = client.list_sql_instance(project_name)
    res.log_print()


if __name__ == '__main__':
    main()