# TD Toolbeltを使用したスケジューリング

Treasure Dataには、定期的なクエリ実行をサポートするスケジューラー機能があります。

* [前提条件](#prerequisites)
* [TD Toolbeltを使用した新規スケジュールの作成](#create-a-new-schedule-using-td-toolbelt)
* [TD Toolbeltを使用したスケジュールジョブの優先度設定](#setting-the-priority-of-scheduled-jobs-using-td-toolbelt)
* [例：定期的な集約](#example-periodic-aggregation)
* [TD Toolbeltを使用したスケジュールの表示](#viewing-schedules-using-td-toolbelt)
* [ジョブの履歴の表示](#viewing-the-history-of-a-job)
  * [例：](#example)
* [スケジュールの更新](#update-the-schedule)
* [ジョブのスケジュール解除](#unschedule-the-job)
* [スケジュールの削除](#delete-the-schedule)


## 前提条件

* [TD Toolbelt](/tools/cli-and-sdks/quickstart)を含むTreasure Dataの基礎知識
* データが格納されているテーブル


## TD Toolbeltを使用した新規スケジュールの作成

新しいスケジュールは、td sched:createコマンドを使用して作成できます。スケジュールの名前、cron形式のスケジュール、クエリ、およびデータベース名が必要です。


```bash
$ td sched:create <name> <cron> [sql]
```


```bash
options:

-d, --database DB_NAME データベースを使用（必須）

-t, --timezone TZ タイムゾーンの名前。拡張タイムゾーンのみサポート

-D, --delay SECONDS スケジュールの遅延時間

-r, --result RESULT_URL 結果をURLに書き込む（result:createサブコマンドも参照）

-u, --user NAME 結果URLのユーザー名を設定

-p, --password 結果URLのパスワードを要求

-P, --priority PRIORITY 優先度を設定

-q, --query PATH インラインクエリの代わりにファイルを使用

-R, --retry COUNT 自動再試行回数

-T, --type TYPE クエリタイプを設定（hive）
```

**例：**

![](/assets/scheduling-using-the-td-toolbelt-2024-02-13.420ebe5b77f51fdf190b0e6fa85b4a3ab5d9d7f9881bea6d9c0badcaa944e5e4.b40d6bf5.png)

## TD Toolbeltを使用したスケジュールジョブの優先度設定

ジョブの優先度を変更するには、次を使用します：

`td sched:update <job_name> -P <#>`

| **優先度** | **構文オプション値** |
|  --- | --- |
| 非常に高い | -P 2 |
| 通常 | -P 0 |
| 非常に低い | -P -2 |


例：

`td sched:update 111_beta_query_01 -P 2`

# 例：定期的な集約

一般的なパターンは、メインテーブルから別のテーブルにデータを定期的に要約することです。この例では、アクセスログからのWebリクエスト結果を1時間ごとに集約します。集約の適切な時間範囲を設定するために、Presto（またはHive）のいくつかの一般的な関数を使用しています。


```sql
SELECT
  USER,
  code,
  method,
  PATH,
  agent,
  HOST,
  AVG(SIZE)
FROM
  www_access
WHERE
  TD_TIME_RANGE(time,
    TD_TIME_ADD(TD_SCHEDULED_TIME(), '-1h'),
    TD_SCHEDULED_TIME())
GROUP BY
  USER,
  code,
  method,
  PATH,
  agent,
  HOST
```

クエリを1時間ごとに実行するように設定を完了するには、スケジュールされたクエリを作成します：


```bash
$ td sched:create \
hourly_agg \
"@hourly" \
-d testdb \
-D 1800 \
"SELECT USER, code, method, PATH, agent, HOST, AVG(SIZE) FROM www_access WHERE TD_TIME_RANGE(time, TD_TIME_ADD(TD_SCHEDULED_TIME(), '-1h'), TD_SCHEDULED_TIME()) GROUP BY USER, code, method, PATH, agent, HOST"
```

前述の例では、@hourlyはcronの`0 * * * *`と同じです。-Dパラメータを使用すると、遅延時間を秒単位で指定できます。この例では、1800秒（または30分の遅延）が設定されています。ジョブは毎時30分後に実行されます。

## TD Toolbeltを使用したスケジュールの表示

既存のスケジュールエントリのリストを表示するには、td sched:listを使用します。

## ジョブの履歴の表示

td sched:historyは、スケジュールエントリのジョブ履歴を表示します。個々のジョブの結果を調査するには、td job `<jobid>`を使用します。

定義されたスケジュールに従って実行されるジョブのリストを取得するには、次を使用します：

`td sched:list`

定義されたスケジュールを持つジョブの1つの履歴を表示するには、次を使用します：

`td sched:history <name> [max]`

**例：**

![](/assets/scheduling-using-the-td-toolbelt-2024-02-13-1.eb750a8970fbbd75914f0a00e2946e28c22fa96dcb824bba2ec1cc67dc63bea6.b40d6bf5.png)

## スケジュールの更新

スケジュールされたクエリのほとんどの設定は、いつでも更新または再設定できます。「次回のスケジュール実行時刻」（「次回」または「次回のスケジュール」とも呼ばれます）は、ブラウザのタイムゾーンの現在時刻、cronスケジュール、および遅延設定に基づいて自動更新される推定設定です。

スケジュールされたクエリが更新されると、更新された設定は、「次回のスケジュール実行時刻 + 遅延」（遅延が>0、<0、または0の場合）に発生する次回のスケジュール実行にすぐに適用されます。

`td sched:update <name>`

例：

`td sched:update sched1 -s "0 */2 * * *" -d my_db -t "Asia/Tokyo" -D 3600`

options:


```
-n, --newname NAME スケジュールの名前を変更

-s, --schedule CRON スケジュールを変更

-q, --query SQL クエリを変更

-d, --database DB_NAME データベースを変更

-r, --result RESULT_URL 結果のターゲットを変更（result:createサブコマンドも参照）

-t, --timezone TZ タイムゾーンの名前。拡張タイムゾーンのみサポート

-D, --delay SECONDS スケジュールの遅延時間を変更

-P, --priority PRIORITY 優先度を設定

-R, --retry COUNT 自動再試行回数

-T, --type TYPE クエリタイプを設定（hive）
```

## ジョブのスケジュール解除

特定のジョブのスケジュールを解除するには、次を使用します：

`"* * * * *"の代わりに""`

例：

`$ td sched:update sched1 -s "" -d my_db -t "Asia/Tokyo" -D 3600`

または

`$ td sched:create non_scheduled_query "" "select count(*) from www_access" -d sample_datasets`

## スケジュールの削除

特定のジョブからスケジュールを削除するには、次を使用します：

`td sched:delete <name>`

例：

`$ td sched:delete hourly_count`