セルフ分析ツールとしてのDatabricks Genie：設定から活用まで

# はじめに
こんにちは。株式会社データ・ワンの曽根高です。
弊社では、DatabricksのGenieを全営業社員に解放し、セルフ分析ツールとして活用しています。
この記事では、Genie利用時に弊社で意識している設定方法を紹介します。

# Genieとは
Databricksが提供する生成AIサービスで、自然言語での質問に対してSQLの生成・実行および簡単な可視化が可能です。
https://www.databricks.com/jp/product/ai-bi/genie

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935970/31d75ac1-53e1-44e7-0cbd-7b3309b134e9.png)



また、DatabricksのLakehouse Federation機能を使うことで、外部のデータベースを参照できるため、データがDatabricksにない場合でも、BigQueryやMySQLのデータをGenieで利用できます。
https://www.databricks.com/jp/blog/announcing-general-availability-lakehouse-federation

SQLを書けない人でも日本語で質問すればデータ分析が可能になるため、これまでアナリストに依頼していたデータ分析をGenieで代替できます。これにより、分析依頼者は迅速に結果を取得でき、アナリストの対応負担も軽減されるというメリットがあります。一方で、GenieはAIのため、適切な設定や前提情報がないと的確なSQL生成や正確な回答が困難になることがあります

# Genieにより的確なSQL生成・正確な回答をしてもらうために
## テーブルのメタデータを充実させる
Genieはどのテーブルのどのカラムを参照すれば質問に対して適切なデータを抽出できるのかを判断する際に、テーブルやカラムの名前とコメントを参照します。
テーブル名やカラム名に略語(例：`qty`(`quantity`))や、日本企業だと、日本語をそのままローマ字にしたもの(例：`chumon_bi`(`注文日`))を設定している場合があると思います。
略語やローマ字のカラム名では意味を理解できず、的確なSQL生成が難しくなります。
その場合、コメントにカラムの意味を記載することでこれを回避できます。

また、カラムに入っている値の情報をコメントに書いておく事で、さらに的確なSQLを生成可能にします。
例えば、性別を表すgenderカラムに入っている値が1,2,3でそれぞれ男性、女性、その他を表す場合などにコメントを入れておけば、「男性会員の人数を教えて」といった質問にも対応可能になります。
そのほかにも、日付が文字列で入っているカラムへのコメントとして表現形式がYYYY-MM-DDなのかYYYYMMDDなのかといった情報を記載しておけばSQLのWHERE句で適切に条件指定できるようになります。
コメントは日本語で書いてもGenieは理解してくれます。
DatabricksではUnity Catalogを利用してテーブルやカラムへのコメントを追加・編集できます
※BigQuery等の外部データベースを利用する場合はUnity Catalog側でコメントの編集はできないため、それぞれのデータベース側でコメントを編集する必要があります。

## 分析の用途に応じて、Genieが参照可能なテーブルを限定する(Spaceを分ける)
GenieではSpaceという単位で個別のチャットを複数作る事ができます。
このSpaceごとにどのテーブルを参照するのかを設定できます。
参照可能なテーブルを多く設定した場合、質問に対してどのテーブルを利用して回答すればいいのかGenieが上手く判断できなくなる原因になります。
そのため、分析の用途ごとにSpaceを分けて参照可能なテーブルを限定するのが良いと思います。
Spaceには、名前や説明文を設定できるので、どういった分析をしたいときにどのSpaceを利用すれば良いのかを利用者に対して示す事ができます。
とはいえ、Spaceがたくさんあると利用者の混乱を招きかねないので、1つのSpaceである程度柔軟に様々な分析に対応できることも大切です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935970/502023c8-017e-2d32-8813-1144cf00f7e3.png)


## Instructionsに分析の前提となる情報を記載しておく
Genieの利用者は、社内でしか通じないような用語・略語を使ってGenieに質問する事があります。
そのままだと、Genieは上手く質問を理解できませんが、Instructionsに前提情報を記載しておくことで、質問を理解してくれるようになります。

例えば、「ファミマ」や「FM」はファミリーマートのことを意味するということや、
小売業界の用語である「併買」がどんな意味なのかをInstructionsに書いておくことができます。

また、Instructionsを利用してSQLの生成方法も指定する事ができます。
例えば、取引データが入っているテーブルがあり、日付ごとにdateというカラムでパーティション化されているとします。
さらに、このテーブルはtimestampという取引時刻を表すカラムも持っているとします。

この場合、期間を指定して分析するような質問に対してGenieがtimestampを利用してデータの絞り込みを行うと、テーブルの全パーティションをスキャンすることになります。

これを回避するために、期間の絞り込みの際には、必ずdateカラムを利用すること、時刻まで絞り込みが必要な場合には、dateとtimestampの両方を利用するようにInstructionsに記載しておくことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935970/3050d409-ace3-13c0-6791-3df6b92b08fa.png)


## viewを利用して参照可能なレコードを限定する
Genieを利用すると、SQLを知らない人でもある程度自由に分析が可能になりますが、時にはシステムチームの想定外のSQLが生成・実行されてしまう事があります。

例えば、過去10年分の取引データが入っている大規模なテーブルがあるとします。
アナリストがこのテーブルを利用する際にはWHERE句で適切な絞り込みを行うと思いますが、このテーブルをそのままGenieで参照可能にしておくと、10年分をフルスキャンするようなSQLが実行されてしまう恐れがあります。

実際に分析に利用するのは1~2年分のデータがあれば十分という事であれば、viewが利用可能です。
大元のテーブルではなく、あらかじめデータを1~2年分に絞り込んだviewをGenieが参照するようにしておけば、上述したような想定外のSQLが実行されることを防ぐことができます。

# Genieの利用を社内で浸透させるために

## よく利用される分析はSample Questionsに記載しておく
Genieの利用者は、質問文の作成に苦労することがあります。
上手く質問できないために、Genieが的確に回答する事ができず、利用者の満足度が下がってしまうと、利用率の低下に繋がりかねません。

GenieにはSample Questionsという機能があり、質問文の例を登録しておきGenie Spaceのトップページに表示することができます。

まずはSample Questionsの質問を利用者に使ってもらい、Genieの便利さを知ってもらうことで、その後の利用を促進できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935970/83cd69ce-c33d-55a3-c390-dba2aeb32fc9.png)


## アナリストに依頼が来てもGenieで対応できるなら回答しない
弊社でGenieを全社に導入した直後は、ログインしてくれた人は全体の数%で、それまでと同じように分析の依頼はアナリストに来るような状態でした。

このときに要件が複雑すぎずGenieで対応できる質問に対しては分析結果を回答せず、代わりにどのようなプロンプトでGenieに質問すればよいかを伝えるようにしました。

このような取り組みを続けた結果、Genieのメリットが理解され導入後3か月ほどで全体の8割以上の社員へGenieの利用が浸透しました。

# おわりに
データ・ワンでは、GenieなどのDatabricksのサービスを活用してデータ基盤を構築しています。
エンジニア・アナリストともに絶賛募集中ですので、ご興味を持っていただけた方はぜひご応募ください。
https://data-one.co.jp/recruit/