Invoque la API CreateScheduledSQL para crear una tarea de SQL programada.
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
Simple Log Service está activado. Para obtener más información, consulte Activar Simple Log Service.
El SDK de Simple Log Service para Java está inicializado. Para obtener más información, consulte Initialize Simple Log Service SDK for Java.
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:
|
export-123-456 |
|
displayName |
String |
Sí |
Nombre para mostrar de la tarea de SQL programado. En la consola de Simple Log Service, seleccione 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 |
|
interval |
String |
No |
Especifica el intervalo fijo cuando type es FixedRate.
|
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, 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. |
|
|
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:
|
|
|
sourceLogstore |
String |
Sí |
Nombre del Logstore de origen. |
source-logstore |
|
destEndpoint |
String |
Sí |
Endpoint del Logstore de destino. Nota
Para obtener más información, consulte Endpoints. |
|
|
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 |
|
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. |
|
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.
ImportanteSe 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
-
Para consultar las API destinadas a gestionar tareas de SQL programado, véase:
SDK de Simple Log Service de Alibaba Cloud para Java en GitHub.