このトピックでは、Simple Log Service SDK for Pythonを使用して専用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ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
Python V0.7.5以降のSimple Log Service SDKがインストールされています。 詳細については、「Simple Log Service SDK For Pythonのインストール」をご参照ください。
背景情報
Simple Log Serviceは、SQL分析機能を強化する専用SQL機能を提供します。 この機能を使用して、数千億のデータレコードを処理できます。 詳細については、「Dedicated SQLの有効化」をご参照ください。
Simple Log Serviceは、execute_logstore_sqlおよびexecute_project_sql操作を提供します。 操作を呼び出して、Dedicated SQL機能を効率的に使用できます。
execute_logstore_sql: 指定されたLogstoreで専用SQL機能を使用します。 この操作はSQL-92構文をサポートしています。 クエリステートメントは
Searchステートメント | Analyticステートメント
の形式であり、分析ステートメントは標準のSQL-92構文に従います。execute_project_sql: 指定したプロジェクトで専用SQL機能を使用します。 この操作はSQL-92構文をサポートしています。 SQL文のWHERE句でフィルター条件と時間範囲を指定する必要があります。
データを分析する前にデータをフィルタリングする場合は、execute_logstore_sql操作を呼び出し、Search statement | Analytic statement
形式でクエリステートメントを指定して分析効率を向上させることを推奨します。
専用SQL機能の使用に使用されるサンプルコード
次のサンプルコードは、Dedicated SQL機能の使用方法の例を示しています。 詳細については、「aliyun-log-python-sdk」をご参照ください。
# encoding: utf-8
from __future__ import print_function
import time
import os
from aliyun.log import *
def main():
# 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.
endpoint = 'cn-hangzhou.log.aliyuncs.com'
# Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# The name of the project.
project_name = 'aliyun-test-project'
# The name of the Logstore.
logstore_name = 'aliyun-test-logstore'
# Create a Simple Log Service client.
client = LogClient(endpoint, access_key_id, access_key)
# Execute an SQL statement in the specified Logstore.
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)
# Display the statistics about the analysis results.
res.log_print()
# The number of rows of log data that is processed.
print("processed_rows: %s" % res.get_processed_rows())
# The time that is consumed to execute the SQL statement.
print("elapsed_mills: %s" % res.get_elapsed_mills())
# Display whether an SQL statement is used.
print("has_sql: %s" % res.get_has_sql())
# The WHERE clause that precedes the vertical bar (|).
print("where_query: %s" % res.get_where_query())
# The SELECT statement that follows the vertical bar (|). The SELECT statement contains an aggregate function.
print("agg_query: %s" % res.get_agg_query())
# 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 Dedicated SQL feature based on the CPU time. For more information, see the topics that are related to billable items.
print("cpu_sec: %s" % res.get_cpu_sec())
# The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled.
print("cpu_cores: %s" % res.get_cpu_cores())
# Execute an SQL statement in the specified project.
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)
# Display the statistics about the analysis results.
res.log_print()
# The number of rows of log data that is processed.
print("processed_rows: %s" % res.get_processed_rows())
# The time that is consumed to execute the SQL statement.
print("elapsed_mills: %s" % res.get_elapsed_mills())
# Display whether an SQL statement is used.
print("has_sql: %s" % res.get_has_sql())
# The WHERE clause that precedes the vertical bar (|).
print("where_query: %s" % res.get_where_query())
# The SELECT statement that follows the vertical bar (|). The SELECT statement contains an aggregate function.
print("agg_query: %s" % res.get_agg_query())
# 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 Dedicated SQL feature based on the CPU time. For more information, see the topics that are related to billable items.
print("cpu_sec: %s" % res.get_cpu_sec())
# The number of CPU cores that are used to execute the SQL statement after the Dedicated SQL feature is enabled.
print("cpu_cores: %s" % res.get_cpu_cores())
if __name__ == '__main__':
main()
execute_logstore_sql操作
専用SQL機能を使用するには、execute_logstore_sql操作を呼び出します。
res = client.exe cute_logstore_sql(project, logstoreName, from, to, query, powerSql)
形式でリクエストを作成する必要があります。 次の表に、リクエストパラメーターを示します。パラメーター
データ型
必須
例
説明
project_name
String
課金されます
非該当
プロジェクトの名前。
Simple Log Serviceクライアントを作成するときは、project_nameパラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。
logstore_name
String
課金されます
非該当
ログストアの名前
Simple Log Serviceクライアントを作成するときは、logstore_nameパラメーターの値を指定する必要があります。 したがって、パラメーターを再度設定する必要はありません。
から
Long
課金されます
int(time.time() - 60)
照会する期間の開始時刻です。 この値は、エポック時刻1月1日1970 00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。
に
Long
課金されます
int(time.time())
照会する期間の終了時刻を設定します。 この値は、エポック時刻1月1日1970 00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。
query
String
課金されます
"* | select count (1) as cnt"
クエリ 文。 形式:
Search statement | Analytic statement
詳細については、「構文」をご参照ください。デフォルトでは、Simple Log Serviceは100行のデータを返します。 LIMIT句を使用して、返すデータ行の数を指定できます。 詳細は、「LIMIT句」をご参照ください。
powerSql
ブール値
課金されません
正しい
専用SQL機能を使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。
True: 専用SQL機能が使用されます。
False (デフォルト): 標準SQL機能が使用されます。
execute_project_sql操作
専用SQL機能を使用するには、execute_project_sql操作を呼び出します。
res = client.exe cute_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
ブール値
課金されません
正しい
専用SQL機能を使用するかどうかを指定します。 詳細については、「Dedicated SQLの有効化」をご参照ください。
True: 専用SQL機能が使用されます。
False (デフォルト): 標準SQL機能が使用されます。
SQLインスタンスの作成、変更、およびクエリに使用されるサンプルコード
専用SQL機能を有効にすると、SQLインスタンスを作成してCUの数を指定できます。 CUの数を変更して、Dedicated SQL機能のコストを制御できます。 次のサンプルコードは、SQLインスタンスを作成、変更、およびクエリする方法の例を示しています。 詳細については、「aliyun-log-python-sdk」をご参照ください。
# encoding: utf-8
from __future__ import print_function
import time
import os
from aliyun.log import *
def main():
# The Simple Log Service endpoint. For more information, see Endpoints. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint.
endpoint = 'cn-hangzhou.log.aliyuncs.com'
# Configure environment variables. In this example, the AccessKey ID and AccessKey secret are obtained from environment variables.
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# The name of the project.
project_name = 'aliyun-test-project'
# The name of the Logstore.
logstore_name = 'aliyun-test-logstore'
# Create a Simple Log Service client.
client = LogClient(endpoint, access_key_id, access_key)
# Create an SQL instance. You can specify the number of CUs for the SQL instance. Valid values: 0 to 1000.
print("===sample_create_sql_instance===")
res = client.create_sql_instance(project_name, 500)
res.log_print()
# Modify the configurations of the SQL instance. You can change the number of CUs for the SQL instance. Valid values: 0 to 1000.
print("===sample_update_sql_instance===")
res = client.update_sql_instance(project_name, 800)
res.log_print()
# Query the configurations of the SQL instance.
print("===sample_list_sql_instance===")
res = client.list_sql_instance(project_name)
res.log_print()
if __name__ == '__main__':
main()