CreateScheduledSQL 操作を使用して、スケジュールされた SQL タスクを作成します。
スケジュールされた SQL 用の Simple Log Service ソフトウェア開発キット (SDK) は更新されなくなりました。Alibaba Cloud SDK を使用して スケジュールされた SQL を管理してください。

前提条件
Simple Log Service が有効化されていること。 詳細については、「Simple Log Service の有効化」をご参照ください。
Simple Log Service SDK for Java が初期化されていること。 詳細については、「Simple Log Service SDK for Java の初期化」をご参照ください。
背景情報
Simple Log Service は、定期的にデータを分析し、集計データを保存し、データを投影およびフィルター処理するためのスケジュールされた SQL 機能を提供します。 スケジュールされた SQL タスクは、標準の SQL-92 と Simple Log Service のクエリおよび分析構文をサポートします。 タスクはスケジューリングルールに基づいて定期的に実行され、結果をターゲットデータベース (Logstore または Metricstore) に書き込みます。
Simple Log Service コンソールでスケジュールされた SQL タスクを作成できます。 詳細については、「スケジュールされた SQL タスクの作成」をご参照ください。
Simple Log Service は、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 タスクの表示名。 Simple Log Service コンソールで、 を選択して、スケジュールされた 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 タスクのスケジューling タスクを作成します。 次の表にパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 | 例 |
type | String | はい | スケジュールされた SQL タスクがスケジュールされる頻度。 タスクがスケジュールされるたびに、実行インスタンスが生成されます。 スケジューリング間隔によって、各実行インスタンスのスケジューリング時間が決まります。
| FixedRate |
interval | String | いいえ | type が FixedRate に設定されている場合の固定間隔を指定します。
| 50m |
cronExpression | String | いいえ | type を Cron に設定した場合は、cron 式を設定します。 cron 式は分単位で正確で、24 時間制を使用します。 たとえば、 タイムゾーンを設定するには、スケジューリングタイプを [Cron] に設定する必要があります。 詳細については、「タイムゾーン」をご参照ください。 | なし |
runImmediately | boolean | いいえ | スケジュールされたタスクをすぐに実行するかどうかを指定します。 | False |
timeZone | String | いいえ | cron 式のタイムゾーン。 デフォルト値は空で、UTC + 08:00 を示します。 | +0800 |
delay | int | いいえ | スケジュールされた時刻の後の実行を遅延させる時間。 単位: 秒。 有効値: 0 ~ 120。 データが遅延して Logstore に書き込まれる場合、データ整合性を確保するために遅延実行を構成できます。 | 10 |
ScheduledSQLConfiguration
ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); を使用して、スケジュールされた SQL タスクの構成を作成します。 次の表にパラメーターを示します。
パラメーター | タイプ | 必須 | 説明 | 例 |
script | String | はい | クエリ文。 | *|select count(1) |
sqlType | String | はい | SQL タイプ。 値は searchQuery に固定されています。 | searchQuery |
resourcePool | String | はい | リソースプールのタイプ。 値は enhanced に固定されています。 Simple Log Service は、データ分析用に拡張リソースプールを提供します。 | enhanced |
roleArn | String | はい | ソース Logstore からデータを読み取るために使用される RAM ロールの Alibaba Cloud リソースネーム (ARN)。 ARN の取得方法の詳細については、「ソース Logstore のデータを分析する権限をカスタム RAM ロールに付与する」をご参照ください。 |
|
destRoleArn | String | はい | ターゲット Logstore にデータを書き込むために使用される RAM ロールの ARN。 ARN の取得方法の詳細については、次の Topic をご参照ください:
|
|
sourceLogstore | String | はい | ソース Logstore の名前。 | source-logstore |
destEndpoint | String | はい | ターゲット Logstore のエンドポイント。 説明
詳細については、「エンドポイント」をご参照ください。 |
|
destProject | String | はい | ターゲットプロジェクトの名前。 | my-project |
destLogstore | String | はい | ターゲット Logstore の名前。 | 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 タスクを使用して Logstore から Metricstore にデータをインポートする場合は、次のパラメーターも構成する必要があります:
表 1. Log2MetricParameters
パラメーター
例
説明
metricKeys
"[\"a\", \"b\", \"c\"]"メトリック列。これは、コンソールの [SQL 設定] セクションの [メトリック列] パラメーターに対応します。
Simple Log Service は、クエリ文に基づいてデータを集計します。クエリ結果から数値を含む 1 つ以上の列をメトリック列として選択できます。詳細については、「時系列データ」をご参照ください。
labelKeys
"[\"d\", \"e\", \"f\"]"ラベル列。これは、コンソールの [SQL 設定] セクションの [ラベル] パラメーターに対応します。
Simple Log Service は、クエリ文に基づいてデータを集計します。クエリ結果から 1 つ以上の列をラベルデータとして選択できます。詳細については、「時系列データ」をご参照ください。
hashLabels
"[\"d\", \"f\"]"これは、コンソールの [SQL 設定] セクションの [再ハッシュ] パラメーターに対応します。
[再ハッシュ] を有効にすると、[ハッシュ列] を設定できます。これにより、同じ列値を持つデータが同じシャードに書き込まれ、データの局所性とクエリパフォーマンスが向上します。
[ハッシュ列] の値はクエリ結果に依存します。クエリ結果から 1 つ以上の列をハッシュ列として選択できます。たとえば、[ハッシュ列] を status に設定した場合、status フィールドの値が同じデータは同じシャードに書き込まれます。
addLabels
"[\"m\":\"h\", \"n\":\"i\"]"これは、コンソールの [SQL 設定] セクションの [追加ラベル] パラメーターに対応します。
キーと値のペアで静的ラベルを追加して、メトリックのプロパティを識別します。
たとえば、label_key を app に、label_value を ingress-nginx に設定します。
timeKey
time
これは、コンソールの [SQL 設定] セクションの [時間列] パラメーターに対応します。
クエリ結果から時間列を選択した場合 (列の値は
atime:1627025331などの UNIX タイムスタンプ)、システムはこの列を時系列データの時間として使用します。[空] を選択した場合、システムはクエリ時間範囲の開始時刻を時系列データの時間として使用します。

Scheduled SQL タスクを使用して Metricstore から Metricstore にデータをインポートする場合、次のパラメーターも設定する必要があります。
表 2. Metric2MetricParameters
パラメーター
例
説明
metricName
my-metric
分析しているメトリックの名前を変更する場合は、新しいメトリック名を入力できます。詳細については、「時系列データ」をご参照ください。
重要単一のメトリックを分析している場合にのみ、メトリック名を変更することをお勧めします。これにより、メトリックの名前が変更されます。
複数のメトリックを分析している場合、メトリック名を変更すると、すべてのメトリックが同じ新しい名前に変更されます。
hashLabels
"{\"m\":\"h\", \"n\":\"i\"}"これは、コンソールの SQL Configurations セクションの Rehash パラメーターに対応します。
[再ハッシュ] を有効にすると、[ハッシュ列] を設定できます。これにより、同じラベル値を持つデータが同じシャードに書き込まれるようになり、データの局所性とクエリのパフォーマンスが向上します。
[ハッシュ列] の値は、時系列データの既存のラベル情報によって異なります。たとえば、既存のラベル情報が
{"alert_id":"alert-1608815762-545495","alert_name":"alert_closed","status":"inactive"}の場合、[ハッシュ列] の有効な値は alert_id、alert_name、および status です。[ハッシュ列] を status に設定した場合、status フィールドに同じ値を持つデータが同じシャードに書き込まれます。addLabels
"{\"m\":\"h\", \"n\":\"i\"}"これは、コンソールの SQL Configurations セクションの Additional Labels パラメーターに対応します。
キーと値のペアで静的ラベルを追加して、メトリックのプロパティを識別します。
たとえば、label_key を app に設定し、label_value を ingress-nginx に設定します。

レスポンスパラメーター
レスポンスパラメーターの詳細については、「CreateScheduledSQL」をご参照ください。
例
この例では、ソース Logstore からの分析結果を宛先 Logstore に格納する 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");
// プロジェクト名と Logstore 名を設定します。
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";
// Simple Log Service のエンドポイントを設定します。この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の エンドポイントに置き換えてください。
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();
}
}
} 関連資料
Scheduled SQL タスクを管理するために呼び出すことができる API 操作の詳細については、以下のトピックをご参照ください。
その他のサンプルコードについては、GitHub の「Alibaba Cloud Simple Log Service SDK for Java」をご参照ください。