このトピックでは、Python 用 Simple Log Service SDK を使用して専用 SQL 機能を使用する方法について説明します。
前提条件
Simple Log Service がアクティブ化されていること。詳細については、「Activate Simple Log Service」をご参照ください。
Python 用 Simple Log Service SDK が初期化されていること。詳細については、「Python 用 Simple Log Service SDK を初期化する」をご参照ください。
背景情報
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()