【3. SQLクエリ作成編】Databricksで生データの加工から可視化まで一気通貫しておこなってみた

# はじめに
本記事は全4編によって構成されるうち、3つ目の記事となります。
[前回](https://qiita.com/Tsubasa-Koyama/items/b5953fb88b324a25ab29)ではCSVデータをDelta形式に変換したテーブルを可視化するために加工を行いました。
本記事のゴールとしては加工したテーブルを使用し、Databrick SQLで可視化に向けてSQLクエリを完成させます。

# 全4編の概要
全4編かけてBacklogで記録されたCSVデータ(検証用に一部編集済み)を元に、ノートブック上でテーブルの加工を行い、Databricks SQL(Redash)を用いて可視化まで行っていきます。

[1. Delta形式のテーブル作成編](https://qiita.com/Tsubasa-Koyama/items/1a943ff8b265daa9953e)
[2. テーブルの加工編](https://qiita.com/Tsubasa-Koyama/items/b5953fb88b324a25ab29)
[3. SQLクエリ作成編]()
[4. ビジュアル作成編](https://qiita.com/Tsubasa-Koyama/items/290f2e05c758827f2347)

Databricksを利用してデータ加工をしていきたいという方向けに、加工の流れを一気通貫してざっくりと理解していただくことを想定しております。
＊ただし一部複雑な加工や考え方が含まれていることご了承ください。

# 全4編のゴール
最終的なゴールはDatabricks SQLのダッシュボード上で以下のような要件を満たすグラフを作成します。
・日にちごとの残タスク数の推移を表示
・残タスクの数はプロジェクトごとに積み上げて表示
・グラフに表示する残タスク数を、タスクの保持者と難易度でパラメーター機能を用いて絞り込み可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/f9c5a17e-f63e-10dd-9a84-39127dcb1838.png)

# ビジュアル用クエリ作成
ここからの作業はDatabricks SQLで行います。まずSQL Warehouseの作成から行います。
今回は画像にあるスペックで作業いたします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/7095ba7d-6bd5-4d4e-f2c7-787782c5d127.png)
クエリを作成します。
今回はパラメーター機能を付けるためのクエリ2つと本クエリ1つで合計3つのクエリを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/9a4ca5ed-2a97-a40e-a12f-c52ef600f9e7.png)
まず、パラメーター用のクエリを作成ます。
name、levelでパラメーターをかけられるようにします。
「Run All」をクリックして実行を行い、成功すれば「save」をクリックして保存します。

＜タスク完了者のパラメーター用クエリ＞
前回の記事で加工したテーブルから完了者を示すカラムをselectします。
重複しないように完了者でgroup byを行っています。
```sql
select
  name
from
  for_sample.backlog_proccessed
group by
  name
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/e17a988c-1b73-3dfe-b15f-dc2f3e64d4c0.png)
実行結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/f2e9f50e-f593-1758-fbb9-65d6d2a6662a.png)

＜タスク難易度のパラメーター用クエリ＞
完了者のパラメーターと同様にクエリを記述します。
```sql
select
  level
from
  for_sample.backlog_proccessed
group by
  level
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/04b2a799-8d32-cac6-7e3e-7686537258fb.png)
実行結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/ab791ed1-edda-8f93-c4d8-07a19664c66f.png)

次に、本クエリの作成を行います。
まず時系列カラム、どのカテゴリーに属しているかを示すカラム、そして総タスク数とタスク完了数の累積の差である残タスク数を作成したテーブルからselectします。
```sql
select
  date_range,
  category,
  sum(task_nums)-sum(accumulation)
from
  for_sample.backlog_proccessed
```
次にwhere文の中で以下のように記述することによりパラメーターを作成できます。
```sql
where
  name in ({{完了者}})
  and level in ({{難易度}})
```
作成したパラメーターに先ほど作成したパラメーター用クエリを呼び出します。
まず以下の画像の赤枠の歯車マークをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/54f075ac-7ef5-842d-6b1e-af38ad1b35aa.png)
完了者と難易度でそれぞれ以下の作業を行う
・「Type」に「Query Based Dropdown List」を選択
・「Query」に「パラメーター用クエリの名前」を選択
・「Allow multiple values」にチェックを入れる
・「Quotation」に「Single Quotation Mark」選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/7d6ed3c9-9eb4-d3a6-6faa-0481c8a6c5e3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/9bf4c51b-ae33-8c46-86e0-082708b904af.png)

虫眼鏡マークからパラメーターをかけたい値だけチェックを付け、「Apply changes」をクリックすることにより、表示させたい値を絞ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/6c39c81c-4cb6-b397-446f-da5a3efcc59c.png)

最後に日付とカテゴリーでgroup byを行うとクエリの完成です。
```sql
group by
  date_range,
  category
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/781a7a76-6ebd-31ce-62d7-945c31b2e36b.png)

上の画像にあるクエリを実行します。
実行は赤枠にある「Run all」のみチェックがついている状態で行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/c2fece18-1b93-dcb9-cd79-31a0b089950a.png)

以下の画像のようなテーブルが出力されました。

成功すれば「save」をクリックすることを忘れないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704291/445847e6-a9e9-ed63-ffc4-42289a3c2c66.png)
# まとめ
これで可視化用のクエリが完成しました。
[次回](https://qiita.com/Tsubasa-Koyama/items/290f2e05c758827f2347)は出力されたテーブルを可視化していきます。

# 技術的な参考資料
# パラメーター機能
[こちら](https://docs.databricks.com/sql/user/queries/query-parameters.html)の公式ドキュメントにパラメータ機能が解説されております。