Databricks SQLチュートリアル

初めて[Databricks SQL](https://www.databricks.com/jp/product/databricks-sql)を使い始める方向けに資料をまとめました。

# Databricks SQLとは

Databricks SQLは、クイックなアドホッククエリーを実行し、異なる視点からクエリーの結果を探索するために複数のビジュアライゼーションを作成し、ダッシュボードを構築し、共有したいと考えているSQLユーザーに対してシンプルな体験を提供します。

もし、あなたのメインタスクでSQLクエリーやBIツールを使っているのであれば、Databrikcs SQLはお使いのデータレイクに格納されているデータを用いて、アドホックなクエリーを実行し、ダッシュボードを構築するための直感的な環境を提供します。
![Screen Shot 2022-08-28 at 10.26.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1aca9237-2751-c2e5-575b-eefa1612c0d6.png)

# Databricks SQLの主な機能

- **SQLウェアハウス**: Databricks SQLで使用する計算資源です。Databricksクラスターと同様にお客様のクラウドアカウントに構築するデータプレーンで動作するクラシックSQLウェアハウスと、Databricks管理のクラウドアカウントで動作する[サーバレスSQLウェアハウス](https://qiita.com/taka_yayoi/items/685a11ea726b2b34a174)を利用することができます。
- **クエリー**: お客様のデータレイクに格納されているデータに対して問い合わせを行うSQLです。
- **ビジュアライゼーション**: クエリーの結果を可視化したものです。さまざまなビジュアライゼーションのタイプを提供しています。
- **ダッシュボード**: ビジュアライゼーションを組み合わせてダッシュボードを構築します。
- **アラート**: クエリーから返却された値が閾値を超えた際にメールなどで通知を行います。

アナリストによるDatabricks SQLの一般的な使い方は以下のようなものとなります。通常ステップ2からステップ5は試行錯誤を伴う繰り返しの作業となります。

1. データをアップロードする。(管理者が準備するケースもあります)
1. **クエリー**を実行するなどしてデータを理解する。
1. 目的を踏まえて解析(抽出、集計、並び替えなど)の切り口を考える。
1. 切り口に応じた**クエリー**を記述して実行する。
1. クエリー実行結果をどのように可視化するのかを考えて可視化を行う。(**ビジュアライゼーション**の作成)
1. 可視化を組み合わせて**ダッシュボード**を作成する。
1. ダッシュボードを公開する。

![Screen Shot 2022-09-07 at 14.17.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50f6c492-042b-a0b1-379b-927ede4fb220.png)


# Databricks SQLの使い方

以下では、管理者とアナリストがどのようにDatabricks SQLを使用するのかを、サンプルのシナリオに沿って説明します。権限さえあれば、アナリストが管理者のタスクを行うことも可能です。

まず最初に言語設定を行なってから、Databricks SQLにアクセスします。

1. Databricksにログインし、サイドメニューから**Settings > User Settings**を開きます。
1. **Language Settings**タブをクリックします。
![Screen Shot 2022-01-20 at 17.58.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/13aaa56f-81fd-eed3-06ce-e9389873dd94.png)
1. Change Your Languageから言語を選択します。
![Screen Shot 2022-01-20 at 17.58.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5c334039-8455-98fd-99c8-348b399bea7b.png)

    以下の言語がサポートされています。
    - 英語
    - ドイツ語
    - フランス語
    - イタリア語
    - 日本語
    - 韓国語
    - ポルトガル語

1. 言語を選択すると画面がリフレッシュされ、GUIが選択した言語で表示されます。
![Screen Shot 2022-01-20 at 17.58.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/577fc520-ee2d-f063-b334-00e0f84cc70c.png)
1. サイドメニューのペルソナスイッチャーで**SQL**を選択し、Databricks SQLにアクセスします。
![Screen Shot 2022-08-28 at 10.55.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c02a6577-f9fe-d47e-3246-154e62186f2e.png)

## 管理者がDatabricks SQLを使う

ここでは、管理者が以下のタスクを行うものとします。アナリストの方は[アナリストがDatabricks SQLを使う](#アナリストがdatabricks-sqlを使う)までスキップしてください。

- [アナリストが使用するテーブルの作成](#テーブルの作成)
- [テーブルへのアクセス権の付与](#テーブルのアクセス権の設定)
- [SQLウェアハウスの作成およびアクセス権の設定](#sqlウェアハウスの作成およびアクセス権の設定)

### テーブルの作成

以下の作業を行うことでテーブルを作成します。

1. Databricks SQLにアクセスするとランディングページが表示されます。
![Screen Shot 2022-08-28 at 10.56.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3fbeeeb0-24e1-bd8f-1474-94b499c24cf0.png)
1. サイドメニューで**作成** > **クエリー**を選択します。
![Screen Shot 2022-08-28 at 10.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/55533ae4-e956-b477-2b59-39009cf474ed.png)
1. 右上のドロップダウン(以下の図の赤枠)で稼働中のSQLウェアハウスを選択します。存在しない場合には[SQLウェアハウスを作成](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381#sql%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%8F%E3%82%A6%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)します。

    画面の左側にあるスキーマブラウザにデータベース・テーブルの一覧が表示され、右上のSQLエディタにSQLクエリーを記述して実行します。右下にはクエリーの結果が表示されます。

    ![Screen Shot 2022-08-28 at 10.59.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e4aa0c49-11ff-61d7-6765-3fe382734e21.png)
1. 以下のクエリーをSQLエディタに貼り付けます。

    ```sql:SQL
    CREATE TABLE default.db_handson_people10m OPTIONS (PATH 'dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta')
    ```
1. **すべてを実行**をクリックします。
![Screen Shot 2022-08-28 at 11.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2e305171-be24-3816-1b86-e40dbd5957c4.png)
1. クエリーが成功すると`...was successfully executed.`というメッセージが右下に表示されます。
![Screen Shot 2022-08-28 at 11.05.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b2c2f193-936b-0a38-f0cd-910e2b50b4c2.png)
1. スキーマを更新するには、スキーマブラウザの下にある![](https://docs.databricks.com/_images/refresh-schema.png)ボタンをクリックします。
1. データベースの右にあるテキストボックスに`peo`と入力します。スキーマブラウザは新たに作成したテーブルを表示します。
![Screen Shot 2022-08-28 at 11.06.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/74602bb1-2af9-5ab0-32c4-78eeb5014a3a.png)
1. 上で作成したクエリーを保存しておきたい場合には、`New query`の箇所をクリックしてクエリーの名前を入力し、**保存**ボタンを押します。
![Screen Shot 2022-08-28 at 11.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6507656a-76c1-b74a-cc84-74cf48552c0a.png)

### テーブルのアクセス権の設定

こちらでは、データエクスプローラのUIを用いてアクセス権を設定します。上述した[SQLエディタからも設定](https://qiita.com/taka_yayoi/items/8b6154eb8bfe202951c6#sql%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF)することが可能です。

1. サイドバーの![](https://docs.databricks.com/_images/data-icon.png)**データ**をクリックします。
1. 右上のドロップダウンリストで、**Starter Warehouse**のようなSQLウェアハウスを選択します。`default`データベースが選択されます。データベースのコメントとオーナーが表示されます。
![Screen Shot 2022-08-28 at 11.12.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/deb7bd11-39ed-1035-4788-5addc98910d3.png)
1. **権限**タブをクリックします。
![Screen Shot 2022-08-28 at 11.24.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0f1bad2c-fa91-06a5-3c58-1b9cc6430339.png)
1. **付与**ボタンをクリックします。
1. テキストボックスをフォーカスし、`All Users`を選択します。
1. **USAGE**チェックボックスをチェックします。
![Screen Shot 2022-08-28 at 11.25.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/de4ce517-8d27-0039-1618-b72dad348a39.png)
1. **付与**ボタンをクリックします。
![Screen Shot 2022-08-28 at 11.25.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6141b3d2-ebab-f4af-4917-d0e9a6b40f3f.png)
1. `default`データベースの後のテキストボックスに`peo`と入力します。データエクスプローラに`db_handson_people10m`テーブルが表示されますので選択します。
![Screen Shot 2022-08-28 at 11.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2a8fc7b9-5aa7-e2c4-380a-af4b5abd4cf4.png)
1. **権限**タブをクリックします。
![Screen Shot 2022-08-28 at 11.26.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c9108d00-eec9-26d5-d2b4-9cefd16c9e99.png)
1. **付与**ボタンをクリックします。
1. テキストボックスをフォーカスし、`All Users`を選択します。
![Screen Shot 2022-08-28 at 11.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0315c42c-7d6c-6767-9940-8d071eec7471.png)
1. **SELECT**と**READ_METADATA**チェックボックスをチェックします。
![Screen Shot 2022-08-28 at 11.28.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/659257b1-55d3-e28c-fc39-ee144a56fb9e.png)
1. **付与**ボタンをクリックします。
![Screen Shot 2022-08-28 at 11.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/99c571e3-f0e1-83fb-6f1b-1fbc9d86153a.png)

### SQLウェアハウスの作成およびアクセス権の設定

上でテーブルを作成する際にSQLウェアハウスにアナリストがアクセスできるようにします。

:::note info
**注意**
複数人でSQLウェアハウスをシェアする場合には、十分なスペックであるかを確認してください。
:::

1. サイドメニューから**SQL**ウェアハウスにアクセスします。
![Screen Shot 2022-08-28 at 11.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ab98e8cc-fbf4-eef0-a225-3d780a0e8fe0.png)
1. 作成済みのSQLウェアハウスを共有するのであれば、ウェアハウス名をクリックします。新規に作成する際には右上の**SQLウェアハウスを作成**ボタンをクリックしてSQLウェアハウスを作成します。ここでは作成済みのSQLウェアハウスに権限を付与します。右上の**権限**ボタンをクリックします。
![Screen Shot 2022-08-28 at 11.34.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/553b9d9b-8329-4fd6-1152-0efbd3ec27db.png)
1. テキストボックスをフォーカスし`All Users`を選択します。
![Screen Shot 2022-08-28 at 11.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a12a50e3-9de7-43e7-430a-bb4ed7d3c5ae.png)
1. **使用可能**が選択されていることを確認して**追加**をクリックします。
![Screen Shot 2022-08-28 at 11.37.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/69244d9f-ee73-487f-2b62-ff589c24cf8e.png)
1. これでアナリストがSQLウェアハウスを利用(ウェアハウスの起動、SQLの実行)できるようになりました。
![Screen Shot 2022-08-28 at 11.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f377f257-0f71-3869-21c0-1d616ce655f9.png)

以上で管理者の作業は終了です。

## アナリストがDatabricks SQLを使う

ここでは、アナリストが以下のタスクを行うものとします。

- [管理者が準備したテーブルにクエリーを実行](#テーブルにクエリーを実行)
- [クエリーの実行結果のビジュアライゼーションを作成](#ビジュアライゼーションを作成)
- [ビジュアライゼーションを組み合わせてダッシュボードを作成](#ダッシュボードの作成)

### テーブルにクエリーを実行

初回にDatabricks SQLにアクセスすると以下のような画面が表示されます。
![Screen Shot 2022-08-28 at 11.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d3045ef9-61e3-968e-0fc5-4ced96b6a040.png)

チュートリアルを試しても構いませんが、ここでは[上のステップ](#テーブルの作成)で管理者が準備してくれたテーブルを操作していきます。

ここでは、人々の情報を格納したテーブルから、`Mary`という名前の女性を生まれた年でグルーピングし、グループごとの数をカウントし結果を可視化します。

テーブルのカラムは、`id`、`firstName`、`middleName`、`lastName`、`gender`、`birthDate`、`ssn`、`salary`となります。

1. 管理者がアクセス権を付与したSQLウェアハウスが表示されています。SQLウェアハウス起動していない場合には**開始**ボタンをクリックしてSQLウェアハウスを起動します。
1. 状態が**開始中**から**実行中**になるまで待ちます。
![Screen Shot 2022-08-28 at 11.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/54c8062e-7fc0-5516-0703-1155bb147114.png)
1. 上述の通り、すでに管理者が`db_handson_people10m`というテーブルを作成しています。ここでは、このテーブルにクエリーを実行し、Maryという名前のすべての人の誕生日と誕生年を表示します。
1. サイドバーで![](https://docs.databricks.com/_images/create-icon.png)**作成**をクリックし**クエリー**を選択すると、SQLエディタが表示されます。
1. 上で起動したSQLウェアハウスを選択します。
![Screen Shot 2022-08-28 at 11.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1918b315-46b8-d68c-ae17-babca4dcf67d.png)
1. `Mary`という名前の女性の数をクエリーする以下のSELECT文をSQLエディタに貼り付けます。

    ```sql:SQL
    SELECT year(birthDate) as birthYear, count(*) AS total
    FROM default.db_handson_people10m
    WHERE firstName = 'Mary' AND gender = 'F'
    GROUP BY birthYear
    ORDER BY birthYear
    ```
    ![Screen Shot 2022-08-28 at 11.48.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7c5d8b3c-5652-9041-1557-ca731b644bf3.png)
1. **すべてを実行**ボタンをクリックします。通知の許可を求めるプロンプトが表示された際には許可します。
1. クエリーの結果が右下に表示されます。
![Screen Shot 2022-08-28 at 11.50.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eb2d71ba-112d-3d0e-5755-2f5abcaa9b9f.png)
    デフォルトでは最大1000行が返却されます。より多くの行を取得したい場合には、チェックボックスの選択を解除し、クエリーに`LIMIT`句を指定します。
    ![Screen Shot 2022-08-28 at 11.50.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/51b1153f-aac1-228b-2550-04c1b52ba636.png)
1. クエリーを保存するには**New Query**の箇所をクリックし、名前を入力して**保存**をクリックします。
![Screen Shot 2022-08-28 at 11.52.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6bc85847-5c43-63f8-4d52-91591bcfbf3b.png)

### ビジュアライゼーションを作成

1. 結果を表示している**Table**の右にある **+** をクリックし、**Visualization**を選択します。
![Screen Shot 2022-08-28 at 11.53.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b8278241-c6cb-56e0-8aa5-298372bedc27.png)
ビジュアライゼーションエディタが表示されます。
    ![](https://docs.databricks.com/_images/visualization-editor.png)
1. ビジュアライゼーションの名前を**誕生年ごとのMaryさんの人数**に変更します。左上の`Scatter 1`をクリックすると名前を変更することができます。
1. **Visualization Type**ドロップダウンで**Bar**を選択します。
1. **X Column**ドロップダウンで**birthYear**を選択します。
1. **Y Column**ドロップダウンで**total**を選択します。
1. **X Axis**タブをクリックします。
1. Nameフィールドに`誕生年`と入力します。
1. **Y Axis**タブをクリックします。
1. Nameフィールドに`誕生年ごとのMaryさんの人数`と入力します。
1. **保存**をクリックします。
    保存したグラフがSQLエディタに表示されます。
    ![Screen Shot 2022-08-28 at 11.58.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/42da33c4-a3e1-dc17-8e1d-cfd9420bdacf.png)
1. 最後にクエリーの**保存**ボタンをクリックします。

ここまでのステップでクエリー、ビジュアライゼーションを作成しました。最後のダッシュボード作成のステップではこれらを参照してダッシュボードを構築します。

### ダッシュボードの作成

1. サイドバーの![](https://docs.databricks.com/_images/create-icon.png)**作成**をクリックし**ダッシュボード**を選択します。
1. ダッシュボード名として`People`と入力します。わかりやすい別の名前をつけても構いません。
1. **保存**をクリックします。
1. ダッシュボードが表示されますが、この時点では何も表示されません。
![Screen Shot 2022-08-28 at 12.00.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ae74499b-982b-e4d2-ec44-6e45f416d627.png)
1. **追加**ドロップダウンをクリックし、**可視化**を選択します。
1. クエリーを選択する画面が表示されるので、[上のステップ](#テーブルにクエリーを実行)で作成したクエリーを選択します。
![Screen Shot 2022-08-28 at 12.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6a210448-9e90-27cf-97c6-6f39cef79316.png)
1. クエリーに属しているビジュアライゼーションを選択します。**Select existing visualization**が選択されている状態で、下のドロップダウンから追加したいビジュアライゼーションを選択します。
![Screen Shot 2022-08-28 at 12.04.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d773a581-50c7-2459-87df-cc01a76f8c31.png)
1. **ダッシュボードに追加**をクリックします。これでダッシュボードにビジュアライゼーションが追加されます。
![Screen Shot 2022-08-28 at 12.04.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3595dd18-156d-d7b5-9e83-31445d1013ee.png)
1. 他のビジュアライゼーションを追加する場合には、上の作業を繰り返します。
1. 追加したビジュアライゼーションはドラッグ&ドロップでサイズや位置を調整できます。
![Screen Shot 2022-08-28 at 12.06.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/33c55ec2-88c7-b16c-e284-a9a58b292bf1.png)
1. レイアウトに満足したら右上の**編集完了**をクリックします。これで初めてのダッシュボードの完成です！
![Screen Shot 2022-08-28 at 12.07.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b2efb580-bb1b-32f5-b2ac-2657afb70319.png)

# 次のステップ

**アナリスト向け**

- [Databricks SQLのコンセプト](https://qiita.com/taka_yayoi/items/eaf79254afd4eb620a6e)
- [Databricks SQL : ユーザー向けクイックスタート](https://qiita.com/taka_yayoi/items/fd0d5e4de3c7f50de617)
- [Databricks SQLクイックスタート：サンプルダッシュボードギャラリーからダッシュボードをインポートしてDatabricks SQLを学ぶ](https://qiita.com/taka_yayoi/items/0e3e0730b71de28e4c08)
- [Databricks SQLのダッシュボード](https://qiita.com/taka_yayoi/items/834bef9aa784e1a045d8)
- [Databricks SQLにおけるテーブルの作成](https://qiita.com/taka_yayoi/items/89eda6708b7c2e77d651)
- [ADLSにあるデータを使ってDatabricks SQLでダッシュボードを作成する](https://qiita.com/taka_yayoi/items/056e2c419eca4ed7f7dc)

**管理者向け**

- [Databricks SQL : 管理者向けクイックスタート ](https://qiita.com/taka_yayoi/items/8b6154eb8bfe202951c6)
- [Databricks SQL管理者クイックスタート：Databricks SQLのオンボーディングタスク](https://qiita.com/taka_yayoi/items/aca244745439b9d12f2b)
- [Databricks SQLウェアハウスとは？](https://qiita.com/taka_yayoi/items/23d7789198c2dcd66381)
- [Databricks SQLのセキュリティモデルとデータアクセスの概要](https://qiita.com/taka_yayoi/items/90a464bcbebf9cf1eb6f)


### Databricks 無料トライアル

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