DatabricksアシスタントによるText2SQL

私も日頃お世話になっているDatabricksアシスタントがGAになりました！

https://www.databricks.com/blog/announcing-general-availability-databricks-assistant-and-ai-generated-comments

そして、LinkedInでこちらの記事を発見。実際にアシスタントでどこまでできるのかを検証されていました。

https://www.linkedin.com/posts/josuebogran_databricks-ai-assistant-went-ga-today-but-activity-7212311922707197952-xFRG?utm_source=share&utm_medium=member_desktop

となると気になるのは**日本語でどこまで行けるのか**ということです。なので、試してみました。事前に日本のCOVID-19感染者数のテーブルを`takaakiyayoi_catalog.japan_covid_analysis.covid_cases`として登録しています。

# テーブルの特定

> 日本のCOVID-19感染者数を保持するテーブルを探して中身を表示してください

```sql
SELECT *
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
```
![Screenshot 2024-06-28 at 16.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3988918b-244c-726f-3b21-66fda07ea442.png)

# 概要

> どの期間のデータが含まれていますか

```sql
SELECT MIN(date_timestamp) AS start_date, MAX(date_timestamp) AS end_date
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
```
![Screenshot 2024-06-28 at 16.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/adf7aa7d-483f-f2c2-7cc2-ee38bf7807b6.png)

> 都道府県の数はいくつですか

```sql
SELECT COUNT(DISTINCT Prefecture) AS prefecture_count
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
```
![Screenshot 2024-06-28 at 16.49.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/51ecec82-12f3-7333-fb18-6faef6710e1b.png)

# 上位、下位の抽出

> 最も感染者数合計の多い都道府県はどこですか

```sql
SELECT Prefecture
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
GROUP BY Prefecture
ORDER BY SUM(Cases) DESC
LIMIT 1
```
![Screenshot 2024-06-28 at 16.49.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/06a98b2c-172a-687b-679d-a728a0604c4c.png)

> 最も感染者数合計の少ない地方はどこですか

```sql
SELECT Area, SUM(Cases) AS total_cases
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
GROUP BY Area
ORDER BY total_cases ASC
LIMIT 1
```
![Screenshot 2024-06-28 at 16.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/39129e59-2fd6-93f9-ad41-16e3f17a01f7.png)

# 集計

> 都道府県別、月別の感染者数のデータをください

```sql
SELECT Prefecture, DATE_TRUNC('month', date_timestamp) AS Month, SUM(Cases) AS TotalCases
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
GROUP BY Prefecture, Month
ORDER BY Prefecture, Month
```
![Screenshot 2024-06-28 at 16.51.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8ea126b6-999b-384b-b9e4-f3f6dd93fb3e.png)

> 地方別、四半期別の感染者数のデータをください

```sql
SELECT Area, 
       DATE_TRUNC('quarter', date_timestamp) AS Quarter, 
       SUM(Cases) AS TotalCases
FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
GROUP BY Area, Quarter
ORDER BY Area, Quarter
```
![Screenshot 2024-06-28 at 16.51.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2b739f32-6e44-d990-0a6c-f74935ebd8a7.png)

# 変動

> 最も感染者数の増加率が高かったのはどの県でいつのことですか

```sql
WITH cases_by_prefecture AS (
  SELECT Prefecture, DATE_TRUNC('month', date_timestamp) AS Month, SUM(Cases) AS TotalCases
  FROM takaakiyayoi_catalog.japan_covid_analysis.covid_cases
  GROUP BY Prefecture, Month
),
cases_growth_rate AS (
  SELECT Prefecture, Month, TotalCases,
         LAG(TotalCases) OVER (PARTITION BY Prefecture ORDER BY Month) AS PreviousCases,
         (TotalCases - LAG(TotalCases) OVER (PARTITION BY Prefecture ORDER BY Month)) / LAG(TotalCases) OVER (PARTITION BY Prefecture ORDER BY Month) AS GrowthRate
  FROM cases_by_prefecture
),
max_growth_rate AS (
  SELECT Prefecture, Month, GrowthRate
  FROM cases_growth_rate
  WHERE GrowthRate = (SELECT MAX(GrowthRate) FROM cases_growth_rate)
)
SELECT Prefecture, Month
FROM max_growth_rate
```

これはすごい。キチンとLAG関数使って前月からの変動率を計算している。
![Screenshot 2024-06-28 at 16.52.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1c45b84c-de76-458e-57b8-f1f2f3efed4e.png)

# まとめ

私がいうのもアレですが、想像以上に賢い。しかも、[Genie](https://qiita.com/taka_yayoi/items/b7ca4df53000afe9ba02)と同じで最初に特定したテーブルに対して対話を通じて分析を進められるのが良いです。

クイックに日本語でデータ解析したい時はGenie、SQLを確認、修正しながら分析を進めるならノートブックとアシスタントの組み合わせというところでしょうか。

証拠はこちらです。
<iframe width="560" height="315" src="https://www.youtube.com/embed/jq8177aUJoE?si=6oXssmPf3jnYIcPW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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