すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:スケジュール済み SQL タスクの作成

最終更新日:May 10, 2026

CreateScheduledSQL API を呼び出して、スケジュール済み SQL タスクを作成します。

説明

Simple Log Service (SLS) のスケジュール済み SQL 機能向け SDK は更新されなくなりました。Alibaba Cloud SDK を使用してスケジュール済み SQL を管理してください。

image

前提条件

背景情報

SLS では、スケジュール済み SQL 機能により、データを定期的に分析・集計し、データの射影およびフィルター処理を行うことができます。スケジュール済み SQL タスクは標準 SQL-92 および SLS のクエリと分析構文をサポートしています。このタスクはスケジューリングルールに基づいて定期的に実行され、結果をターゲットデータベース(Logstore または Metricstore)に書き込みます。

SLS コンソールからスケジュール済み SQL タスクを作成することもできます。詳細については、「スケジュール済み SQL タスクの作成」をご参照ください。

SLS では、Java SDK を使用してスケジュール済み SQL タスクを作成するための ScheduledSQL、JobSchedule、および ScheduledSQLConfiguration クラスも提供しています。

  • ScheduledSQL:スケジュール済み SQL タスクを作成します。

  • JobSchedule:スケジュール済み SQL タスクのスケジューリングタスクを作成します。

  • ScheduledSQLConfiguration:スケジュール済み SQL タスクの基本構成を作成します。

パラメーター

リクエストパラメーター

パラメーター

必須

説明

project

String

はい

プロジェクト名。

ali-test-project

scheduledSql

Object

はい

スケジュール済み SQL タスクの構成。

-

ScheduledSQL

以下の表はパラメーターを示しています。

パラメーター

必須

説明

name

String

はい

スケジュール済み SQL タスクの名前。名前は次のルールに従う必要があります。

  • プロジェクト内で一意である必要があります。

  • 小文字、数字、ハイフン (-)、アンダースコア (_) のみを使用できます。

  • 先頭および末尾は小文字または数字でなければなりません。

  • 長さは 4~63 文字である必要があります。

export-123-456

displayName

String

はい

スケジュール済み SQL タスクの表示名。SLS コンソールで タスク管理 > スケジュール済み SQL を選択すると、スケジュール済み SQL タスクの表示名の一覧を確認できます。

my-scheduled-sql-job

description

String

いいえ

スケジュール済み SQL タスクの説明。

this is a scheduled sql job.

configuration

Object

はい

スケジュール済み SQL タスクの構成。

-

schedule

Object

はい

タスクのスケジューリング構成。

-

JobSchedule

JobSchedule jobSchedule = new JobSchedule(); を使用して、スケジュール済み SQL タスクのスケジューリングタスクを作成します。以下の表はパラメーターを示しています。

パラメーター

必須

説明

type

String

はい

スケジュール済み SQL タスクのスケジューリング頻度。タスクがスケジュールされるたびに実行インスタンスが生成されます。スケジューリング間隔によって、各実行インスタンスのスケジュール時刻が決定されます。

  • FixedRate:固定間隔でスケジュール済み SQL タスクをスケジュールします。間隔は interval パラメーターで指定します。

  • 毎時: スケジュール SQL タスクは、1 時間ごとにスケジュールされます。

  • 毎日:スケジュールされた SQL タスクは、1 日に 1 回、固定時刻にスケジュールされます。

  • Cron:スケジュールされた SQL タスクは、cron 式で指定された間隔でスケジュールされます。

FixedRate

interval

String

いいえ

typeFixedRate に設定されている場合、固定間隔を指定します。

  • 3s:3 秒。

  • 5m:5 分。

  • 2h:2 時間。

50m

cronExpression

String

いいえ

typeCron に設定する場合、cron 式を設定します。

cron 式は分単位まで正確で、24 時間表記を使用します。たとえば、0 0/1 * * * は、00:00 から 1 時間ごとにタスクを実行することを意味します。

タイムゾーンを設定するには、スケジューリングタイプを Cron に設定する必要があります。一般的なタイムゾーンの一覧については、「タイムゾーン形式」をご参照ください。

None

runImmediately

boolean

いいえ

スケジュールされたタスクを直ちに実行するかどうかを指定します。

False

timeZone

String

いいえ

cron 式のタイムゾーン。デフォルト値は空で、UTC + 08:00 を示します。

+0800

delay

int

いいえ

スケジュール時刻後の実行遅延時間。単位は秒です。有効値:0~120。

ログストアへのデータ書き込みが遅延している場合は、遅延実行を設定してデータ整合性を確保してください。

10

ScheduledSQLConfiguration

ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); を使用して、スケジュール済み SQL タスクの構成を作成します。以下の表はパラメーターを示しています。

パラメーター

必須

説明

script

String

はい

クエリ文。

*|select count(1)

sqlType

String

はい

SQL の種類。値は searchQuery に固定されています。

searchQuery

resourcePool

String

はい

リソースプールのタイプ。値は enhanced に固定されています。SLS では、データ分析用に拡張リソースプールを提供しています。

enhanced

roleArn

String

はい

ソースログストアからデータを読み取るために使用する RAM ロールの Alibaba Cloud リソースネーム (ARN)。ARN の取得方法については、「カスタム RAM ロールにソースログストアのデータ分析権限を付与する」をご参照ください。

acs:ram::11111111:role/aliyunlogetlrole

destRoleArn

String

はい

送信先ログストアにデータを書き込むために使用する RAM ロールの ARN。ARN の取得方法については、以下のトピックをご参照ください。

acs:ram::11111111:role/aliyunlogetlrole

sourceLogstore

String

はい

ソースログストアの名前。

source-logstore

destEndpoint

String

はい

送信先ログストアのエンドポイント。

説明
  • Alibaba Cloud サービス間の通信。たとえば、同一リージョン内の ECS インスタンスから SLS にアクセスする場合は、プライベートエンドポイントを使用します。プライベートエンドポイントは http://cn-hangzhou-intranet.log.aliyuncs.com です。

  • インターネット経由での SLS へのアクセス。たとえば、オンプレミスマシンから API または SDK を使用してインターネット経由で SLS にアクセスする場合は、パブリックエンドポイントを使用します。パブリックエンドポイントは http://cn-hangzhou.log.aliyuncs.com です。

  • プライベートエンドポイントと比較して、パブリックエンドポイントはインターネット経由のアウトバウンドトラフィックに対して課金されます。詳細については、「Simple Log Service の課金項目」をご参照ください。

詳細については、「エンドポイント」をご参照ください。

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

destProject

String

はい

送信先プロジェクトの名前。

my-project

destLogstore

String

はい

送信先ログストアの名前。

警告

送信先ストアを現在のソースストア(同一ソース構成)に設定しないでください。そうしないと、ログがループして書き込まれ、追加のストレージおよびトラフィックコストが発生します。リソース消費およびコストはお客様のご負担となります。

my-logstore

dataFormat

String

はい

書き込みモード。

  • log2log:ログストアからログストアへデータをインポートします。つまり、ソースログストアからのデータをスケジュール済み SQL タスクで処理し、送信先ログストアに格納します。

  • log2metric:ログストアから Metricstore へデータをインポートします。つまり、ソースログストアからのデータをスケジュール済み SQL タスクで処理し、送信先 Metricstore に格納します。

  • metric2metric:Metricstore から Metricstore へデータをインポートします。つまり、ソース Metricstore からのデータをスケジュール済み SQL タスクで処理し、送信先 Metricstore に格納します。

log2log

fromTimeExpr

String

はい

SQL タイムウィンドウの開始を表す式。詳細については、「時間式構文」をご参照ください。

@m - 12s

toTimeExpr

String

はい

SQL タイムウィンドウの終了を表す式。詳細については、「時間式構文」をご参照ください。

@m

maxRetries

Long

はい

SQL 分析が失敗した場合の最大再試行回数。この値を超えると、実行インスタンスは停止して失敗します。

10

maxRunTimeInSeconds

Long

はい

SQL 分析の最大ランタイム。ランタイムがこの値を超えると、実行インスタンスは停止して失敗します。

60

fromTime

Long

はい

スケジューリングの開始時刻。

重要

インスタンスのスケジュール時刻はこの範囲内である必要があります。範囲外の場合は、スケジュール済み SQL タスクは新しいインスタンスを生成しなくなります。

1653965045

toTime

Long

はい

スケジューリングの終了時刻。0 を指定すると、スケジューリングは終了しません。

1653968045

parameters

Object

はい

dataFormatlog2metric または metric2metric に設定する場合、SQL パラメーターを設定します。設定項目の詳細については、「Log2MetricParameters」および「Metric2MetricParameters」をご参照ください。

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

parameters

  • スケジュール済み SQL タスクを使用してログストアから Metricstore にデータをインポートする場合、以下のパラメーターも設定する必要があります。

    表 1. Log2MetricParameters

    パラメーター

    説明

    metricKeys

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

    メトリック列。これはコンソールの [SQL 構成] セクションの [メトリック列] パラメーターに対応します。

    SLS はクエリ文に基づいてデータを集計します。クエリ結果から数値を含む 1 つ以上の列をメトリック列として選択します。詳細については、「時系列データ」をご参照ください。

    labelKeys

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

    ラベル列。これはコンソールの [SQL 構成] セクションの [ラベル] パラメーターに対応します。

    SLS はクエリ文に基づいてデータを集計します。クエリ結果から 1 つ以上の列をラベルデータとして選択します。詳細については、「時系列データ」をご参照ください。

    hashLabels

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

    これはコンソールの [SQL 構成] セクションの [再ハッシュ] パラメーターに対応します。

    再ハッシュ を有効化した後、ハッシュ列 を設定します。これにより、同じ列値を持つデータが同じシャードに書き込まれ、データ局所性およびクエリパフォーマンスが向上します。

    ハッシュ列 の値はクエリ結果に依存します。クエリ結果から 1 つ以上の列をハッシュ列として選択します。たとえば、ハッシュ列status に設定すると、status フィールドの値が同じデータが同じシャードに書き込まれます。

    addLabels

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

    これはコンソールの [SQL 構成] セクションの [追加ラベル] パラメーターに対応します。

    メトリックのプロパティを識別するために、キーと値のペアで静的ラベルを追加します。

    たとえば、label_keyapp に、label_valueingress-nginx に設定します。

    timeKey

    time

    これはコンソールの [SQL 構成] セクションの [時間列] パラメーターに対応します。

    • クエリ結果から時間列を選択する場合(列値が UNIX タイムスタンプ、例:atime:1627025331)、その列を時系列データの時間として使用します。

    • を選択する場合、クエリ時間範囲の開始時刻を時系列データの時間として使用します。

    Log2MetricParameters

  • スケジュール済み SQL タスクを使用して Metricstore から Metricstore にデータをインポートする場合、以下のパラメーターも設定する必要があります。

    表 2. Metric2MetricParameters

    パラメーター

    説明

    metricName

    my-metric

    分析中のメトリックの名前を変更したい場合は、新しいメトリック名を入力できます。詳細については、「時系列データ」をご参照ください。

    重要

    単一のメトリックを分析している場合にのみ、メトリック名を変更することを推奨します。これにより、メトリックの名前が変更されます。

    複数のメトリックを分析している場合、メトリック名を変更すると、すべてのメトリックが同じ新しい名前に変更されます。

    hashLabels

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

    これはコンソールの [SQL 構成] セクションの [再ハッシュ] パラメーターに対応します。

    再ハッシュ を有効化した後、ハッシュ列 を設定できます。これにより、同じラベル値を持つデータが同じシャードに書き込まれ、データ局所性およびクエリパフォーマンスが向上します。

    ハッシュ列 の値は、時系列データの既存のラベル情報に依存します。たとえば、既存のラベル情報が {"alert_id":"alert-1608815762-545495","alert_name":"alert_closed","status":"inactive"} の場合、ハッシュ列 の有効な値は alert_idalert_name、および status です。ハッシュ列status に設定すると、status フィールドの値が同じデータが同じシャードに書き込まれます。

    addLabels

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

    これはコンソールの [SQL 構成] セクションの [追加ラベル] パラメーターに対応します。

    メトリックのプロパティを識別するために、キーと値のペアで静的ラベルを追加します。

    たとえば、label_keyapp に、label_valueingress-nginx に設定します。

    Metric2MetricParameters

レスポンスパラメーター

レスポンスパラメーターの詳細については、「CreateScheduledSQL」をご参照ください。

コード例

この例では、ソースログストアからの分析結果を送信先ログストアに格納する App.java ファイルを作成する方法を示します。

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 {
    // この例では、AccessKey ID および AccessKey Secret を環境変数から取得します。
    static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    // プロジェクトおよびログストア名を設定します。
    static String sourceProject="ali-test-project";
    static String destProject="my-project";
    static String sourceLogstore = "source-logstore";
    static String destLogstore = "my-logstore";
    static String roleArn = "acs:ram::11111111:role/aliyunlogetlrole";
    // SLS のエンドポイントを設定します。この例では中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントに置き換えてください。
    static String endpoint = "http://cn-hangzhou.log.aliyuncs.com";
    static String destEndpoint = "http://cn-hangzhou-intranet.log.aliyuncs.com";
    static long fromTime = 1648105200; // 2022 年 3 月 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("export-123-456");
        scheduledSQLStructure.setDisplayName("my-scheduled-sql-job");
        scheduledSQLStructure.setDescription("This is a scheduled SQL job.");
        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();
        }
    }
} 

参照