Tous les produits
Search
Centre de documentation

Simple Log Service:Créer une tâche SQL planifiée

Dernière mise à jour :Aug 18, 2026

Appelez l'API CreateScheduledSQL pour créer une tâche SQL planifiée.

Remarque

Le SDK Simple Log Service ne met plus à jour les API liées au SQL planifié. Utilisez le SDK Alibaba Cloud pour gérer le SQL planifié :

Sur la page de débogage de l'API CreateScheduledSQL dans l'OpenAPI Explorer d'Alibaba Cloud, cliquez sur l'onglet SDK Example dans le panneau de droite. Sélectionnez votre langage cible (Java, TypeScript, Go, PHP, Python, .NET, C++, etc.) pour afficher l'exemple de code SDK correspondant. Cliquez sur Run Example pour un débogage en ligne ou sur Download Full Project.

Prérequis

Informations générales

Simple Log Service propose la fonctionnalité SQL planifié pour analyser périodiquement les données, stocker les données agrégées et effectuer des projections et des filtrages. Le SQL planifié prend en charge la syntaxe standard SQL92 ainsi que la syntaxe de requête et d'analyse de Simple Log Service. Il s'exécute périodiquement selon des règles de planification et écrit les résultats dans une base de données de destination (Logstore ou Metricstore).

La console Simple Log Service offre une interface visuelle pour créer des tâches SQL planifiées. Pour plus de détails, consultez la rubrique Créer une tâche SQL planifiée.

Par ailleurs, Simple Log Service met à disposition les classes ScheduledSQL, JobSchedule et ScheduledSQLConfiguration afin de simplifier la création de tâches SQL planifiées via le SDK Java.

  • ScheduledSQL : Crée une tâche SQL planifiée.

  • JobSchedule : Crée une configuration de planification pour la tâche SQL planifiée.

  • ScheduledSQLConfiguration : Crée la configuration de base de la tâche SQL planifiée.

Description des paramètres

Paramètres de requête

Nom

Type

Obligatoire

Description

Exemple

project

String

Oui

Nom du projet.

ali-test-project

scheduledSql

Object

Oui

Configuration de la tâche SQL planifiée.

-

ScheduledSQL

Le tableau suivant décrit les paramètres.

Nom du paramètre

Type

Obligatoire

Description

Exemple

name

String

Oui

Nom de la tâche SQL planifiée. Respectez les règles de nommage suivantes :

  • Doit être unique au sein du même projet.

  • Ne peut contenir que des lettres minuscules, des chiffres, des traits d'union (-) et des traits de soulignement (_).

  • Doit commencer et se terminer par une lettre minuscule ou un chiffre.

  • Doit comporter entre 4 et 63 caractères.

export-123-456

displayName

String

Oui

Nom d'affichage de la tâche SQL planifiée. Dans la console Simple Log Service, choisissez Task Management > Scheduled SQL pour afficher la liste des noms d'affichage.

my-scheduled-sql-job

description

String

Non

Description de la tâche SQL planifiée.

this is a scheduled sql job.

configuration

Object

Oui

Configuration du SQL planifié.

-

schedule

Object

Oui

Configuration de la planification de la tâche.

-

JobSchedule

Appelez JobSchedule jobSchedule = new JobSchedule(); pour créer une configuration de planification pour la tâche SQL planifiée. Le tableau suivant décrit les paramètres.

Nom du paramètre

Type

Obligatoire

Description

Exemple

type

String

Oui

Fréquence de planification de la tâche SQL planifiée. Chaque planification crée une instance d'exécution. L'intervalle détermine l'heure planifiée pour chaque instance.

  • FixedRate : Planifie la tâche à intervalles fixes. L'intervalle est spécifié par le paramètre interval.

  • Hourly : Planifie la tâche une fois par heure.

  • Daily : Planifie la tâche une fois par jour à une heure fixe.

  • Cron : Utilise une expression cron pour définir la planification.

FixedRate

interval

String

Non

Spécifie l'intervalle fixe lorsque le paramètre type est défini sur FixedRate.

  • 3s : 3 secondes.

  • 5m : 5 minutes.

  • 2h : 2 heures.

50m

cronExpression

String

Non

Spécifie l'expression cron lorsque le paramètre type est défini sur Cron.

La précision minimale d'une expression cron est d'une minute, au format 24 heures. Par exemple, 0 0/1 * exécute la tâche toutes les heures à partir de 00:00.

Pour configurer un fuseau horaire, sélectionnez le mode Cron. Pour obtenir la liste des fuseaux horaires courants, consultez la rubrique Format du fuseau horaire.

N/A

runImmediately

boolean

Non

Indique si la tâche planifiée doit être exécutée immédiatement.

False

timeZone

String

Non

Fuseau horaire pour l'expression cron. La valeur par défaut est vide, ce qui signifie UTC+8.

+0800

delay

int

Non

Délai après l'heure planifiée avant le début de l'exécution. Valeurs valides : 0 à 120. Unité : secondes.

Si l'écriture des données dans un Logstore subit des retards ou d'autres problèmes similaires, vous pouvez utiliser l'exécution différée pour garantir l'intégrité des données.

10

ScheduledSQLConfiguration

Appelez ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); pour créer la configuration de la tâche SQL planifiée. Le tableau suivant décrit les paramètres.

Nom du paramètre

Type

Obligatoire

Description

Exemple

script

String

Oui

Instruction de requête et d'analyse.

*|select count(1)

sqlType

String

Oui

Type de SQL. Définissez la valeur sur searchQuery.

searchQuery

resourcePool

String

Oui

Type de pool de ressources. Définissez la valeur sur enhanced. Simple Log Service fournit des pools de ressources améliorés pour l'analyse des données.

enhanced

roleArn

String

Oui

ARN du rôle RAM utilisé pour lire les données depuis le Logstore source. Pour savoir comment obtenir un ARN, consultez la rubrique Accorder à un rôle RAM personnalisé les autorisations d'accès au LogStore source.

acs:ram::11111111:role/aliyunlogetlrole

destRoleArn

String

Oui

ARN du rôle RAM utilisé pour écrire les données dans le Logstore de destination. Pour savoir comment obtenir un ARN, consultez les rubriques suivantes :

acs:ram::11111111:role/aliyunlogetlrole

sourceLogstore

String

Oui

Nom du Logstore source.

source-logstore

destEndpoint

String

Oui

Endpoint du Logstore de destination.

Remarque
  • Pour la communication interne entre les services Alibaba Cloud, par exemple les instances ECS dans la même région accédant à Simple Log Service, utilisez un endpoint privé tel que http://cn-hangzhou-intranet.log.aliyuncs.com.

  • Pour l'accès public via Internet, par exemple l'utilisation d'API ou de SDK depuis votre machine locale, utilisez un endpoint public tel que http://cn-hangzhou.log.aliyuncs.com.

  • L'utilisation d'un endpoint public entraîne des frais de trafic sortant supplémentaires par rapport à un endpoint privé. Pour plus d'informations, consultez la rubrique Éléments de facturation pour Simple Log Service.

Pour plus d'informations, consultez la rubrique Endpoints.

http://cn-hangzhou-intranet.log.aliyuncs.com

destProject

String

Oui

Nom du projet de destination.

my-project

destLogstore

String

Oui

Nom du Logstore de destination.

Avertissement

Ne définissez pas la base de données de destination identique à la base de données source. Cela pourrait entraîner une boucle d'écriture des journaux, générant des frais de stockage et de trafic supplémentaires. Vous êtes responsable de toute consommation de ressources et des frais qui en résultent.

my-logstore

dataFormat

String

Oui

Mode d'écriture.

  • log2log : Importe les journaux d'un Logstore vers un autre Logstore. Les données du Logstore source sont traitées par le SQL planifié et stockées dans le Logstore de destination.

  • log2metric : Importe les journaux d'un Logstore vers un Metricstore. Les données du Logstore source sont traitées par le SQL planifié et stockées dans le Metricstore de destination.

  • metric2metric : Importe les métriques d'un Metricstore vers un autre Metricstore. Les données du Metricstore source sont traitées par le SQL planifié et stockées dans le Metricstore de destination.

log2log

fromTimeExpr

String

Oui

Expression de début pour la fenêtre temporelle SQL. Pour plus d'informations, consultez la rubrique Syntaxe des expressions temporelles.

@m - 12s

toTimeExpr

String

Oui

Expression de fin pour la fenêtre temporelle SQL. Pour plus d'informations, consultez la rubrique Syntaxe des expressions temporelles.

@m

maxRetries

Long

Oui

Nombre maximal de tentatives automatiques en cas d'échec de l'opération d'analyse SQL. Si le nombre de tentatives dépasse cette valeur, l'instance d'exécution se termine avec un statut d'échec.

10

maxRunTimeInSeconds

Long

Oui

Durée totale maximale des tentatives en secondes en cas d'échec de l'opération d'analyse SQL. Si la durée des tentatives dépasse cette valeur, l'instance d'exécution se termine avec un statut d'échec.

60

fromTime

Long

Oui

Heure de début de la planification.

Important

Les instances d'exécution sont créées uniquement dans cette plage de temps. Aucune nouvelle instance n'est créée en dehors de cette plage.

1653965045

toTime

Long

Oui

Heure de fin de la planification. Définissez la valeur sur 0 pour qu'il n'y ait pas d'heure de fin.

1653968045

parameters

Object

Oui

Lorsque le paramètre dataFormat est défini sur log2metric ou metric2metric, configurez les paramètres SQL. Pour plus de détails, consultez les sections Log2MetricParameters et Metric2MetricParameters.

{
  addLabels: "{}",
  hashLabels: "[]",
  labelKeys: "[\"your label1\",\"your label2\"]",
  metricKeys: "[\"your Indicator1\",\"your Indicator2\"]",
  metricName: "",
  timeKey: ""
}

parameters

  • Lors de la configuration d'une tâche SQL planifiée d'un Logstore vers un Metricstore, vous devez également configurer les paramètres supplémentaires suivants :

    Tableau 1. Log2MetricParameters

    Nom du paramètre

    Exemple

    Description

    metricKeys

    "[\"a\", \"b\", \"c\"]"

    Colonnes de métriques, correspondant aux colonnes de métriques dans la configuration SQL de la console.

    Simple Log Service agrège les données en fonction de votre instruction de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes de type numérique parmi les résultats de la requête comme colonnes de métriques. Pour plus d'informations, consultez la rubrique Métriques.

    labelKeys

    "[\"d\", \"e\", \"f\"]"

    Colonnes d'étiquettes, correspondant aux étiquettes (Labels) dans la configuration SQL de la console.

    Simple Log Service agrège les données en fonction de votre instruction de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes parmi les résultats de la requête comme étiquettes. Pour plus d'informations, consultez la rubrique Métriques.

    hashLabels

    "[\"d\", \"f\"]"

    Correspond à Rehash dans la configuration SQL de la console.

    Après avoir activé l'option Rehash, vous pouvez configurer des hash columns pour écrire les données ayant la même valeur de colonne dans un seul shard. Cela améliore la localité des données et l'efficacité des requêtes.

    Les hash columns disponibles dépendent de vos résultats de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes parmi les résultats comme colonnes de hachage. Par exemple, si vous définissez les hash columns sur status, toutes les données ayant la même valeur status sont écrites dans le même shard.

    addLabels

    "[\"m\":\"h\", \"n\":\"i\"]"

    Correspond à Additional Labels (Étiquettes supplémentaires) dans la configuration SQL de la console.

    Ajoutez des étiquettes statiques sous forme de paires clé-valeur pour identifier les attributs des métriques.

    Par exemple, définissez label_key sur app et label_value sur ingress-nginx.

    timeKey

    time

    Correspond à Time Column (Colonne temporelle) dans la configuration SQL de la console.

    • Si vous sélectionnez une colonne temporelle parmi les résultats de la requête (avec des valeurs d'horodatage Unix, telles que atime:1627025331), le système utilise cette colonne comme horodatage de la métrique.

    • Si vous sélectionnez empty (vide), le système utilise l'heure de début de la plage temporelle de la requête comme horodatage de la métrique.

  • Lors de la configuration d'une tâche SQL planifiée d'un Metricstore vers un autre Metricstore, vous devez également configurer les paramètres supplémentaires suivants :

    Tableau 2. Metric2MetricParameters

    Nom du paramètre

    Exemple

    Description

    metricName

    my-metric

    Saisissez un nouveau nom de métrique si vous souhaitez renommer la métrique. Pour plus d'informations, consultez la rubrique Métriques.

    Important

    Nous vous recommandons de renommer uniquement lors de l'analyse d'une seule métrique.

    Si vous analysez plusieurs métriques et les renommez, toutes les métriques partageront le même nouveau nom.

    hashLabels

    "{\"m\":\"h\", \"n\":\"i\"}"

    Correspond à Rehash dans la configuration SQL de la console.

    Après avoir activé l'option Rehash, vous pouvez configurer des hash columns pour écrire les données ayant la même valeur d'étiquette dans un seul shard. Cela améliore la localité des données et l'efficacité des requêtes.

    Les hash columns disponibles dépendent des étiquettes existantes dans les données de la métrique. Par exemple, si les données de la métrique incluent les étiquettes {"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, les hash columns valides sont alert_id, alert_name et status. Si vous définissez les hash columns sur status, toutes les données ayant la même valeur status sont écrites dans le même shard.

    addLabels

    "{\"m\":\"h\", \"n\":\"i\"}"

    Correspond à Additional Labels (Étiquettes supplémentaires) dans la configuration SQL de la console.

    Ajoutez des étiquettes statiques sous forme de paires clé-valeur pour identifier les attributs des métriques.

    Par exemple, définissez label_key sur app et label_value sur ingress-nginx.

Paramètres de réponse

Pour la description des paramètres de réponse, consultez la rubrique Créer une tâche SQL planifiée.

Exemple de code

Cet exemple crée un fichier App.java qui stocke les résultats d'analyse planifiés d'un Logstore source dans un Logstore de destination. Exemple de code :

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateScheduledSQLRequest;
public class App {
    // This example retrieves the AccessKey ID and AccessKey secret from environment variables.
    static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // Set project and Logstore names.
    static String sourceProject="aliyun-test-sourceProject";
    static String destProject="aliyun-test-destProject";
    static String sourceLogstore = "logstore-name";
    static String destLogstore = "project-name";
    static String roleArn = "acs:ram::11111111:role/aliyunlogetlrole";
    // Set the Simple Log Service endpoint. This example uses the China (Hangzhou) region. Replace it with your region.
    static String endpoint = "http://cn-hangzhou.log.aliyuncs.com";
    static String destEndpoint = "http://cn-hangzhou-intranet.log.aliyuncs.com";
    static long fromTime = 1648105200; //2022-03-23 15:00:00
    private static String script = "* | select a,b,c from log";
    private static ScheduledSQLBaseParameters generateParams(String dataFormat) {
        if (dataFormat.equalsIgnoreCase("log2log")) {
            return null;
        } else if (dataFormat.equalsIgnoreCase("log2metric")) {
            Log2MetricParameters params = new Log2MetricParameters();
            params.setMetricKeys("[\"a\", \"b\", \"c\"]");
            params.setLabelKeys("[\"d\", \"e\", \"f\"]");
            params.setHashLabels("[\"d\", \"f\"]");
            params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
            params.setTimeKey("time");
            return params;
        } else if (dataFormat.equalsIgnoreCase("metric2metric")) {
            Metric2MetricParameters params = new Metric2MetricParameters();
            params.setMetricName("name");
            params.setHashLabels("[\"d\", \"f\"]");
            params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
            return params;
        }
        return null;
    }
    private static ScheduledSQLConfiguration generateConfig() {
        ScheduledSQLConfiguration scheduledSQLConfiguration = new ScheduledSQLConfiguration();
        scheduledSQLConfiguration.setScript(script);
        scheduledSQLConfiguration.setSqlType("searchQuery");
        scheduledSQLConfiguration.setResourcePool("enhanced");
        scheduledSQLConfiguration.setRoleArn(roleArn);
        scheduledSQLConfiguration.setDestRoleArn(roleArn);
        scheduledSQLConfiguration.setSourceLogstore(sourceLogstore);
        scheduledSQLConfiguration.setDestEndpoint(destEndpoint);
        scheduledSQLConfiguration.setDestProject(destProject);
        scheduledSQLConfiguration.setDestLogstore(destLogstore);
        scheduledSQLConfiguration.setDataFormat("log2log");
        scheduledSQLConfiguration.setFromTimeExpr("@m-1m");
        scheduledSQLConfiguration.setToTimeExpr("@m");
        scheduledSQLConfiguration.setMaxRetries(20);
        scheduledSQLConfiguration.setMaxRunTimeInSeconds(600);
        scheduledSQLConfiguration.setFromTime(fromTime);
        scheduledSQLConfiguration.setToTime(0L);
        ScheduledSQLBaseParameters params = generateParams(scheduledSQLConfiguration.getDataFormat());
        scheduledSQLConfiguration.setParameters(params);
        return scheduledSQLConfiguration;
    }
    private static ScheduledSQL generateScheduledSQL() {
        ScheduledSQL scheduledSQLStructure = new ScheduledSQL();
        scheduledSQLStructure.setName("job-name");
        scheduledSQLStructure.setDisplayName("display-name");
        scheduledSQLStructure.setDescription("desc-name");
        ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig();
        scheduledSQLStructure.setConfiguration(scheduledSQLConfiguration);
        JobSchedule jobSchedule = new JobSchedule();
        jobSchedule.setType(JobScheduleType.FIXED_RATE);
        jobSchedule.setInterval("1m");
        jobSchedule.setDelay(10);
        jobSchedule.setRunImmediately(false);
        scheduledSQLStructure.setSchedule(jobSchedule);
        return scheduledSQLStructure;
    }
    public static void main(String[] args) {
        Client client = new Client(endpoint, accessId, accessKey);
        ScheduledSQL scheduledSQL = generateScheduledSQL();
        CreateScheduledSQLRequest request = new CreateScheduledSQLRequest(sourceProject, scheduledSQL);
        try {
            client.createScheduledSQL(request);
        } catch (LogException e) {
            e.printStackTrace();
        }
    }
} 

Références