Todos los productos
Search
Centro de documentos

Simple Log Service:Crear una tarea de SQL programada

Última actualización: Sep 03, 2026

Invoque la API CreateScheduledSQL para crear una tarea de SQL programada.

Nota

El SDK de Simple Log Service ya no actualiza las API relacionadas con SQL programado. Utilice el SDK de Alibaba Cloud para gestionar SQL programado:

En la página de depuración de la API CreateScheduledSQL en Alibaba Cloud OpenAPI Explorer, haga clic en la pestaña SDK Example del panel derecho. Seleccione el lenguaje destino (Java, TypeScript, Go, PHP, Python, .NET, C++, etc.) para consultar el código de ejemplo correspondiente del SDK. Puede hacer clic en Run Example para depurar en línea o en Download Full Project.

Requisitos previos

Información de contexto

Simple Log Service proporciona SQL programado para analizar datos periódicamente, almacenar datos agregados y realizar proyecciones y filtrados. SQL programado admite la sintaxis estándar SQL92 y la sintaxis de consulta y análisis de Simple Log Service. Se ejecuta periódicamente según las reglas de programación y escribe los resultados en una base de datos de destino (Logstore o Metricstore).

La consola de Simple Log Service ofrece una interfaz visual para crear tareas de SQL programado. Para más detalles, consulte Create a scheduled SQL task.

Además, Simple Log Service proporciona las clases ScheduledSQL, JobSchedule y ScheduledSQLConfiguration para simplificar la creación de tareas de SQL programado mediante el SDK de Java.

  • ScheduledSQL: Crea una tarea de SQL programado.

  • JobSchedule: Crea una configuración de programación para la tarea de SQL programado.

  • ScheduledSQLConfiguration: Crea la configuración básica para la tarea de SQL programado.

Descripción de parámetros

Parámetros de solicitud

Nombre

Tipo

Obligatorio

Descripción

Ejemplo

project

String

Sí

Nombre del proyecto.

ali-test-project

scheduledSql

Object

Sí

Configuración de la tarea de SQL programado.

-

ScheduledSQL

La siguiente tabla describe los parámetros.

Nombre del parámetro

Tipo

Obligatorio

Descripción

Ejemplo

name

String

Sí

Nombre de la tarea de SQL programado. Debe cumplir las siguientes reglas de nomenclatura:

  • Debe ser único dentro del mismo proyecto.

  • Solo puede contener letras minúsculas, dígitos, guiones (-) y guiones bajos (_).

  • Debe comenzar y terminar con una letra minúscula o un dígito.

  • Su longitud debe estar entre 4 y 63 caracteres.

export-123-456

displayName

String

Sí

Nombre para mostrar de la tarea de SQL programado. En la consola de Simple Log Service, seleccione Task Management > Scheduled SQL para consultar la lista de nombres para mostrar.

my-scheduled-sql-job

description

String

No

Descripción de la tarea de SQL programado.

this is a scheduled sql job.

configuration

Object

Sí

Configuración de SQL programado.

-

schedule

Object

Sí

Configuración de programación de la tarea.

-

JobSchedule

Llame a JobSchedule jobSchedule = new JobSchedule(); para crear una configuración de programación para la tarea de SQL programado. La siguiente tabla describe los parámetros.

Nombre del parámetro

Tipo

Obligatorio

Descripción

Ejemplo

type

String

Sí

Frecuencia con la que se programa la tarea de SQL programado. Cada programación genera una instancia de ejecución. El intervalo determina la hora programada para cada instancia.

  • FixedRate: programa la tarea a intervalos fijos. El intervalo se especifica mediante el parámetro interval.

  • Hourly: programa la tarea una vez cada hora.

  • Daily: programa la tarea una vez al día a una hora fija.

  • Cron: utiliza una expresión cron para definir la programación.

FixedRate

interval

String

No

Especifica el intervalo fijo cuando type es FixedRate.

  • 3s: 3 segundos.

  • 5m: 5 minutos.

  • 2h: 2 horas.

50m

cronExpression

String

No

Especifica la expresión cron cuando type es Cron.

La precisión mínima de una expresión cron es de un minuto, en formato de 24 horas. Por ejemplo, 0 0/1 * ejecuta la tarea cada hora a partir de las 00:00.

Para configurar una zona horaria, seleccione el modo Cron. Para consultar una lista de zonas horarias comunes, véase Time zone format.

N/A

runImmediately

boolean

No

Indica si se debe ejecutar la tarea programada de inmediato.

False

timeZone

String

No

Zona horaria para la expresión cron. El valor predeterminado está vacío, lo que equivale a UTC+8.

+0800

delay

int

No

Retraso posterior a la hora programada antes de iniciar la ejecución. Valores válidos: de 0 a 120. Unidad: segundos.

Si los datos escritos en un Logstore presentan retrasos o problemas similares, utilice la ejecución diferida para garantizar la integridad de los datos.

10

ScheduledSQLConfiguration

Llame a ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); para crear una configuración para la tarea de SQL programado. La siguiente tabla describe los parámetros.

Nombre del parámetro

Tipo

Obligatorio

Descripción

Ejemplo

script

String

Sí

Sentencia de consulta y análisis.

*|select count(1)

sqlType

String

Sí

Tipo de SQL. Establézcalo en searchQuery.

searchQuery

resourcePool

String

Sí

Tipo de pool de recursos. Establézcalo en enhanced. Simple Log Service proporciona pools de recursos mejorados para el análisis de datos.

enhanced

roleArn

String

Sí

ARN del rol de RAM utilizado para leer datos del Logstore de origen. Para obtener instrucciones sobre cómo conseguir un ARN, consulte Grant a custom RAM role permissions to access the source LogStore.

acs:ram::11111111:role/aliyunlogetlrole

destRoleArn

String

Sí

ARN del rol de RAM utilizado para escribir datos en el Logstore de destino. Para obtener instrucciones sobre cómo conseguir un ARN, consulte lo siguiente:

acs:ram::11111111:role/aliyunlogetlrole

sourceLogstore

String

Sí

Nombre del Logstore de origen.

source-logstore

destEndpoint

String

Sí

Endpoint del Logstore de destino.

Nota
  • Para comunicación interna entre servicios de Alibaba Cloud (por ejemplo, instancias ECS en la misma región que acceden a Simple Log Service), utilice un endpoint privado como http://cn-hangzhou-intranet.log.aliyuncs.com.

  • Para acceso público a Internet (por ejemplo, al usar API o SDK desde su computadora local), utilice un endpoint público como http://cn-hangzhou.log.aliyuncs.com.

  • El uso de un endpoint público genera cargos adicionales por tráfico de salida en comparación con un endpoint privado. Para obtener más información, consulte Billing items for Simple Log Service.

Para obtener más información, consulte Endpoints.

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

destProject

String

Sí

Nombre del proyecto de destino.

my-project

destLogstore

String

Sí

Nombre del Logstore de destino.

Aviso

No configure la base de datos de destino igual que la de origen. Hacerlo puede provocar que los registros se escriban en bucle, lo que generará cargos adicionales por almacenamiento y tráfico. Usted es responsable del consumo de recursos y las tarifas resultantes.

my-logstore

dataFormat

String

Sí

Modo de escritura.

  • log2log: importa registros de un Logstore a otro Logstore. Los datos del Logstore de origen se procesan mediante SQL programado y se almacenan en el Logstore de destino.

  • log2metric: importa registros de un Logstore a un Metricstore. Los datos del Logstore de origen se procesan mediante SQL programado y se almacenan en el Metricstore de destino.

  • metric2metric: importa métricas de un Metricstore a otro Metricstore. Los datos del Metricstore de origen se procesan mediante SQL programado y se almacenan en el Metricstore de destino.

log2log

fromTimeExpr

String

Sí

Expresión de inicio para la ventana de tiempo de SQL. Para obtener más información, consulte Time expression syntax.

@m - 12s

toTimeExpr

String

Sí

Expresión de fin para la ventana de tiempo de SQL. Para obtener más información, consulte Time expression syntax.

@m

maxRetries

Long

Sí

Número máximo de reintentos automáticos si falla la operación de análisis SQL. Si el conteo de reintentos supera este valor, la instancia de ejecución finaliza con estado de error.

10

maxRunTimeInSeconds

Long

Sí

Duración total máxima de reintentos, en segundos, si falla la operación de análisis SQL. Si la duración de los reintentos supera este valor, la instancia de ejecución finaliza con estado de error.

60

fromTime

Long

Sí

Hora de inicio de la programación.

Importante

Las instancias de ejecución solo se crean dentro de este rango de tiempo. No se generan nuevas instancias fuera de este intervalo.

1653965045

toTime

Long

Sí

Hora de fin de la programación. Establezca este valor en 0 para no definir una hora de finalización.

1653968045

parameters

Object

Sí

Cuando dataFormat es log2metric o metric2metric, configure los parámetros de SQL. Para más detalles, consulte Log2MetricParameters y Metric2MetricParameters.

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

parameters

  • Al configurar una tarea de SQL programado desde un Logstore hacia un Metricstore, también debe configurar los siguientes parámetros adicionales:

    Tabla 1. Log2MetricParameters

    Nombre del parámetro

    Ejemplo

    Descripción

    metricKeys

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

    Columnas de métricas, correspondientes a las columnas de métricas en la configuración de SQL de la consola.

    Simple Log Service agrega datos según su sentencia de consulta y análisis. Puede seleccionar una o varias columnas de tipo numérico de los resultados de la consulta como columnas de métricas. Para obtener más información, consulte Metrics.

    labelKeys

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

    Columnas de etiquetas, correspondientes a Labels en la configuración de SQL de la consola.

    Simple Log Service agrega datos según su sentencia de consulta y análisis. Puede seleccionar una o varias columnas de los resultados de la consulta como etiquetas. Para obtener más información, consulte Metrics.

    hashLabels

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

    Corresponde a Rehash en la configuración de SQL de la consola.

    Tras habilitar el interruptor Rehash, puede configurar hash columns para escribir los datos con el mismo valor de columna en un único shard. Esto mejora la localidad de los datos y la eficiencia de las consultas.

    Las hash columns disponibles dependen de sus resultados de consulta y análisis. Puede seleccionar una o varias columnas de los resultados como columnas hash. Por ejemplo, si establece hash columns en status, todos los datos con el mismo valor de status se escribirán en el mismo shard.

    addLabels

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

    Corresponde a Additional Labels en la configuración de SQL de la consola.

    Agregue etiquetas estáticas como pares clave-valor para identificar atributos de las métricas.

    Por ejemplo, establezca label_key en app y label_value en ingress-nginx.

    timeKey

    time

    Corresponde a Time Column en la configuración de SQL de la consola.

    • Si selecciona una columna de tiempo de los resultados de la consulta (con valores de marca de tiempo Unix, como atime:1627025331), el sistema utilizará esa columna como marca de tiempo de la métrica.

    • Si selecciona empty, el sistema usará la hora de inicio del rango de tiempo de la consulta como marca de tiempo de la métrica.

  • Al configurar una tarea de SQL programado desde un Metricstore hacia otro Metricstore, también debe configurar los siguientes parámetros adicionales:

    Tabla 2. Metric2MetricParameters

    Nombre del parámetro

    Ejemplo

    Descripción

    metricName

    my-metric

    Introduzca un nuevo nombre de métrica si desea cambiarle el nombre. Para obtener más información, consulte Metrics.

    Importante

    Se recomienda cambiar el nombre únicamente al analizar una sola métrica.

    Si analiza varias métricas y les cambia el nombre, todas compartirán el mismo nombre nuevo.

    hashLabels

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

    Corresponde a Rehash en la configuración de SQL de la consola.

    Tras habilitar el interruptor Rehash, puede configurar hash columns para escribir los datos con el mismo valor de etiqueta en un único shard. Esto mejora la localidad de los datos y la eficiencia de las consultas.

    Las hash columns disponibles dependen de las etiquetas existentes en los datos de la métrica. Por ejemplo, si los datos de la métrica incluyen las etiquetas {"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, las hash columns válidas son alert_id, alert_name y status. Si establece hash columns en status, todos los datos con el mismo valor de status se escribirán en el mismo shard.

    addLabels

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

    Corresponde a Additional Labels en la configuración de SQL de la consola.

    Agregue etiquetas estáticas como pares clave-valor para identificar atributos de las métricas.

    Por ejemplo, establezca label_key en app y label_value en ingress-nginx.

Parámetros de respuesta

Para consultar la descripción de los parámetros de respuesta, véase Create a scheduled SQL task.

Código de ejemplo

Este ejemplo crea un archivo App.java que almacena los resultados del análisis programado desde un Logstore de origen hacia un Logstore de destino. Código de ejemplo:

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();
        }
    }
} 

Referencias