All Products
Search
Document Center

Simple Log Service:Buat tugas SQL terjadwal

Last Updated:Jun 21, 2026

Panggil API CreateScheduledSQL untuk membuat tugas SQL terjadwal.

Catatan

SDK Simple Log Service tidak lagi memperbarui API yang terkait dengan SQL terjadwal. Gunakan Alibaba Cloud SDK untuk mengelola scheduled SQL:

Pada halaman debugging API CreateScheduledSQL di Alibaba Cloud OpenAPI Explorer, klik tab SDK Example di panel kanan. Pilih bahasa target Anda (Java, TypeScript, Go, PHP, Python, .NET, C++, dll.) untuk melihat contoh kode SDK yang sesuai. Anda dapat mengklik Run Example untuk debugging online atau Download Full Project.

Prasyarat

Informasi latar belakang

Simple Log Service menyediakan scheduled SQL untuk menganalisis data secara berkala, menyimpan data agregat, serta melakukan proyeksi dan penyaringan. Scheduled SQL mendukung sintaks SQL92 standar dan sintaks kueri serta analisis Simple Log Service. Fitur ini berjalan secara berkala berdasarkan aturan penjadwalan dan menulis hasilnya ke database tujuan (Logstore atau Metricstore).

Konsol Simple Log Service menyediakan antarmuka visual untuk membuat tugas scheduled SQL. Untuk detailnya, lihat Create a scheduled SQL task.

Selain itu, Simple Log Service menyediakan kelas ScheduledSQL, JobSchedule, dan ScheduledSQLConfiguration untuk menyederhanakan pembuatan tugas scheduled SQL melalui Java SDK.

  • ScheduledSQL: Membuat tugas scheduled SQL.

  • JobSchedule: Membuat konfigurasi penjadwalan untuk tugas scheduled SQL.

  • ScheduledSQLConfiguration: Membuat konfigurasi dasar untuk tugas scheduled SQL.

Deskripsi parameter

Parameter permintaan

Name

Type

Required

Description

Example

project

String

Yes

Nama proyek.

ali-test-project

scheduledSql

Object

Yes

Konfigurasi tugas scheduled SQL.

-

ScheduledSQL

Tabel berikut menjelaskan parameter tersebut.

Parameter Name

Type

Required

Description

Example

name

String

Yes

Nama tugas scheduled SQL. Ikuti aturan penamaan berikut:

  • Harus unik dalam proyek yang sama.

  • Hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).

  • Harus diawali dan diakhiri dengan huruf kecil atau angka.

  • Panjangnya harus antara 4 hingga 63 karakter.

export-123-456

displayName

String

Yes

Nama tampilan tugas scheduled SQL. Di konsol Simple Log Service, pilih Task Management > Scheduled SQL untuk melihat daftar nama tampilan.

my-scheduled-sql-job

description

String

No

Deskripsi tugas scheduled SQL.

this is a scheduled sql job.

configuration

Object

Yes

Konfigurasi scheduled SQL.

-

schedule

Object

Yes

Konfigurasi penjadwalan tugas.

-

JobSchedule

Panggil JobSchedule jobSchedule = new JobSchedule(); untuk membuat konfigurasi penjadwalan untuk tugas scheduled SQL. Tabel berikut menjelaskan parameter tersebut.

Parameter name

Type

Required

Description

Example

type

String

Yes

Frekuensi penjadwalan tugas scheduled SQL. Setiap jadwal menghasilkan satu instans eksekusi. Interval menentukan waktu terjadwal untuk setiap instans.

  • FixedRate: Menjadwalkan tugas pada interval tetap. Interval ditentukan oleh parameter interval.

  • Hourly: Menjadwalkan tugas sekali setiap jam.

  • Daily: Menjadwalkan tugas sekali per hari pada waktu tetap.

  • Cron: Menggunakan ekspresi cron untuk menentukan jadwal.

FixedRate

interval

String

No

Menentukan interval tetap ketika type adalah FixedRate.

  • 3s: 3 detik.

  • 5m: 5 menit.

  • 2h: 2 jam.

50m

cronExpression

String

No

Menentukan ekspresi cron ketika type adalah Cron.

Persis minimum ekspresi cron adalah satu menit, menggunakan format 24 jam. Misalnya, 0 0/1 * * * menjalankan tugas setiap jam mulai pukul 00.00.

Untuk mengonfigurasi zona waktu, pilih mode Cron. Untuk daftar zona waktu umum, lihat Time zone format.

N/A

runImmediately

boolean

No

Menentukan apakah tugas terjadwal dijalankan segera.

False

timeZone

String

No

Zona waktu untuk ekspresi cron. Nilai default kosong, artinya UTC+8.

+0800

delay

int

No

Penundaan setelah waktu terjadwal sebelum eksekusi dimulai. Nilai valid: 0 hingga 120. Satuan: detik.

Jika data yang ditulis ke Logstore mengalami penundaan atau masalah serupa, Anda dapat menggunakan eksekusi tertunda untuk memastikan integritas data.

10

ScheduledSQLConfiguration

Panggil ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); untuk membuat konfigurasi tugas scheduled SQL. Tabel berikut menjelaskan parameter tersebut.

Parameter Name

Type

Required

Description

Example

script

String

Yes

Pernyataan kueri dan analisis.

*|select count(1)

sqlType

String

Yes

Jenis SQL. Atur ke searchQuery.

searchQuery

resourcePool

String

Yes

Jenis kolam sumber daya. Atur ke enhanced. Simple Log Service menyediakan kolam sumber daya enhanced untuk analitik data.

enhanced

roleArn

String

Yes

ARN dari peran RAM yang digunakan untuk membaca data dari Logstore sumber. Untuk petunjuk cara mendapatkan ARN, lihat Grant a custom RAM role permissions to access the source LogStore.

acs:ram::11111111:role/aliyunlogetlrole

destRoleArn

String

Yes

ARN dari peran RAM yang digunakan untuk menulis data ke Logstore tujuan. Untuk petunjuk cara mendapatkan ARN, lihat berikut ini:

acs:ram::11111111:role/aliyunlogetlrole

sourceLogstore

String

Yes

Nama Logstore sumber.

source-logstore

destEndpoint

String

Yes

Titik akhir Logstore tujuan.

Catatan
  • Untuk komunikasi internal antar layanan Alibaba Cloud—misalnya, instance ECS di wilayah yang sama mengakses Simple Log Service—gunakan titik akhir pribadi seperti http://cn-hangzhou-intranet.log.aliyuncs.com.

  • Untuk akses Internet publik—misalnya, menggunakan API atau SDK dari mesin lokal Anda—gunakan titik akhir publik seperti http://cn-hangzhou.log.aliyuncs.com.

  • Menggunakan titik akhir publik mengakibatkan biaya tambahan lalu lintas keluar dibandingkan titik akhir pribadi. Untuk informasi selengkapnya, lihat Billing items for Simple Log Service.

Untuk informasi selengkapnya, lihat Endpoints.

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

destProject

String

Yes

Nama proyek tujuan.

my-project

destLogstore

String

Yes

Nama Logstore tujuan.

Peringatan

Jangan atur database tujuan sama dengan database sumber. Melakukan hal ini dapat menyebabkan log ditulis secara berulang-ulang, sehingga mengakibatkan biaya penyimpanan dan trafik tambahan. Anda bertanggung jawab atas konsumsi sumber daya dan biaya yang timbul.

my-logstore

dataFormat

String

Yes

Mode penulisan.

  • log2log: Mengimpor log dari Logstore ke Logstore lain. Data dari Logstore sumber diproses oleh scheduled SQL dan disimpan di Logstore tujuan.

  • log2metric: Mengimpor log dari Logstore ke Metricstore. Data dari Logstore sumber diproses oleh scheduled SQL dan disimpan di Metricstore tujuan.

  • metric2metric: Mengimpor metrik dari Metricstore ke Metricstore lain. Data dari Metricstore sumber diproses oleh scheduled SQL dan disimpan di Metricstore tujuan.

log2log

fromTimeExpr

String

Yes

Ekspresi awal untuk jendela waktu SQL. Untuk informasi selengkapnya, lihat Time expression syntax.

@m - 12s

toTimeExpr

String

Yes

Ekspresi akhir untuk jendela waktu SQL. Untuk informasi selengkapnya, lihat Time expression syntax.

@m

maxRetries

Long

Yes

Jumlah maksimum percobaan ulang otomatis jika operasi analisis SQL gagal. Jika jumlah percobaan melebihi nilai ini, instans eksekusi akan berakhir dengan status gagal.

10

maxRunTimeInSeconds

Long

Yes

Durasi total maksimum percobaan ulang dalam detik jika operasi analisis SQL gagal. Jika durasi percobaan melebihi nilai ini, instans eksekusi akan berakhir dengan status gagal.

60

fromTime

Long

Yes

Waktu mulai penjadwalan.

Penting

Instans eksekusi hanya dibuat dalam rentang waktu ini. Tidak ada instans baru yang dibuat di luar rentang ini.

1653965045

toTime

Long

Yes

Waktu akhir penjadwalan. Atur ke 0 untuk tanpa waktu akhir.

1653968045

parameters

Object

Yes

Ketika dataFormat adalah log2metric atau metric2metric, konfigurasikan parameter SQL. Untuk detailnya, lihat Log2MetricParameters dan Metric2MetricParameters.

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

parameters

  • Ketika mengonfigurasi tugas scheduled SQL dari Logstore ke Metricstore, Anda juga harus mengonfigurasi parameter tambahan berikut:

    Tabel 1. Log2MetricParameters

    Parameter Name

    Example

    Description

    metricKeys

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

    Kolom metrik, sesuai dengan kolom metrik dalam konfigurasi SQL konsol.

    Simple Log Service mengagregasi data berdasarkan pernyataan kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom bertipe numerik dari hasil kueri sebagai kolom metrik. Untuk informasi selengkapnya, lihat Metrics.

    labelKeys

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

    Kolom label, sesuai dengan Labels dalam konfigurasi SQL konsol.

    Simple Log Service mengagregasi data berdasarkan pernyataan kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom dari hasil kueri sebagai label. Untuk informasi selengkapnya, lihat Metrics.

    hashLabels

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

    Sesuai dengan Rehash dalam konfigurasi SQL konsol.

    Setelah mengaktifkan sakelar Rehash, Anda dapat mengonfigurasi hash columns untuk menulis data dengan nilai kolom yang sama ke dalam satu shard. Hal ini meningkatkan lokalitas data dan efisiensi kueri.

    hash columns yang tersedia bergantung pada hasil kueri dan analisis Anda. Anda dapat memilih satu atau beberapa kolom dari hasil sebagai hash columns. Misalnya, jika Anda mengatur hash columns ke status, semua data dengan nilai status yang sama akan ditulis ke shard yang sama.

    addLabels

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

    Sesuai dengan Additional Labels dalam konfigurasi SQL konsol.

    Tambahkan label statis sebagai pasangan kunci-nilai untuk mengidentifikasi atribut metrik.

    Misalnya, atur label_key ke app dan label_value ke ingress-nginx.

    timeKey

    time

    Sesuai dengan Time Column dalam konfigurasi SQL konsol.

    • Jika Anda memilih kolom waktu dari hasil kueri (dengan nilai timestamp Unix, seperti atime:1627025331), sistem akan menggunakan kolom tersebut sebagai timestamp metrik.

    • Jika Anda memilih empty, sistem akan menggunakan waktu mulai rentang waktu kueri sebagai timestamp metrik.

  • Ketika mengonfigurasi tugas scheduled SQL dari Metricstore ke Metricstore lain, Anda juga harus mengonfigurasi parameter tambahan berikut:

    Tabel 2. Metric2MetricParameters

    Parameter Name

    Example

    Description

    metricName

    my-metric

    Masukkan nama metrik baru jika Anda ingin mengganti nama metrik. Untuk informasi selengkapnya, lihat Metrics.

    Penting

    Kami merekomendasikan penggantian nama hanya saat menganalisis satu metrik.

    Jika Anda menganalisis beberapa metrik dan mengganti namanya, semua metrik akan memiliki nama baru yang sama.

    hashLabels

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

    Sesuai dengan Rehash dalam konfigurasi SQL konsol.

    Setelah mengaktifkan sakelar Rehash, Anda dapat mengonfigurasi hash columns untuk menulis data dengan nilai label yang sama ke dalam satu shard. Hal ini meningkatkan lokalitas data dan efisiensi kueri.

    hash columns yang tersedia bergantung pada label yang ada dalam data metrik. Misalnya, jika data metrik mencakup label {"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, hash columns yang valid adalah alert_id, alert_name, dan status. Jika Anda mengatur hash columns ke status, semua data dengan nilai status yang sama akan ditulis ke shard yang sama.

    addLabels

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

    Sesuai dengan Additional Labels dalam konfigurasi SQL konsol.

    Tambahkan label statis sebagai pasangan kunci-nilai untuk mengidentifikasi atribut metrik.

    Misalnya, atur label_key ke app dan label_value ke ingress-nginx.

Parameter respons

Untuk deskripsi parameter respons, lihat Create a scheduled SQL task.

Kode contoh

Contoh ini membuat file App.java yang menyimpan hasil analisis terjadwal dari Logstore sumber ke Logstore tujuan. Kode contoh:

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 {
    // Contoh ini mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
    static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    // Atur nama proyek dan Logstore.
    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";
    // Atur titik akhir Simple Log Service. Contoh ini menggunakan wilayah China (Hangzhou). Ganti dengan wilayah Anda.
    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();
        }
    }
} 

Referensi