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

Simple Log Service:スケジュールされた SQL ジョブの作成

最終更新日:Nov 09, 2025

CreateScheduledSQL 操作を呼び出して、スケジュールされた SQL ジョブを作成します。

説明

Scheduled SQL 用の Simple Log Service ソフトウェア開発キット (SDK) は更新されなくなりました。Alibaba Cloud SDK を使用して Scheduled SQL を管理します。

image

前提条件

  • Simple Log Service が 有効化されています。

  • Simple Log Service SDK for Python が 初期化されています。

パラメーター

def create_scheduled_sql(self, project_name, scheduled_sql):

リクエストパラメーター

名前

必須

説明

project_name

文字列

はい

プロジェクトの名前。

ali-test-project

scheduled_sql

オブジェクト

はい

スケジュールされた SQL ジョブの構成。

-

scheduled_sql パラメーター

名前

必須

説明

name

文字列

はい

スケジュールされた SQL ジョブの名前。名前は次の要件を満たす必要があります:

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

  • 名前には、小文字、数字、ハイフン (-)、およびアンダースコア (_) のみを含めることができます。

  • 名前は小文字または数字で開始および終了する必要があります。

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

test-001

displayName

文字列

はい

ジョブの表示名。

test-001

description

文字列

いいえ

ジョブの説明。

スケジュールされた SQL ジョブを作成します。

schedule

オブジェクト

はい

ジョブのスケジューリング構成。

-

configuration

オブジェクト

はい

スケジュールされた SQL ジョブの構成。

-

schedule パラメーター

名前

必須

説明

type

文字列

はい

スケジュールされた SQL ジョブのタイプ。次の 5 つの値がサポートされています:

  • Cron: ジョブは、cronExpression パラメーターに指定した cron 式 に基づいてスケジュールされます。

  • Hourly: ジョブは 1 時間ごとに正時に実行されます。

  • Daily: ジョブは、hour パラメーターに指定した時刻に毎日 1 回実行されます。

  • Weekly: ジョブは、dayOfWeek および hour パラメーターに指定した曜日と時刻に毎週 1 回実行されます。

  • FixedRate: ジョブは固定の間隔で実行されます。interval パラメーターで間隔を指定できます。

Cron

cronExpression

文字列

いいえ

cron 式

0/5 * * * *

runImmediately

bool

いいえ

スケジュールされたジョブをすぐに実行するかどうかを指定します。

False

timeZone

文字列

いいえ

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

+0800

delay

int

いいえ

ジョブが実行されるまでの遅延。単位: 秒。値は 86400 を超えることはできません。

4

interval

文字列

いいえ

type を FixedRate に設定した場合、このパラメーターは実行間隔を指定します。値は 30 日を超えることはできません。次の単位がサポートされています: d (日)、h (時間)、m (分)、s (秒)。例: 3h。複数の単位を指定することはできません。たとえば、3h5m はサポートされていません。

1m

Configuration パラメーター

名前

必須

説明

script

文字列

はい

スケジュールされた SQL ジョブの分析文。

* | select *

sqlType

文字列

はい

SQL 文のタイプ。

searchQuery

destEndpoint

文字列

はい

宛先のエンドポイント。

cn-hangzhou-intranet.log.aliyuncs.com

destProject

文字列

はい

宛先プロジェクト。

project-demo

sourceLogstore

文字列

はい

ソース Logstore。

source-logstore-demo

destLogstore

文字列

はい

宛先 Logstore。

dest-logstore-demo

roleArn

文字列

はい

SQL 文を実行するために偽装される RAM ロールの Alibaba Cloud リソースネーム (ARN)。

acs:ram::123456789:role/aliyunlogetlrole

destRoleArn

文字列

はい

宛先にデータを書き込むために偽装される RAM ロールの ARN。

acs:ram::123456789:role/aliyunlogetlrole

fromTimeExpr

文字列

はい

SQL タイムウィンドウの開始。

@m-1m

toTimeExpr

文字列

はい

SQL タイムウィンドウの終了。

@m

maxRunTimeInSeconds

int

はい

SQL 文の最大タイムアウト期間。単位: 秒。有効値: 60~1800。

600

resourcePool

文字列

はい

リソースプールのタイプ。値 enhanced は、拡張リソースプールを示します。

enhanced

maxRetries

int

はい

SQL 文がタイムアウトした後の最大再試行回数。有効値: 1~100。

20

fromTime

int

はい

開始時刻。詳細については、「Logstore から Metricstore にデータをインポートするスケジュールされた SQL ジョブを作成する」をご参照ください。

1712592000

toTime

int

はい

終了時刻。詳細については、「Logstore から Metricstore にデータをインポートするスケジュールされた SQL ジョブを作成する」をご参照ください。

0

dataFormat

文字列

はい

次の 3 つの構成がサポートされています: log2loglog2metric、および metric2metric

log2log

parameters

オブジェクト

はい

SQL 構成。詳細については、「Logstore から Metricstore にデータをインポートするスケジュールされた SQL ジョブを作成する」をご参照ください。

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

応答パラメーター

詳細については、「CreateScheduledSQL: スケジュールされた SQL ジョブの作成」をご参照ください。

サンプルコード

import os
import time
from aliyun.log import LogClient
from aliyun.log.scheduled_sql import *

accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')  # AccessKey ID。
accessKeySecret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')  # AccessKey Secret。

endpoint = "cn-hangzhou.log.aliyuncs.com"  # ソースプロジェクトが配置されているリージョンのエンドポイント。
roleArn = "acs:ram::141******5616316:role/aliyunserviceroleforslsaudit"  # ロールの ARN。
project = "demo-test-project"  # ソースプロジェクトの名前。
source_logstore = "test-logstore"  # ソース Logstore の名前。
source_metricstore = ""  # ソース Metricstore の名前。

dest_endpoint = "cn-hangzhou.log.aliyuncs.com"  # 宛先プロジェクトが配置されているリージョンのエンドポイント。
dest_role_arn = "acs:ram::141******5616316:role/aliyunserviceroleforslsaudit"  # 宛先ロールの ARN。
dest_project = "demo-test-project"  # 宛先プロジェクトの名前。
dest_logstore = "test-logstore2"  # 宛先 Logstore の名前。
dest_metricstore = ""  # 宛先 Metricstore の名前。

from_time = int(time.time()) - 360  # スケジュールされた SQL ジョブの開始時刻。

job_name = "test-001"  # ジョブ名。
display_name = "test-001"  # 表示名。
description = "Create a scheduled SQL job"  # 説明。

script = "* | select *"  # SQL スクリプト。
promql = "* | select promql_query_range('key{}') from metrics limit 1000"  # PromQL スクリプト。

instance_id = ""  # スケジュールされた SQL ジョブのジョブインスタンス ID。
delay_seconds = 0  # スケジュールされた SQL ジョブの遅延 (秒単位)。

# 変数 data_format には、"log2log"、"log2metric"、"metric2metric" の 3 つの値を指定できます。
data_format = "log2log"

# 変数 schedule_type には、"FixedRate"、"Daily"、"Weekly"、"Hourly"、"Cron" の値を指定できます。
# schedule_type = "FixedRate"
schedule_type = "FixedRate"

client = LogClient(endpoint, accessKeyId, accessKeySecret)


def generate_schedule_sql():
    schedule_rule = generate_schedule_rule()
    config = generate_config()

    schedule_sql = ScheduledSQL()
    schedule_sql.setName(job_name)
    schedule_sql.setDisplayName(display_name)
    schedule_sql.setDescription(description)
    schedule_sql.setSchedule(schedule_rule)
    schedule_sql.setConfiguration(config)
    return schedule_sql


def generate_schedule_rule():
    schedule_rule = JobSchedule()
    schedule_rule.setType(schedule_type)
    schedule_rule.setDelay(delay_seconds)
    schedule_rule.setTimeZone('+0800')
    if schedule_type == "FixedRate":
        # 間隔の値は、"Xs"、"Xm"、"Xh"、または "Xd" の形式の文字列である必要があります。
        # ここで、X は秒、分、時間、または日数を示す整数です。
        schedule_rule.setInterval('60s')
    elif schedule_type == "Cron":
        # cron 式は有効な cron 文字列である必要があります。
        schedule_rule.setCronExpression("*/2 * * * *")
    elif schedule_type == "Daily":
        # 時間の値は 0 から 23 までの整数である必要があります。
        schedule_rule.setHour(1)
    elif schedule_type == "Weekly":
        # 曜日の値は 1 から 7 までの整数である必要があります。
        # 時間の値は 0 から 23 までの整数である必要があります。
        schedule_rule.setDayOfWeek(1)
        schedule_rule.setHour(2)
    elif schedule_type == "Hourly":
        pass

    return schedule_rule


def generate_config():
    query = script
    if data_format == 'log2log':
        source = source_logstore
        dest = dest_logstore
    elif data_format == 'log2metric':
        source = source_logstore
        dest = dest_metricstore
    elif data_format == 'metric2metric':
        source = source_metricstore
        dest = dest_metricstore
        query = promql

    parameters = generate_log2log_params()
    config = ScheduledSQLConfiguration()
    config.setScript(query)
    config.setSqlType('searchQuery')
    config.setDestEndpoint(dest_endpoint)
    config.setDestProject(dest_project)
    config.setSourceLogstore(source)
    config.setDestLogstore(dest)
    config.setRoleArn(roleArn)
    config.setDestRoleArn(dest_role_arn)
    config.setFromTimeExpr("@m - 5m")
    config.setToTimeExpr("@m")
    config.setMaxRunTimeInSeconds(1800)
    config.setResourcePool("enhanced")
    config.setMaxRetries(10)
    config.setFromTime(from_time)
    config.setToTime(0)
    config.setDataFormat(data_format)
    config.setParameters(parameters)
    return config


def generate_log2log_params():
    parameters = ScheduledSQLBaseParameters()
    return parameters


if __name__ == '__main__':
    schedule_sql = generate_schedule_sql()
    res = client.create_scheduled_sql(dest_project, schedule_sql)
    res.log_print()

レスポンスの例

CreateScheduleSqlResponse:
headers: {'Server': 'AliyunSLS', 'Content-Length': '0', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*', 'Date': 'Fri, 01 Nov 2024 07:04:39 GMT', 'x-log-time': '1730444679', 'x-log-requestid': '67247D87DB04A454D92A6F6B'}

終了コード 0 でプロセスが終了しました

関連ドキュメント