3
1

More than 1 year has passed since last update.

条件に一致するDatabricks Job一覧取得方法

Last updated at Posted at 2022-01-12

対象読者

  • チームでDatabricksを利用している方
  • 既存のJobで細かい条件に一致するものの洗い出しを行いたい方

目的

Jobがたくさんあるが、その中でも現在定期実行されているものを確認する。
(応用すれば他の情報でも抽出可能とおもわれます。)

流れ

  • Databricks CLIを用いてJob一覧とそれらに紐づく情報をjsonで出力し、
  • jupyter notebookで読み込み、
  • 確認したい情報を抽出しcsvで出力します。

環境

  • Mac
  • Databricks on AWS
  • python
  • jupyter notebook

事前準備

コード

Job一覧取得

Databricks CLIが利用可能となったターミナルの、作業したいdirectoryで実行してください。

$ databricks jobs list --output JSON > job_list.json

何もつけない状態だとJob_idとJob_nameのみが出力されます。
--output JSONというオプションをつけることで詳細な情報まで出力されます(JSON形式)。

欲しい情報のみ取得

以下はjupyter notebookで実行します。

import json
from pandas.io.json import json_normalize

json_open = open('./job_list.json', 'r')
json_load = json.load(json_open)

df_json = json_normalize(data=json_load, record_path='jobs')

jsonを読み込んでdataflameに変換しました。
列数が多いため、欲しい情報の含まれてそうな列のみを抽出します。
例えば定期実行スケジュールの情報が欲しい場合は'schedule'という文字列を含む列名を取得します。

temp_col = [item for item in df_json.columns if item.find('schedule') != -1]
temp_col

この結果
['settings.schedule.quartz_cron_expression',
'settings.schedule.timezone_id',
'settings.schedule.pause_status']

とでました。
これに、
'job_id'列と
設定されたnotebookである'settings.notebook_task.notebook_path'列
を加えて抽出します。

df_results = df_json[['job_id',
                      'settings.name',
                      'settings.schedule.quartz_cron_expression',
                      'settings.schedule.pause_status',
                      'settings.notebook_task.notebook_path',
        ]]
df_results

とすると、欲しい情報を持つ列のみに絞られたJOB一覧が出ました!

イメージ

job_id settings.name settings.schedule.quartz_cron_expression settings.schedule.pause_status settings.notebook_task.notebook_path
1 AAA NaN NaN /path/to/your/notebook/AAA
2 BBB 0 0 12 * * ? UNPAUSED /path/to/your/notebook/BBB
3 CCC 0 15 10 ? * * PAUSED /path/to/your/notebook/CCC

settings.schedule.quartz_cron_expressionはcronの記法で書かれているとおもわれますので、読み解きが必要な場合は、
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
などを参考にしてください。

欲しい条件でfilter

「現在も定期実行され続けているもの」が今回出したい条件となります。
「settings.schedule.pause_status が'UNPAUSED'のもの」が条件に該当するとおもわれます。

前項で出した一覧を

df_results.to_csv('./job_list.csv')

で出力して、Googleスプレッドシートやエクセルにしてからfilterするのもありと思いますし、

df_filtered = df_results[df_results['settings.schedule.pause_status'] == 'UNPAUSED']
df_filtered.to_csv('./job_list.csv')

でfilterしたものを出力するのもありと思います。

感想

もしかするとこの記事を皆様が読まれているころにはDatabricks側で条件を指定したJob一覧の抽出が可能な機能が存在しているかもしれないですが、私がこの作業が必要となり、調べたときには見つからなかったため、調べながら実施したことを記事とします。

参考資料

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1