Databricks Serverless SQL のすゝめ

![plotly - app.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/d0290486-2376-0a26-808d-553589d13585.gif)
> Databricks の SQL Warehouse - Serverless を使用したWebアプリケーション例

# 目次
- [はじめに](#はじめに)
- [データブリックスの SQL Warehouse とは？](#データブリックスのsqlwarehouseとは？)
- [ServerlessSQLの推しポイント](#serverlesssqlの推しポイント)
    - [起動時間が早い](#起動時間が早い)
    - [パフォーマンス最適化の機能が充実している](#パフォーマンス最適化の機能が充実している)
    - [コストパフォーマンスが高い](#コストパフォーマンスが高い)
- [使い始める](#使い始める)
- [活用例](#活用例)
- [おわりに](#おわりに)

# はじめに
皆様はDatabricksにDWHの機能があることをご存知でしょうか。

Databricksをご存知の方は
「PythonとかSQLを書いてSparkで処理するんでしょ」
「MLFlowで機械学習のモデル管理とかできるんでしょ」
「Unity Catalogっていうガバナンスモデルがあるんでしょ」

など色々な印象をお持ちかと思います。全て正解ですが、SQL WarehouseなしでDatabricksを語ることはできません。弊社が提供するData Intelligence Platformの重要な機能の一つです。

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/7c126047-134f-5fa4-e14e-946cb1db104d.png">

> Data Intelligence Platform 構成要素のイメージ

この記事では下記の対象者向けにDatabricksSQL（特にServerlessSQL）をご認識いただき、あわよくば使い始めていただくことを目的としております。もし当てはまりそうでしたら是非読み進めてみてください。

【対象者】
1. Databricksを使っていない
    - DatabricksのDWH機能にご興味がある方
1. Databricksを既に使っている
    - SQL Warehouseを使っているが、ServerlessSQLを使ったことがない方
    - SQL Warehouseは使ったことがない方

【目的】
- DatabricksSQL（特にServerlessSQL）の機能や使い方、活用例をご認識いただく
- ServerlessSQLを使い始めていただく


# データブリックスのSQLWarehouseとは？
ServerlessSQLをご紹介する前にDatabricksのSQL Warehouseについて簡単にご紹介すると
「Databricks上でSQLを使った処理が可能なDWH機能」です。

一般的なDWHと同様にアドホックなSQLクエリを書いたり、BIダッシュボードの裏側で使っていただいたり、定期的なETLジョブを実行するために使っていただくことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/56e42f52-5674-dfd3-f369-ca4bd678bafc.png)
> Data Warehouse 機能のイメージ。BI、データ分析、アプリケーション用にデータを変換・蓄積

元々DatabricksはManaged SparkのサービスやMLFlowを提供していましたが、2020年以前はDWHの機能がありませんでした。DWH機能の需要に応える形で2020年にDatabricks SQL(現在は[SQL Classic](https://docs.databricks.com/ja/admin/sql/warehouse-types.html#classic-sql-warehouses)と呼ばれる）をリリースしました。その後、Python UDFや地理空間情報のサポート、[Predictive I/O](https://docs.databricks.com/ja/optimizations/predictive-io.html)を盛り込んでいるSQL Proが2022年にリリースされ、2023年にはServerlessSQLがリリースされました。2023年11月からAzureの東日本リージョン、AWSの東京リージョンでも2024年2月末から利用可能になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/b505a51b-e10d-59e2-1b08-54bda2a6dbfd.png)
> Databricks SQLの歴史。[Databricks SQL リリースノート](https://docs.databricks.com/en/sql/release-notes/index.html)より作成

# ServerlessSQLの推しポイント
ここではServerlessSQLの推しポイントを3点ご紹介したいと思います。
起動時間の早さが一番の推しポイントで、最適化の機能が充実している点とコストパフォーマンスの高さが続きます。
- [起動時間が早い](#起動時間が早い)
- [パフォーマンス最適化の機能が充実している](#パフォーマンス最適化の機能が充実している)
- [コストパフォーマンスが高い](#コストパフォーマンスが高い)


## 起動時間が早い

こちらが個人的に一番嬉しいServerless SQLの改善点です。従来のDatabricksSQL(Pro / Classic)はそれぞれ起動に4分程度かかっていました。（[公式ドキュメント](https://docs.databricks.com/ja/admin/sql/warehouse-types.html#pro-sql-warehouses)）

クエリの度に都度起動→4分待っているとユーザーエクスペリエンスとして最適ではありません。常時Warehouseを立ち上げていく場合は問題ないですが、コストが嵩んでしまいます。Serverless SQLは2-6秒([公式ドキュメント](https://docs.databricks.com/ja/admin/sql/warehouse-types.html#performance-differences-between-sql-warehouse-types))で起動するため、すぐにクエリを実行できてユーザーエクスプリエンスが大きく向上していると感じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/ac1c3abb-42fb-7e3c-0785-9cefb405408d.png)
> [SQLウェアハウスのタイプ](https://docs.databricks.com/ja/admin/sql/warehouse-types.html#performance-differences-between-sql-warehouse-types)記載の各SQLタイプの起動時間より作成


## パフォーマンス最適化の機能が充実している
SQLタイプごとに最適化のための機能が異なるのですが、簡単にまとめると下表のようになります。
見ていただくとわかる通り、Databricksとして推奨する全ての機能を持つのはServerlessになります。

| 機能                        | Serverless | Pro | Classic |
|---------------------------|------------|-----|---------|
| [Photonエンジン](https://www.databricks.com/jp/product/photon)               | ○          | ○   | ○       |
| [Predictive I/O](https://docs.databricks.com/ja/optimizations/predictive-io.html)            | ○          | ○   |         |
| [インテリジェント ワークロード管理 (IWM)](https://docs.databricks.com/ja/compute/sql-warehouse/warehouse-behavior.html#serverless-autoscaling-and-query-queuing) | ○          |     |         |

- [Photon](https://www.databricks.com/jp/product/photon) : Databricks 上のクエリエンジン。 これにより、既存の SQL および DataFrame API 呼び出しが高速化され、ワークロードあたりの総コストが削減されます。
- [Predictive I/O](https://docs.databricks.com/ja/optimizations/predictive-io.html) : SQL クエリでの選択的スキャン操作を高速化するための一連の機能。 予測 IO は、さまざまな高速化を提供できます。
- [インテリジェント ワークロード管理 (IWM)](https://docs.databricks.com/ja/compute/sql-warehouse/warehouse-behavior.html#serverless-autoscaling-and-query-queuing) : 大量のクエリを迅速かつコスト効率よく処理する Databricks SQL サーバーレスの機能を強化する一連の機能。 AI を活用した予測および動的管理技術を使用して、ワークロードに適切な量のリソースが迅速に確保されるように機能します。 

詳細な機能比較は[こちらの比較ページ](https://www.databricks.com/product/pricing/databricks-sql?_ga=2.194412461.1856475145.1711859027-898077029.1688114195)をご覧ください。

また、パフォーマンスチューニング方法はワークロードによって異なります。弊社シニアスペシャリストソリューションアーキテクトの@Mitsuhiro_Itagaki が書いたこちらの記事もご参照ください。

https://qiita.com/Mitsuhiro_Itagaki/items/f580440a3c19429a73f7

## コストパフォーマンスが高い
機能が充実している分、値段が気になる方が多いのではないかと思います。下表[ Pricing ](https://www.databricks.com/product/pricing/databricks-sql?_ga=2.194412461.1856475145.1711859027-898077029.1688114195)を見ていただくと、Serverlessの単価が一番高くなっています。機能が充実している分、料金が高いのではないかと思われることもあるのですが、そんなことはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/e5e1e519-8667-82fd-5d97-e8bdde440615.png)

Pro/Classicでは別途クラウドプロバイダーにインフラコスト（EC2やVM）が発生しますがServerlessの場合はそちらが発生しないため、トータルでコスト削減につながる場合が多いです。こちらは現在のワークロードによっても変わってきますので、詳細をご確認したい場合は弊社営業担当にご連絡いただけますと幸いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/863a0e43-39a2-596a-bde4-e5b273e260c2.png)

# 使い始める
使い方は下記動画をご参照ください。Databricksの画面左のパネルに存在する「SQLウェアハウス」から「SQLウェアハウスを作成」簡単に起動することができます。

![serverless_enablement.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/49b62ce0-181f-ca35-a788-e08d8792b2fe.gif)
> @ktksq作成のServerless SQL 利用開始手順のデモ

# 活用例
どのような用途で使えるかですが、ウェブアプリケーションやBIダッシュボードのバックエンドとして使っていただくこともできますし、SQLを使ったETLジョブを定期的に実行する際に使っていただくことも可能です。

## ウェブアプリケーション
![plotly - app.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/d0290486-2376-0a26-808d-553589d13585.gif)
> Databricks の SQL Warehouse(Serverless) を使用したWebアプリケーション例

詳細は下記のリンクをご参照ください。Plotly DashとServerless SQLを使用したダッシュボード作成を紹介してくださっています。

[Building Plotly Dash Apps on a Lakehouse with Databricks SQL](https://medium.com/plotly/building-plotly-dash-apps-on-a-lakehouse-with-databricks-sql-b9761c201717)

## BIダッシュボード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2789179/612de6d2-20f8-96a6-15da-bfff9dbc2135.png)
> Databricks の SQL Warehouseとダッシュボード機能を使用した例

こちらは弊社の[Demo集](https://www.databricks.com/resources/demos/library?itm_data=demo_center)に存在するDatabricksの利用料金を確認・予測するダッシュボード構築のデモになります。

[System Tables: Billing Forecast, Usage Analytics, and Access Auditing With Databricks Unity Catalog
](https://www.databricks.com/resources/demos/tutorials/governance/system-tables?itm_data=demo_center#tab-Databricks%20SQL%20Dashboard%20%E2%80%93%20Schema%20and%20Audit)

# おわりに
DatabricksのSQL Warehouse、特にServerless SQLについてご紹介いたしましたがいかがでしたでしょうか。

Databricksを既に利用している方々が Serverless SQL に少しでも触れてみたいと思っていただけましたら幸いです。またDWH機能を探されている方々にも有益な情報をご提供できていましたら嬉しいです。

ご質問などあればお気軽に[Twitter](https://twitter.com/cafe_engineer_)や[LinkedIn](https://www.linkedin.com/in/kohei-arai-551355b3/)までご連絡ください。
また[公式Twitter](https://x.com/DatabricksJP?s=20)にも最新のプロダクト情報を投稿しているので、是非フォローしてください。

# 参照リンク

https://qiita.com/Mitsuhiro_Itagaki/items/f580440a3c19429a73f7