CreateScheduledSQL API を呼び出して、スケジュール済み SQL タスクを作成します。
Simple Log Service (SLS) のスケジュール済み SQL 機能向け SDK は更新されなくなりました。Alibaba Cloud SDK を使用してスケジュール済み SQL を管理してください。

前提条件
Simple Log Service が有効化されていること。詳細については、「Simple Log Service の有効化」をご参照ください。
Java 向け Simple Log Service SDK が初期化されていること。詳細については、「Java 向け Simple Log Service SDK の初期化」をご参照ください。
背景情報
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 タスクの名前。名前は次のルールに従う必要があります。
| export-123-456 |
displayName | String | はい | スケジュール済み SQL タスクの表示名。SLS コンソールで を選択すると、スケジュール済み 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 |
interval | String | いいえ | type が FixedRate に設定されている場合、固定間隔を指定します。
| 50m |
cronExpression | String | いいえ | type を Cron に設定する場合、cron 式を設定します。 cron 式は分単位まで正確で、24 時間表記を使用します。たとえば、 タイムゾーンを設定するには、スケジューリングタイプを 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 ロールにソースログストアのデータ分析権限を付与する」をご参照ください。 |
|
destRoleArn | String | はい | 送信先ログストアにデータを書き込むために使用する RAM ロールの ARN。ARN の取得方法については、以下のトピックをご参照ください。
|
|
sourceLogstore | String | はい | ソースログストアの名前。 | source-logstore |
destEndpoint | String | はい | 送信先ログストアのエンドポイント。 説明
詳細については、「エンドポイント」をご参照ください。 |
|
destProject | String | はい | 送信先プロジェクトの名前。 | my-project |
destLogstore | String | はい | 送信先ログストアの名前。 警告 送信先ストアを現在のソースストア(同一ソース構成)に設定しないでください。そうしないと、ログがループして書き込まれ、追加のストレージおよびトラフィックコストが発生します。リソース消費およびコストはお客様のご負担となります。 | my-logstore |
dataFormat | String | はい | 書き込みモード。
| 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 | はい | dataFormat を log2metric または metric2metric に設定する場合、SQL パラメーターを設定します。設定項目の詳細については、「Log2MetricParameters」および「Metric2MetricParameters」をご参照ください。 | |
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_key を app に、label_value を ingress-nginx に設定します。
timeKey
time
これはコンソールの [SQL 構成] セクションの [時間列] パラメーターに対応します。
クエリ結果から時間列を選択する場合(列値が UNIX タイムスタンプ、例:
atime:1627025331)、その列を時系列データの時間として使用します。空 を選択する場合、クエリ時間範囲の開始時刻を時系列データの時間として使用します。

スケジュール済み 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_id、alert_name、および status です。ハッシュ列 を status に設定すると、status フィールドの値が同じデータが同じシャードに書き込まれます。addLabels
"{\"m\":\"h\", \"n\":\"i\"}"これはコンソールの [SQL 構成] セクションの [追加ラベル] パラメーターに対応します。
メトリックのプロパティを識別するために、キーと値のペアで静的ラベルを追加します。
たとえば、label_key を app に、label_value を ingress-nginx に設定します。

レスポンスパラメーター
レスポンスパラメーターの詳細については、「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();
}
}
} 参照
スケジュール済み SQL タスクを管理するための API オペレーションの詳細については、以下のトピックをご参照ください。
GitHub 上の「Alibaba Cloud Simple Log Service SDK for Java」。