DatabricksのサーバレスSQLウェアハウス提供によって影響を受けるサービスをまとめてみた

# 導入

Databricks AWS Tokyoリージョンにおいて、サーバレスSQLウェアハウスが提供開始されました。
SQLウェアハウスはDatabricksにおいてデータウェアハウスの中核を担う仕組であり、そのサーバレス機能がAWS東京リージョンにやってきました。

(↓利用における失敗(?)談)

https://qiita.com/isanakamishiro2/items/28fac5b79795cb99b257

個人的に待望の機能であり、合わせてDatabricks SQLの学び直しも始めているのですが、サーバレスSQLウェアハウスによってどこで何が良くなるんだろうと疑問に思ったので、関連するサービスとその影響の個人的見解を書き出してみます。

:::note warn
かなり個人の主観や駄々洩れの欲望が入っていますのご注意ください。
あくまで一人のDatabricksユーザとしての意見です。

また、AWS上のDatabricksについて述べています。
Azureだと状況が異なるかもしれません。
:::


# その前に

そもそものDatabricks SQLウェアハウスの種類について、おさらいしておきます。

以下より抜粋。

https://docs.databricks.com/en/compute/sql-warehouse.html

> Databricks SQL では、次の種類の SQLウェアハウスがサポートされています。
> - サーバーレス
> - Pro
> - クラシック
>
> SQLウェアハウスの種類ごとに、パフォーマンス機能が異なります。 次の表は、各 SQLウェアハウスの種類でサポートされるパフォーマンス機能を示しています。

<table>
<colgroup>
<col style="width: 15%">
<col style="width: 19%">
<col style="width: 19%">
<col style="width: 46%">
</colgroup>
<thead>
<tr class="row-odd"><th class="head"></th>
<th class="head"><p>Photon エンジン</p></th>
<th class="head"><p>予測IO</p></th>
<th class="head"><p>インテリジェントなワークロード管理</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p> サーバーレス</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
</tr>
<tr class="row-odd"><td><p> Pro</p></td>
<td><p>X</p></td>
<td><p>X</p></td>
<td></td>
</tr>
<tr class="row-even"><td><p> クラシック</p></td>
<td><p>X</p></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

> 次の一覧では、各パフォーマンス機能について説明します。
>
> **Photon:** Databricksのネイティブベクトル化クエリエンジン。これにより、既存の SQL および DataFrame API 呼び出しが高速化され、ワークロードあたりの総コストが削減されます。
>
> **予測 IO:** SQL クエリでの選択的スキャン操作を高速化するための一連の機能。予測 IO は、さまざまな高速化を提供できます。
>
> **インテリジェント ワークロード管理 (IWM):** 多数のクエリを迅速かつコスト効率よく処理する Databricks SQL Serverless の機能を強化する一連の機能。IWMは、AIを活用した予測と動的管理技術を使用して、ワークロードに適切な量のリソースを迅速に確保します。主な違いは、静的なしきい値を使用するのではなく、ワークロードの要求に動的に応答する Databricks SQL の AI 機能にあります。

というわけで、もともとクラシック->Pro->サーバレスの順にパフォーマンスに関する機能が増えていきます。
正直データ量がそこまで多くない領域においてはクラシックでも十分なパフォーマンスが出ているのですが、サーバレスになるとより高速なパフォーマンス、かつ柔軟なオートスケールが実現できるようです。

<br>

とはいえ、性能の増加と合わせて単価も上がります。

以下が2024年3月現在のウェアハウス種類別DBU単価です。（DBUはDatabricksの使用リソース単位）
また、Enterpriseプランのプライスを出していますが、Premiumでも同価格でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/8284061c-2b68-1891-91f7-c13650b974f6.png)

ただ、価格比較において、サーバレスの価格はAWSのインスタンス費用も含むところに注意が必要です。
クラシック・Proは自前のAWSアカウント下でEC2インスタンスを起動するため、その分のコストを追加で見る必要がありますが、サーバレスはDatabricksアカウント下のEC2インスタンスを使用している(たぶん)ため、自AWSアカウント側のコストはかからなくなります。

これを考えるとProと価格差ほとんど無い気がします（厳密に試算してないけど）し、利便性考えるとサーバレス使っといたらいいじゃん、と感じています。

サーバレスの恩恵を受けづらいワークロード（あまり大量データを扱わず、しかし常時起動しておかなければならない）の場合は従来通りクラシックで、それ以外はサーバレスという使い分けでいいんじゃないかと思います。

ただし、自社のセキュリティポリシーで使えないというケースや、サーバレスは[外部Hiveメタストアが使えない](https://docs.databricks.com/en/compute/sql-warehouse.html#what-are-the-warehouse-type-defaults)などの制約もあるので、そこは注意が必要です。

:::note info
ただ、みんなUnity Catalogに移行すると幸せになれると思うよ。マジで。
:::

<br>

では、サーバレスSQLウェアハウスの導入によって影響を受けるサービスと影響内容を考察してみます。

# その1: Databricks SQL関連(SQLエディタ・クエリー・ダッシュボード・アラート)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/e3002d78-12ab-7575-d114-e5b9d8323914.png)

Databricks SQLの主要サービス群であるクエリー・ダッシュボード・アラートはサーバレスSQLウェアハウスによってかなり体験が変わります。

## SQLエディタ

これまでは開発用やデータ確認用にクエリを書く際は3分程度スピンアップを待ってから行っていました。
だいたいコードを書き終わってから一息つくころに、ようやく実行可能になる感じ。
また、SQLエディタ上でのコード補完も、テーブル名などはウェアハウス起動中でないと補完されないケースがあり、ウェアハウスの起動待ちで結構ストレスを感じていました。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 20
}
</style>
footer すぐにスキーマ名やテーブル名の補完が使える
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/197247a9-e57a-9a8e-0cb7-f8c5e5112c3a.png>
@enduml
```

それが、数秒待ち時間がかかるとはいえ、ほぼ待ち時間無しで行えるのはエンジニアとしてとても嬉しい。



## クエリー/ダッシュボード

Databricksのクエリー/ダッシュボードは軽量で必要最低限の機能が提供されているいいサービスだと思うのですが、個人的にビジネスユーザへの提供に踏み出せていませんでした。

理由としては、
- コスト低減を狙ってオンデマンドでウェアハウスを立上げる運用をする場合、ユーザ体験を著しく損なう（間違いなく使われなくなる）
- ユーザ体験を上げようと思うと起動し続ける必要があるが、コストが・・・。

という(よくある)ジレンマです。

そのため、この領域のバックエンドは競合サービスを活用していたのですが、サーバレスSQLウェアハウスによってようやくこのジレンマを解消できそうです。

:::note info
とはいえ待ち時間が無いわけでは無いので、スピンアップ時のレイテンシはもっと短くなって欲しいなと思っています。人間の欲望は尽きることがないなあ。
:::

## アラート

アラートのスケジュールについて、サーバレスSQLウェアハウスを利用することでスピンアップタイムをあまり加味する必要が無くなりました。
これまでは（常時起動のウェアハウスを使わない場合）ウェアハウスの起動時間を加味してスケジュールを考慮することをしていましたが、そこをあまり気にしなくて済むようになったのは地味に大きい。

# その2: カタログエクスプローラ

何気にこれの使い勝手向上が個人的に一番大きいかもしれません。

ちょっとデータのプレビューが見たいとき、でも使えるクラスタが起動してないとき、というのは個人的によくあります。
そんなときに分単位で待つ必要がないのはかなりストレス軽減になります。
（また、最短5分で自動終了する設定ができるので、手動終了させなくてもそれなりにお財布に優しい）

また、SQLウェアハウスはDatabricksのデータオブジェクトの閲覧に制限が(ほとんど?)ないため、サーバレスだと使いやすいです。
例えば、Unity Catalog対応の[Delta Live Tables](https://docs.databricks.com/en/delta-live-tables/index.html)を利用すると、通常のテーブルやビューではなく、[マテリアライズドビュー](https://docs.databricks.com/en/sql/user/materialized-views.html)などが作らます。
これは、2024年3月現在、[**シングルユーザモードのクラスタでは利用することができない**](https://docs.databricks.com/en/sql/user/materialized-views.html#limitations)という制限があります。

シングルユーザモードのクラスタは起動してるけど、マテリアライズドビューのデータをプレビューしたい・・・という経験が実際にあるので、それらをすぐに実行できるサーバレスSQLはありがたいです。

:::note info
一方、マテリアライズドビューに関する制限については、Databricks社に早くこの制限解消を実施して欲しいと願っています。
:::


```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 24
}
</style>
footer さっとデータが確認できる
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/b1462fbb-9f16-f14e-7e44-0ae054f978f9.png>
@enduml
```

# その3: ノートブック

ノートブックのコンピュートリソースとして、サーバレスSQLウェアハウスを利用することができます。（ただし、言語=SQLのみ）

自分はPythonもSQLもノートブックで書くことが多いのですが、SQLだけとはいえノートブックでも気軽に開発作業を行えるのは助かります。開発体験大事。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 32
}
</style>
footer ProとサーバレスSQLウェアハウスのみ、ノートブックへアタッチ可能
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/e6c56c50-8ae8-0577-fd65-b695bb36f619.png>
@enduml
```

# その4: ワークフロー

SQLのタスクに限りますが、ワークフローのクラスタにもSQLウェアハウスの指定が可能です。
サーバレスSQLウェアハウスを利用することでジョブ実行の起動時間が短縮し、またスケジュール設定の起動待ち時間の考慮を緩和することができます。

:::note info
サーバレスDelta Live Tablesも早く来て欲しい。。。
:::


```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 32
}
</style>
footer JobのクラスタにSQLウェアハウスの指定が可能
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/ace07f0b-50f0-7874-f886-d58ed5ccb0a7.png>
@enduml
```

# その5: 外部ツールからの利用

TableauやPowerBIのような外部ツールからの接続において、サーバレスSQLウェアハウスの導入は効果的です。

私は実際にPowerBIとの接続をよく利用しますが、特に開発においてSQLウェアハウスの起動時間はやはりストレスでした。また、PowerBI Serviceを使ったダッシュボード公開においてもSQLウェアハウスのスピンアップ時間を気にしないといけないケースがありましたので、このあたりの体験が向上するのは非常にありがたいです。


```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 32
}
</style>
footer SQLウェアハウスと連携できる外部ツールたち
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/a8107e57-bcbf-ee73-83ca-3ba9d1a45572.png>
@enduml
```

他、[Databricks SQL CLI](https://docs.databricks.com/en/dev-tools/databricks-sql-cli.html)経由でSQLを実行するといったケースでも同様にメリットがあるかと思います。

# おわりに

サーバレスSQLウェアハウスが関係するサービスをいろいろ挙げてみました。
他にもAPI関連など影響するサービスが多々あると思いますが、さすがに挙げきれないのでこんなところで。
派手な機能ではないかもしれませんが、様々な体験が変わる重要なアップデートだと思います。

ただ、たまにサーバレスSQLウェアハウスの起動時に以下のようなエラーに遭遇します。
今後の改善・安定化を期待しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/797cdf7a-d0f6-9c7a-cfb8-e5acdf3a8912.png)

しかし、繰り返しになりますが、サーバレスSQLウェアハウスは個人的にかなり待ち望んでいた機能の一つでして、ようやく来たなーという感じです。
Databricks社の方々には、この調子で米国にて実装されているサービスを日本でも早期に展開いただくことを期待しています。
Model Servingとか。Model Servingとか。Lakehouse Appとか。Model Servingとか。VectorSearchとか。Model Servingとか。（くどい）