[Gemini in BigQuery] Natural language chat（自然言語）を使ってBig QueryでSQLを自動生成してもらう②（プレビュー版）

## はじめに
こんにちは。
2024年4月に発表された**Gemini for Google Cloud**の中から、今回も**Natural language chat**の挙動を検証してみました。
## 事前説明
Google Cloudのコンソールで**Natural language chat**について以下の説明が記載されています。

```Through a natural language chat interface, you can quickly chat with Gemini Code Assist to get answers to your coding questions, or receive guidance on cloud best practices. Chat is available in the Google Cloud Console, and IDEs such as Visual Studio Code and JetBrains IntelliJ, via the Cloud Code IDE extensions.```

つまり、自然言語チャットを通じてコーディングの質問をして回答を得たり、べスプラに誘導して貰えるサービスをサポートしているようです。

なお、2024年5月20日時点では英語のみのサービス提供であると書いていたのだが、どうやら順次日本語サポートを開始している模様。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/4ae4b4de-ca6f-c8a3-95bb-3f85f079a30e.png)


## 前提
**Gemini for Google Cloud API**を有効にしてからBig Queryコンソールに移動。
右上のペインから鉛筆マークを押下、「自動生成」にチェックが入っていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/c9e1980c-ddd8-9ad1-50ea-993b478f9056.png)

検証はBig Queryのパブリックデータ
（bigquery-public-data.chicago_taxi_trips.taxi_trips）を使用していく。

## 実機検証①
コンソール上でコード生成して貰うにはコメントの先頭に「#」を置く。
「bigquery-public-data.chicago_taxi_trips.taxi_tripsのテーブルのチップ金額のトップ10を出して」とコメントを書く。Enterを押下するとクエリが生成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/29ab372b-82ae-d44f-38f8-5a2d13d47c74.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/11d94b69-43c8-b6d6-a448-ad29156ceb07.png)

存在しないカラムを含んだクエリを返してきた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/e456ff97-1955-ff89-a017-c84ded1db013.png)

日本語からtipsカラムを推測出来なかったように見える。

正しいクエリに微調整する。
```diff_sql:# bigquery-public-data.chicago_taxi_trips.taxi_tripsのテーブルのチップ金額のトップ10を出して
SELECT
-   tip_amount
+   tips
  FROM
    `bigquery-public-data`.chicago_taxi_trips.taxi_trips
ORDER BY
-   tip_amount DESC
+   tips DESC
LIMIT 10
```
修正ver.のクエリ動作結果は期待値通り。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/72d07c23-8a59-dade-033d-a5dfe55c3b3c.png)

## 実機検証②
要求を少し増やす。
「# bigquery-public-data.chicago_taxi_trips.taxi_tripsテーブルのトータル走行距離上位25件のタクシーIDと会社、trip_milesの合計マイル数を表示、先頭のカラムとして走行距離が大きい順に一意の番号を付与して」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/dd53974b-d6d3-57d9-43af-2925a2cbc2ee.png)

```diff_sql:こんなクエリが返ってきたらいいな…の期待値例（筆者作成クエリ）
SELECT
  ROW_NUMBER() OVER (ORDER BY SUM(trip_miles) DESC) AS rank,
  taxi_id,
  company,
  SUM(trip_miles) AS total_miles
FROM
  `bigquery-public-data.chicago_taxi_trips.taxi_trips`
GROUP BY
  taxi_id,
  company
ORDER BY
  total_miles DESC
LIMIT
  25;
```
結果、期待値と完全に一致するクエリが返された。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/1fdfa8fd-286f-df29-b7bc-350cf26b92c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/17772f2a-91e5-ce4c-ec14-436e5d3b8e64.png)

（所感）明示的な指示をしてあげれば期待通りのことをしてくれる。（人間の新卒と同じ）

## 後述
英語版の環境には公式に掲載された全6個のアシスタント機能のプレビューが提供されている。2024年5月現在は日本語版環境で試せるのはそのうち2個。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632589/e7ccbd68-895f-16f4-50c8-bdece5b6e6af.png)

なお、英語環境でハンズオンさせて貰った感じ**Explanation**（クエリの説明）機能が好みだった。「長文コード読めるけど読むの面倒くさいな～」と考えてしまう怠惰な私にぴったりだった。何十行にも渡るクエリをコンソール上でハイライトすると「In summary, this query identifies the top 10 users with the highest average～」など10秒以内に理解できる文章で説明してくれる。

自然言語の別の方法はこちらの記事で紹介。

[[Gemini × Big Query] Natural language chat（自然言語）を使ってBig QueryでSQLを自動生成してもらう（プレビュー版）](https://qiita.com/pull_request/private/db43041e6ab52ba3820b)

## 参考
[＜公式＞Gemini のアシスタント機能を使用してクエリを作成する](https://cloud.google.com/bigquery/docs/write-sql-gemini?hl=ja&_gl=1*159h774*_ga*MTg3MTUwNDMzMi4xNjk3MjY0ODA2*_ga_WH2QY8WWF5*MTcxNjI1NDI1OC41Ni4xLjE3MTYyNTQzMjkuMC4wLjA.&_ga=2.18421305.-1871504332.1697264806)
[＜公式＞Gemini Code Assist を使用して、API、インテグレーション、自動化フローを構築する](https://cloud.google.com/blog/ja/products/api-management/gemini-code-assist-for-apigee-api-management)