最近のDatabricksジョブの機能追加(条件分岐、別のジョブの呼び出しなど)

こちらを眺めていたら、結構機能追加されていることに気づきました。

https://docs.databricks.com/ja/release-notes/product/index.html

# Databricks ジョブ UIで完了したジョブ実行の概要を視覚的に確認する

https://docs.databricks.com/ja/workflows/jobs/monitor-job-runs.html#view-runs

サイドメニューの**Job Runs**あるいは、**ワークフロー > ジョブ実行**にアクセスします。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f7309a6e-a33f-0799-034d-ffb1c5d7977b.png)

過去に実行されたジョブの概要とエラーなどを確認することができます。
![Screenshot 2023-08-07 at 13.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ade11e60-38a4-2038-a021-842f91bdf05b.png)

# 実行速度の遅いジョブやスタックしたジョブのアラートを作成する

https://docs.databricks.com/ja/workflows/jobs/settings.html#timeout-setting-job

ジョブやジョブを構成するタスクの処理が想定以上に時間を要している場合に、警告やタイムアウトを行う機能です。

最初に以下のようなノートブックを作成しておきます。

```py:timeout_notebook
import time
time.sleep(30)
```

ジョブを作成して、ジョブのタイムアウト時間を設定します。なお、ジョブのタイムアウト時間が設定されていないと、タイムアウトの通知を受け取ることができません。タスクのタイムアウトの通知も同様です。
![Screenshot 2023-08-07 at 13.41.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9fee899d-ed8b-d19b-87e2-7bb5bc3b3096.png)

通知先を設定し、**通常より長く時間...** (継続時間が通常より長くかかる場合)にチェックを入れます。ここのラベル、あとで修正しておきます。
![Screenshot 2023-08-07 at 13.39.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/96312a79-b561-7ca6-383a-f6d443b11d5f.png)

これで、ジョブの処理時間に対する閾値を設定することができます。
![Screenshot 2023-08-07 at 13.48.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3780eb1f-c5e5-61c7-abfe-88356ca923b6.png)
![Screenshot 2023-08-07 at 13.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c30f7de6-6003-ea25-40a0-03e27ef7bae0.png)

# 別のジョブをDatabricksジョブのタスクとして実行する

これは、あるジョブから別のジョブを呼び出せるということです。

以下のようにそれぞれがタスクから構成されるジョブを2つ作成します。

- job1
    - task1-1
- job2
    - task2-1
    - task2-2

![Screenshot 2023-08-07 at 13.55.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/79cc35d0-4cd1-0616-49c3-5f9336127a41.png)

job2を作成した後に、job1のtask1-1の後続処理としてjob2を選択します。
![Screenshot 2023-08-07 at 13.55.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1e2e80be-4dd0-5a55-04e5-620b08859441.png)
![Screenshot 2023-08-07 at 13.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/02623776-8608-a9db-e45b-4eeb6a14660c.png)

これで、あるジョブから別のジョブを呼び出せるように設定できました。
![Screenshot 2023-08-07 at 13.56.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/40f2c45c-007c-795b-c86f-f40d3267200c.png)

実行できました！これは、既存ジョブの拡張が捗りますね。
![Screenshot 2023-08-07 at 14.07.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9f8304f3-6fbf-b411-1b00-f95ab2473b55.png)

# Databricksジョブで条件付きでタスクを実行する

個人的には心待ちにしていた機能です。

https://docs.databricks.com/ja/workflows/jobs/conditional-tasks.html

以下のように3つのノートブックを作成します。

```py:task-a
print("no error")
```

```py:task-success
print("success")
```

```py:task-failure
print("failed")
```

これらのノートブックを用いてジョブを構成します。タスク`task-a`の後段にタスク`success`を追加し、**次の場合に実行**で**すべて成功しました**を選択します。これで、タスク`success`は前段のすべてのタスク(今回は`task-a`のみですが)が成功した場合に実行されるようになります。
![add_task.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2941fd99-38a9-935c-3bfd-91b316c41ddd.png)

さらにタスク`task-a`の後段にタスク`failure`を追加します。今度は**次の場合に実行**で**少なくとも1回失敗しました**を選択します。
![add_task2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4652e3ef-9817-babd-8b8b-00feb74cb5a6.png)

このように分岐のあるジョブを構成することができました。
![Screenshot 2023-08-07 at 14.36.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/96417853-58d3-2c33-a0a5-fa7fe02b3748.png)

まずは、このままジョブを実行します。タスク`task-a`は成功するので、タスク`success`が実行されます。
![Screenshot 2023-08-07 at 14.41.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d20da3c4-72a8-3beb-dcac-ed153c344978.png)
![Screenshot 2023-08-07 at 14.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/11f73333-a477-83ea-1b02-6863b833419b.png)

次に`task-a`を変更して、エラーを意図的に発生させます。

```py:task-a
print("error happens")
aa
```

今度は`task-a`が処理に失敗するので、`failure`が実行されます。
![Screenshot 2023-08-07 at 14.53.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a9ea1395-15d0-b637-d34b-ac45222c8a21.png)
![Screenshot 2023-08-07 at 14.54.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f8cecf8e-f0f4-7168-dc9b-5010d887336d.png)

これで、さらに柔軟なロジックを構成できるようになります。是非お試しください！

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)