Databricks SQLウェアハウスとは？

[What is a Databricks SQL warehouse? \| Databricks on AWS](https://docs.databricks.com/sql/admin/sql-endpoints.html) [2022/8/19時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書ではSQLウェアハウス(以前のSQLエンドポイント)を紹介し、Databricks SQLのUIを用いてどのように操作するのかを説明します。SQLウェアハウスはDatabricks SQLのデータオブジェクトに対して[SQLコマンド](https://docs.databricks.com/sql/language-manual/index.html)を実行する計算リソースです。

# SQLエンドポイントはSQLウェアハウスに名称変更しました

Databricksでは、SQLエンドポイントが単なるAPIエントリーポイント以上のもので、SQLコマンドを実行するものであることからSQLウェアハウスに名称変更しました。SQLウェアハウスはデータウェアハウスのすべてのニーズのための計算リソースであり、レイクハウスプラットフォームの重要なパーツです。

他の計算リソースタイプにはDatabricksの[クラスター](https://docs.databricks.com/workspace/workspace-assets.html#ws-clusters)が存在します。APIを用いてSQLエンドポイントを操作するには、[SQLエンドポイントAPI](https://docs.databricks.com/sql/api/sql-endpoints.html)を参照ください。

# 始める前に

最初のSQLウェアハウスを作成する際、**New SQL Warehouse**ページに表示されるデフォルトを使用することをお勧めします。しかし、ご自身の要件に合わせて設定を行うための数多くのオプションが存在しています。これらのオプションにおいて、以下の点に注意する必要があります。

- **サーバーレスSQLウェアハウス**(パブリックプレビュー): お使いのAWSアカウントに計算リソースが存在する*クラシックSQLウェアハウス*と異なり、計算リソースはDatabricksで管理されます。サーバーレスSQLウェアハウスは、SQLウェアハウスの管理をシンプルにし、起動時間を短縮します。[サーバーレスSQLウェアハウスの有効化](https://docs.databricks.com/sql/admin/sql-endpoints.html#serverless)を参照ください。
- **チャンネル**: チャンネルで**現行の**SQLウェアハウスのバージョンを使用するのか、**プレビュー**バージョンを使用するのかを選択できます。Databricks SQLの標準になる前の機能をプレビューバージョンで試すことができます。間も無く導入される変更に対してクエリーやダッシュボードをテストするためにプレビューバージョンを活用することができます。通常、プレビューバージョンは初期のプレビューリリースから二週間後に現行バージョンとしてプロモーションされます。しかし、場合によってはプレビューが長くなる場合があります。[リリースノート](https://docs.databricks.com/sql/release-notes/index.html#channels)を確認することで最新のプレビュー機能の詳細を確認することができます。プレビューバージョンをプロダクションのワークロードで使用することはお勧めしません。

# 要件

- SQLウェアハウスを作成するためには、Databricks Data Science & Engineeringにおいて[クラスター作成](https://docs.databricks.com/administration-guide/access-control/cluster-acl.html#cluster-create-permission)権限を有している必要があります。
- SQLウェアハウスを管理するには、Databricks SQLで[Can Manage](https://docs.databricks.com/sql/user/security/access-control/sql-endpoint-acl.html)権限を有している必要があります。
- サーバーレスSQLウェアハウスを作成する前に、管理者は最初に[ワークスペースでサーバーレスSQウェアハウスを有効化](https://docs.databricks.com/sql/admin/sql-endpoints.html#enable-serverless-workspace)しなくてはなりません。

# SQLウェアハウスの参照

サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouses**をクリックします。

デフォルトでは、ウェアハウスは状態(稼働中のウェアハウスを最初に表示)、そして、アルファベット順でソートされています。カラムのヘッダーをクリックすることで並び替えることができます。

[Databricks SQLクイックスタート](https://qiita.com/taka_yayoi/items/0e3e0730b71de28e4c08)を活用するなどして、すぐに利用を開始できるように、Databricksは自動で**Starter Warehouse**という小規模SQLウェアハウスを作成します。

ウェアハウス一覧のフィルタリングを行うには、検索ボックスにテキストを入力します。

接続情報、モニタリング、[アドバンスオプション](#アドバンスオプション)のような詳細なウェアハウスの設定を参照したい場合には、ウェアハウス名をクリックします。
![](https://docs.databricks.com/_images/endpoint-details.png)

# SQLウェアハウスの作成

Web UIの**New SQL Wharehouse**ページあるいは[SQL Warehouse API](https://docs.databricks.com/sql/api/sql-endpoints.html#create-warehouse)を用いてSQLエンドポイントを作成することができます。APIによるサーバレスウェアハウスの管理に関しては、[SQL Warehouse API](https://docs.databricks.com/sql/api/sql-endpoints.html#create-warehouse)をご覧ください。

**New SQL Wharehouse**ページの全てのデフォルト値をそのまま使用することで、迅速かつ容易に高効率、高性能なSQLウェアハウスを作成することができます。ワークロード、環境に応じてこれらのデフォルト値を変更することができます。

Web UIを用いてSQLウェアハウスを作成するには以下の手順を踏みます。

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouses**をクリックします。
1. **Create SQL Warehouses**をクリックして**New SQL Warehouses**ダイアログを表示します。
1. ウェアハウス名を入力します。
1.ウェアハウスプロパティのデフォルト値を使用するか編集します。

    - **Cluster Size**は、クエリーやダッシュボードを実行する際に使用するクラスターのワーカー数、計算リソースのサイズを表します。デフォルトは**X-Large**です。クエリーのレーテンシーを短縮するためにはサイズを大きくしてください。詳細は[クラスターのサイズ](#クラスターのサイズ)を参照ください。
    - **Auto Stop**では、指定された時間、アイドル状態が続いたらウェアハウスを停止するかどうかを指定します。デフォルトは10分です。**Advanced options**で**Serverless**を無効にした場合は、120分が推奨値となります。

        アイドル状態のSQLウェアハウスにおいてもDBUの課金は発生し、停止するまでDBUとクラウドインスタンス費用が課金されます。

    - **Scaling**では、ウェアハウスに送信されるクエリーが分散処理されるクラスターの最小数、最大数を設定します。

        デフォルトは最小数1、最大数1のクラスターとなっています。

        クエリーを実行する同時最大ユーザー数を取り扱うためにはクラスター数を増やします。同時実行クエリー10件に対して1台のクラスターを推奨します。どのようにDatabricksがエンドポイントにクラスターを追加、削除するのかについては、[キューイング、オートスケーリング](#キューイングオートスケーリング)を参照ください。

1. (オプション)アドバンスオプションを設定します。

    以下のいずれかの設定を行う場合には、**Advanced options**を展開します。
    - SQLウェアハウスの利用料をモニタリングするためにタグを追加
    - サーバーレスオプションの無効化
    - SQLウェアハウスにおけるスポットインスタンスのポリシーの設定
    - 新規機能を試すためにプレビューチャンネルを利用

    詳細に関しては[アドバンスオプション](#アドバンスオプション)を参照ください。

    :::note
    **注意**
    サーバーレスが[ワークスペースで有効化](https://docs.databricks.com/sql/admin/sql-endpoints.html#enable-serverless-workspace)されていない場合、このサーバーレスのオプションは表示されません。
    :::

1. **Create**をクリックします。
1. 以下のいずれかを行います。
    - [ウェアハウスのアクセス権](https://docs.databricks.com/sql/user/security/access-control/sql-endpoint-acl.html)を設定し、**Save**をクリックします。
    - **Skip**をクリックします。

    エンドポイントが作成され起動します。

また、[Databricks Terraform provider](https://docs.databricks.com/dev-tools/terraform/index.html)と[databricks\_sql\_endpoint](https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/sql_endpoint)を用いてSQLウェアハウスを作成することができます。

# アドバンスオプション

[New SQLウェアハウス](#sqlウェアハウスの作成)ダイアログを用いてSQLウェアハウスを作成する際、あるいは、既存のSQLウェアハウスを編集する際に[editダイアログ](#sqlウェアハウスの編集)の**Advanced options**を展開することで、以下のアドバンスオプションを設定することができます。これらのオプションは[SQL Warehouse API 2.0](https://docs.databricks.com/sql/api/sql-endpoints.html)でも設定することができます。
![](https://docs.databricks.com/_images/create-endpoint-aws-advanced.png)

## 利用料をモニタリングするためのタグの追加

**Tags**を用いることで、組織内のユーザーやグループによって使用されるクラウドリソースのコストをモニタリングすることができます。SQLウェアハウスを作成、編集する際に**Advanced options**を展開し、タグをキーバリューのペアとしてタグを指定することができます。Databricksがこれらのタグをクラウドリソースに適用します。

## SQLウェアハウスタイプの変更(クラシックあるいはサーバーレス)

クラシックSQLウェアハウスは、お使いのAWSアカウントの計算リソースを使用します。[サーバーレスSQLウェアハウス](https://qiita.com/taka_yayoi/items/685a11ea726b2b34a174)(パブリックプレビュー)は、Databricksのクラウドアカウントの計算リソースを使用します。サーバーレスSQLウェアハウスは、SQLウェアハウスの設定、利用をシンプルなものにし、起動時間を短縮します。サーバーレスオプションは[ワークスペースで機能が有効化](https://docs.databricks.com/sql/admin/sql-endpoints.html#enable-serverless-workspace)されている場合にのみ利用できます。詳細に関しては[サーバーレスSQLウェアハウスの有効化](#サーバーレスsqlウェアハウスの有効化)と[Serverless compute](https://docs.databricks.com/serverless-compute/index.html)を参照ください。

- ワークスペースでサーバーレスSQLウェアハウスが有効化されている場合には、SQLウェアハウスはデフォルトでサーバーレスになります。クラシックSQLウェアハウスを使用したい場合には、**Advanced options**を展開し、**Serverless**をオフにしてください。サーバーレスに戻すにはトグルをオンにします。
- サーバーレスSQLウェアハウスが有効化されていない場合、SQLウェアハウスは常にクラシックSQLウェアハウスになります。**Serverless**トグルは表示されず、ウェアハウスのタイプを変更することはできません。

:::note
**注意**
サーバーレスをオフにした場合、**Spot Instance Policy**オプションが表示され、デフォルトは**Cost Optimized**となります。
:::

## スポットインスタンスポリシーの設定(クラシックSQLウェアハウスのみ)

ワークスペースでサーバーレスSQLウェアハウスが有効化されていない、あるいは、**Advanced options**の**Serverless**をオフにすると、**Spot Instance Policy**オプションが表示され、デフォルトは**Cost Optimized**となります。

スポットインスタンスポリシーは、ワーカーがオンデマンドインスタンスのみを使用するか、オンデマンドとスポットインスタンスの組み合わせを使用するかを決定します。**Cost Optimized**では、多くの場合スポットインスタンスを使用し、一台のオンデマンドインスタンスを使用します。**Reliability Optimized**はオンデマンドインスタンスのみを使用します。

## プレビューチャンネルの利用

**Channels**では、**Current**のSQLウェアハウスコンピュートバージョン、あるいは**Preview**バージョンを指定します。プレビューバージョンでは、Databricks SQLの標準になる前の機能をテストすることができます。近いうちに提供される新機能に対してクエリー、ダッシュボードを試すためにプレビューチャンネルを使用するメリットがあります。[リリースノート](https://docs.databricks.com/sql/release-notes/index.html#channels)で最新のプレビューバージョンの内容を確認することができます。

デフォルトは**Current**です。SQLエンドポイントをプレビューチャンネルに切り替えるには、**Advanced options**を展開して**Preview**を選択します。

:::note warn
**重要！**
プロダクションワークロードでプレビューバージョンを使用することはお勧めしません。これは、チャンネルを含むウェアハウスのプロパティを管理者しか参照できないためです。ユーザーが間違ってプロダクションワークロードで使用しないように、SQLウェアハウスがプレビューバージョンであることがわかるウェアハウス名にすることを検討してください。
:::

# SQLウェアハウスの起動、停止、削除

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouses**をクリックします。
1. 稼働中のウェアハウスを停止するには**Stop**をクリックします。
1. 停止中のウェアハウスを起動するには**Start**をクリックします。
1. エンドポイントを削除するには、Actionsカラムの![](https://docs.databricks.com/_images/vertical-ellipsis.png)をクリックし、**Delete**をクリックします。

# SQLウェアハウスの編集

Web UIあるいは[SQL Warehouse API](https://docs.databricks.com/sql/api/sql-endpoints.html#edit-warehouse)を用いて、SQLエンドポイントを編集することができます。

Web UIを用いてSQLエンドポイントを編集するには以下の手順を踏みます。

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Endpoints**をクリックします。
1. Actionsカラムで![](https://docs.databricks.com/_images/vertical-ellipsis.png)をクリックし、**Edit**をクリックします。
1. エンドポイントプロパティを編集します。

    編集可能なプロパティに関しては、[SQLウェアハウスの作成](#sqlウェアハウスの作成)、[アドバンスオプション](#アドバンスオプション)を参照ください。

1. **Save**あるいは**Save and restart**をクリックします。

# クラシックSQLウェアハウスをサーバーレスSQLウェアハウスに変更

サーバーレスSQLウェアハウスに関しては、[Databricksのサーバーレスコンピュート](https://qiita.com/taka_yayoi/items/685a11ea726b2b34a174)を参照ください。サーバレスオプションは、[ワークスペースで有効化](https://docs.databricks.com/sql/admin/serverless.html)されている場合にのみ使用できます。

:::note
**プレビュー**
サーバレスSQLウェアハウスは[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouse**をクリックします。
1. クラシックSQLウェアハウスをクリックします。
1. **Edit**ボタンをクリックします。
1. タイプを変更するために**Serverless**トグルをクリックします。
1. **Save**あるいは**Save and restart**をクリックします。

# SQLウェアハウスのアクセス権の設定

SQLウェアハウスのアクセス権を設定するには以下の手順を踏みます。

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouses**をクリックします。
1. エンドポイントをクリックします。
1. ![](https://docs.databricks.com/_images/permissions-button.png)ボタンをクリックします。

    SQLウェアハウスのアクセス権ダイアログが表示されます。エンドポイントの作成者とDatabricks管理者がデフォルトで**Can Manage**権限を持っています。
![](https://docs.databricks.com/_images/sql-endpoint-permissions.png)

1. ユーザーあるいはグループとアクセス権を選択します。
1. **Add**をクリックします。
1. **Save**をクリックします。

アクセス権のレベルに関しては、[SQL warehouse access control](https://docs.databricks.com/sql/user/security/access-control/sql-endpoint-acl.html)を参照ください。

# SQLウェアハウスのモニタリング

ウェアハウスで処理されているクエリーの数と、ウェアハウスに割り当てられているクラスターの数を参照することができます。

1. サイドバーの![](https://docs.databricks.com/_images/endpoints-icon.png)**SQL Warehouse**をクリックします。
1. ウェアハウスをクリックします。
1. **Monitoring**をクリックします。

    過去6時間でウェアハウスで処理されたクエリーの数と、ウェアハウスに割り当てられたクラスターの数を示すグラフが表示されます。

    右上にある時間スケールボタンをクリックすることで、表示期間を変更できます。例えば、以下のスクリーンショットでは7日間の統計情報を表示しています。
![](https://docs.databricks.com/_images/monitor-endpoint.png)

:::note
**注意**
[Scaling](#sqlウェアハウスの編集)が有効化され設定された場合にのみ、クラスター数は1以上に増加します。
:::

# クラスターのサイズ

このセクションの表では、SQLウェアハウスのクラスターサイズと、Databricksクラスターのドライバーサイズとワーカーの台数をマッピングしています。

:::note
**注意**
サーバレスウェアハウスにおいては、同じクラスターサイズにおいて、クラシックウェアハウスに関してでドキュメントで一覧されているインスタンスタイプと異なるものを使用する場合があります。通常、サーバレスウェアハウスのクラスターサイズの価格/性能比はクラシックウェアハウスと同等なものとなります。
:::

| クラスターサイズ | ドライバーサイズ | ワーカーの台数 |
|:--|:--|:--|
| 2X-Small  | i3.2xlarge  | 1  |
| X-Small  |  i3.2xlarge |  2 |
|Small   | i3.4xlarge  | 	4  |
|Medium  |  i3.8xlarge |  8 |
| Large  | i3.8xlarge  |  16 |
| X-Large  |  i3.16xlarge | 32  |
|  2X-Large | i3.16xlarge  | 64  |
| 3X-Large  |  i3.16xlarge | 128  |
| 4X-Large  |  i3.16xlarge | 256  |

全てのワーカーのサイズはi3.2xlargeとなります。

# キューイング、オートスケーリング

Databricksでは、結果を計算するコストに基づいて、SQLウェアハウスに割り当てられるクラスターにおけるクエリーの数を制限します。エンドポイントごとのクラスターのスケールアップは、クエリーのスループット、投入されるクエリーのレート、キューのサイズに依存します。Databricksは、以下に示すように、現在実行している全てのクエリーの処理に要する時間、キューにある全てのクエリー、そして、向こう2分間で投入されるであろうクエリーの数に基づいてクラスターを追加します。

- 2分以内、スケールアップしない
- 2分〜6分、1クラスターを追加
- 6分〜12分、2クラスターを追加
- 12分〜22分、3クラスターを追加

これ以外の場合、3クラスターの追加に加え、予測されるクエリーの負荷に対して追加の15分ごとに1クラスターを追加します。

さらに、クエリーがキューで5分の待ちが発生する場合、常にエンドポイントはスケールアップされます。

15分間負荷が低い場合には、DatabricksはSQLエンドポイントをスケールダウンします。過去15分間における最大負荷に対応するのに十分なクラスターを維持します。例えば、最大負荷において同時実行数が25だった場合、Databricksは3クラスターを維持します。

## クエリーのキューイング

Databricksは、ウェアハウスに割り当てられた全てのクラスターが最大キャパシティで処理している場合、あるいは、エンドポイントが`STARTING`状態の場合、クエリーをキューイングします。

メタデータのクエリー(例えば、`DESCRIBE <table>`)や、状態を変更するクエリー(例えば、`SET`)はエンドポイントが`STARTING`出ない限り、キューイングされません。

## クエリーのルーティング

Databricksは以下のようにクエリーをルーティングします。

- **新規セッション:** 最も負荷の低いクラスターにルーティング
- **既存セッション:** 当該セッションで以前のクエリーを実行したクラスターにルーティング。クラスターに空きが無い場合、クエリーは最も負荷の低いクラスターにルーティング

### Databricks 無料トライアル

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