Utilisez le SDK Python de Simple Log Service pour exécuter des requêtes SQL via la fonctionnalité Dedicated SQL, conçue pour l'analyse de journaux à grande échelle.
Prérequis
Le service Simple Log Service est activé.
Le SDK Python de Simple Log Service est initialisé.
Contexte
Simple Log Service propose la fonctionnalité Dedicated SQL afin d'améliorer les capacités d'analyse SQL et de traiter des centaines de milliards d'enregistrements de données. Pour plus d'informations, consultez la rubrique Requête et analyse précises haute performance (Dedicated SQL).
Simple Log Service met à disposition les opérations execute_logstore_sql et execute_project_sql pour utiliser la fonctionnalité Dedicated SQL.
execute_logstore_sql: exécute la fonctionnalité Dedicated SQL dans un Logstore spécifié. Cette opération prend en charge la syntaxe SQL-92. Une instruction de requête suit le formatSearch statement|Analytic statementet l'instruction analytique respecte la syntaxe standard SQL-92.execute_project_sql: exécute la fonctionnalité Dedicated SQL dans un projet spécifié. Cette opération prend en charge la syntaxe SQL-92. Vous devez spécifier une condition de filtrage et une plage horaire dans la clause WHERE d'une instruction SQL.
Pour filtrer les données avant l'analyse, nous vous recommandons d'appeler l'opération execute_logstore_sql et de spécifier une instruction de requête au format Search statement|Analytic statement afin d'optimiser l'efficacité.
Exemples de code pour utiliser la fonctionnalité Dedicated SQL
Description des opérations
-
Opération
execute_logstore_sqlAppelez l'opération
execute_logstore_sqlpour utiliser la fonctionnalité Dedicated SQL. Créez une requête selon le formatres = client.execute_logstore_sql(project, logstoreName, from, to, query, powerSql). Le tableau suivant décrit les paramètres de la requête.Paramètre
Type
Obligatoire
Exemple
Description
project_name
String
Oui
S.O.
Nom du projet.
Cette valeur est spécifiée lors de la création du client Simple Log Service ; il n'est donc pas nécessaire de la configurer à nouveau.
logstore_name
String
Oui
S.O.
Nom du Logstore.
Cette valeur est spécifiée lors de la création du client Simple Log Service ; il n'est donc pas nécessaire de la configurer à nouveau.
from
Long
Oui
int(time.time() - 60)
Début de la plage horaire à interroger. La valeur correspond à un horodatage UNIX représentant le nombre de secondes écoulées depuis l'époque (1er janvier 1970, 00:00:00 UTC).
to
Long
Oui
int(time.time())
Fin de la plage horaire à interroger. La valeur correspond à un horodatage UNIX représentant le nombre de secondes écoulées depuis l'époque (1er janvier 1970, 00:00:00 UTC).
query
String
Oui
"* | select count(1) as cnt"
Instruction de requête. Format :
Search statement|Analytic statement. Pour plus d'informations, consultez la rubrique Syntaxe.Par défaut, Simple Log Service renvoie 100 lignes de données. Vous pouvez utiliser une clause LIMIT pour spécifier le nombre de lignes de données à renvoyer. Pour plus d'informations, consultez la rubrique Clause LIMIT.
powerSql
Boolean
Non
True
Indique s'il faut utiliser la fonctionnalité Dedicated SQL. Pour plus d'informations, consultez la rubrique Requête et analyse précises haute performance (Dedicated SQL).
-
True : la fonctionnalité Dedicated SQL est utilisée.
-
False (par défaut) : la fonctionnalité Standard SQL est utilisée.
-
-
Opération
execute_project_sqlAppelez l'opération
execute_project_sqlpour utiliser la fonctionnalité Dedicated SQL. Créez une requête selon le formatres = client.execute_project_sql(project, query, powerSql). Le tableau suivant décrit les paramètres de la requête.Paramètre
Type
Obligatoire
Exemple
Description
project_name
String
Oui
aliyun-test-project
Nom du projet.
Cette valeur est spécifiée lors de la création du client Simple Log Service ; il n'est donc pas nécessaire de la configurer à nouveau.
query
String
Oui
"select count(1) as cnt from %s where __time__ > %s" % (logstore_name, int(time.time() - 60))
Instruction SQL. Vous devez spécifier la condition de recherche dans la clause WHERE de l'instruction SQL.
Par défaut, Simple Log Service renvoie 100 lignes de données. Vous pouvez utiliser une clause LIMIT pour spécifier le nombre de lignes de données à renvoyer. Pour plus d'informations, consultez la rubrique Clause LIMIT.
powerSql
Boolean
Non
True
Indique s'il faut utiliser la fonctionnalité Dedicated SQL. Pour plus d'informations, consultez la rubrique Requête et analyse précises haute performance (Dedicated SQL).
-
True : la fonctionnalité Dedicated SQL est utilisée.
-
False (par défaut) : la fonctionnalité Standard SQL est utilisée.
-
Exemple de code
L'exemple de code suivant illustre l'utilisation de la fonctionnalité Dedicated SQL. Pour plus d'informations, consultez le dépôt aliyun-log-python-sdk.
# encoding: utf-8
from __future__ import print_function
import time
import os
from aliyun.log import *
def main():
# Specify a Simple Log Service endpoint.
endpoint = 'ap-southeast-1.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()
Exemple de code pour créer, modifier et interroger une instance SQL
Une fois la fonctionnalité Dedicated SQL activée, vous pouvez créer une instance SQL pour spécifier le nombre d'unités de calcul (CU). Vous pouvez ajuster le nombre d'unités de calcul afin de maîtriser les coûts. Pour plus d'informations, consultez la rubrique Requête et analyse précises haute performance (Dedicated SQL).
L'exemple de code suivant montre comment créer, modifier et interroger une instance SQL. Pour plus d'informations, consultez le dépôt 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 = 'ap-southeast-1.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()