コラム

【Oracle生成AIでアプリ開発】チャットでSQL文作成

西尾孝之(Takayuki Nishio)


こんなところにもOracle生成AI!
世の中で盛り上がっている生成AI技術の話(LLM+RAG)とは少し異なる話にはなりますが、このような生成AIもあるんです。

生成AIを使ってチャットでSQL文を作れる時代です。
また、データベースにもAIが搭載され、管理や監視、パッチ適用まで自律的に行われるAutonomousDatabaseもあります。
Oracle Cloudでは、もちろん本流の生成AIも充実しているのですが、今回は少しはずれて特殊なOracle生成AIについて紹介します。

SQLがチャットで作れるってどういうこと?

最近話題の生成AI。皆さんはどのような場面での活用が思い浮かぶでしょうか?
ChatGPTやCopilotなどチャット形式での問い合わせでしょうか?画像や文章の生成でしょうか?
本当にいろいろな場で、生成AIというキーワードを見かけるようになりました。
そんななか、データベース技術者、SQL開発者が活用できる生成AIがあります。
Oracleデータベースで使えるSQL生成AI機能をSelectAIといいます。このOracleデータベースで使用できるSelectAI機能では何ができるのか、百聞は一見に如かずです。まずは以下をご覧ください。

データベースチャットアプリの質問欄にこのように入力してみました。
「2016年に入社した従業員の名前を教えて?」

人事システムのデータベース(従業員表・部門表)を対象に、自然言語で問い合わせを書いています。
さぁ、どのような結果が返ってくるでしょうか?

人事システムのデータベースにSELECT文を実行した結果が返ってきました。ここでSelectAIが動いています。もう1つ例をみてから、どのような動きで結果が返ってきているか説明したいと思います。

先ほどの問い合わせを少し変更してみました。従業員の名前ではなく、従業員の数を問い合わせてみたいと思います。
「2017年に入社した従業員の数を教えて?」

先ほどとは結果が変わりましたね。従業員の名前一覧が表示されるではなく、従業員の数が「19」人と表示されました。しかもこれは2017年に入社した従業員の数です。
どちらの問い合わせも人事システムのデータベースに対してSELECT文を実行した結果が返ってきています。

このチャットアプリでは画面上の「Explain」ボタンで実際に実行されたSELECT文が確認できます。
SelectAIが生成したSELECT文が確認できるわけですね。
見てみましょう。

どうでしょうか。
チャットに入力した問い合わせは「2017年に入社した従業員の数を教えて?」でした。
「2017年に入社」という問い合わせが、SelectAIによって「HIRE_DATE = 2017」と条件に置き換わっています。「年」という日本語は自動的にYEARを条件とするように変わっていますね。「従業員の数」は「COUNT(EMPLOYEE_ID)」のように数を数えるSQLのCOUNT関数になっています。
SelectAIによって問い合わせ内容を解析し、うまくSELECT文が生成されたことが確認できます。
今回「教えて?」としましたが、人によっては「数は?」や「何人?」という言葉を使うかもしれません。
そのような場合でもSelectAIにより同様のSELECT文が生成されます。
構文に厳密なルールがあるわけではなく、自然な言葉をある程度認識して、生成するというところがAIっぽいですね。
他にも人数のカウントではなく、数量の合計を出したいときは問い合わせを「合計は?」とすればSQLのSUM関数に置き換わります。

これは当たり前の話ですが、データベースに対して問い合わせを行うためにはSELECT文を使用する必要があります。そのため、皆さんWebアプリケーションなどを作成し、画面操作の結果をもとにアプリケーションがSQLを実行していますよね。アプリケーションの利用者はSQLを意識することはありませんが、アプリケーション開発者はSQLを組み立てているかと思います。SelectAIの機能はそのSQLの組み立てすらなくしています。ここまでの例のように自然言語で問い合わせが可能です。
自然言語で問い合わせを行うと、SelectAIが自動的にSELECT文を生成し、テーブルからデータを検索して結果を返してくれます。日付などの条件指定や、集計関数の適用も自動で行われています。これは便利ですね。

もう1つ、Oracleデータベース(リレーショナルデータベース)といえば、「結合」がポイントです。結合についてもみてみたいと思います。今回の例は、人事システムのデータベースのため、従業員表(従業員マスタ)と部門表(部門マスタ)を分けて表を作成しています。これが結合されるかみてみましょう。売上関係のシステムをお使いの方であれば、売上表(売上マスタ)と、製品表(製品マスタ)というように置き換えてみていただいてもよいかと思います。


「営業部の従業員は何人?」としてみました。
あえて日本語としてのポイントをいれてみました。まず条件に「営業部」と日本語を入れています。もう1つは先ほどと同じように数を数える問い合わせですが、先ほどは「数を教えて」としていたところを「何人?」にしてみました。数を示すようなキーワードはありませんが「何人?」という部分を数を数えるSQL(COUNT関数)に置き換えてくれるのでしょうか?

結果は34人のようです。

SelectAIによりどのようなSelect文が生成されたかも確認してみます。
部門表を「営業部」という条件で検索して、さらに従業員表で人数をCOUNTしています。良い感じですね。複数の表を参照して結果を返してくれました。条件では今回1つの部門を指定しましたが、Select文のつくりをみると複数の部門を条件指定しても上手く結果を返してくれそうです。ついでに並べ替えもしてもらいましょう。

「部門ごとの従業員の数は?人数が多い部門の順番にならべて」

良さそうな結果が返ってきました。今回もあえて聞き方を変えて「数は?」とシンプルにしてみましたが、これでも数を数えてくれました。多い順番にもきちんと並んでいますし、部門表と従業員表も結合して結果が返ってきています。「ごと」という指定からGROUP BYを使ったグループ化もできています。これらは自然言語を解析して生成AIでSQL文を生成していますので、GROUP BYをしたいときは必ず「ごと」という日本語を使うという分けではありません。自然な形で問い合わせを行うと、生成AIがSQLを組み立ててくれます。
返された結果で満足なこともありますし、返されたSQLを確認してそれをベースに微修正して使うという活用の仕方もあるかと思います。

OracleのSelectAIまとめ

「OracleのSelectAI機能で何ができる?」をまとめると以下になります。
・SQLを知らない人でもデータベースからデータを取り出せる
 →ちょっとしたデータ参照や、BIでの多角分析を簡単にできる
・SQLのひな型を作成してくれる
 →開発者の支援。生成されたSQLを修正して完成系へ!

とくに1点目で簡単にデータベースからデータを取り出せるということは、データ分析や抽出が身近になる可能性をひめていると思います。いままでBIツールや分析機能でツールの使い方を覚えてから使っていたものが、普段使っている言葉で結果がでてくるとなると、ワクワクしませんか。ここからグラフやダッシュボードが作れる日も近いと思います。SelectAIのさらなる拡張に期待です。

Oracle CloudのAutonomousDatabaseとは?

さて、今まで紹介してきましたSelectAI機能はどのようなOracleDatabase環境で使えるのでしょうか。今度は実装部分を見ていきたいと思います。やはり、生成AIというものはCloud上の膨大なデータを使っていくことになりますので、Cloud環境での利用がベースになっています。SelectAI機能はOracleCloudでのデータベースサービスであるAutonomousDatabaseで使用できる機能です。Autonomous Databaseは以前から存在していましたが、AIを搭載した自律型データベースです。これ単体でもすごい機能が満載のデータベースのため、Autonomous Databaseについて紹介したいと思います。

※ORACLE社資料より引用

自律型データベース!

Autonomous Databaseは2018年にリリースされた「自律型データベース」です。データベースに関するあらゆる管理の自動化・自律化を目指したデータベースです。
アプリケーション開発者として使うという観点では、いつもどおりのSQL文を使います。通常のOracleDatabaseと変わりはありません。テーブルを作成するのも、データを入れるのも、検索するのも同じです。
それでは何が違うのでしょうか。それは管理面での自律化です。いままではデータベース管理者(DBA)が人手で行ってきた管理業務をAutonomousDatabaseが自分で管理してくれます。たとえばパッチ適用・チューニング・サーバのスケーリング・障害対応などです。
自律型とはデータベース自身が自分のルールで自分で判断し、行動をするということです。
DBAが管理してきた業務をデータベース自身が管理を行います。

Cloud化のメリットとは

Autonomous Databaseに限らず、サーバをCloudにリフトしたり、業務アプリケーションをSaaSに置き換えたりというCloud化の大きなメリットの1つとして、様々な管理から手を放し生産的な楽しい作業に時間をさけるようになるということがあります。管理をCloudベンダー・Cloudサービスに任せることによって、時間を作れるということです。
Autonomous Databaseの活用も同様で、データベースの管理という作業から手を放し、別の作業に時間を割くことができるようになります。

自律運転、自己保護、自己修復。データベースをよりシンプルに便利に。

自律運転では、データベースやインフラストラクチャの管理、監視、およびチューニング・プロセスのすべてが自動化されています。索引は自動を作成する機能もあります。自動でパーティショニングを行います。いままでDBAが考えて実装を検討・実装していたものが自動実装されます。監視もデフォルトで何千といった監視ルールが設定されています。新しいIPアドレスのクライアントからアクセスがあると通知されます。スケーリングも自動です。高負荷によりCPUが不足してこれば自動スケーリングを行います。ストレージも同様です。このような結果、DBAは、データベースの管理ではなく、データの集約・ガバナンス戦略など、生産的であったり、重要なタスクに注力することができます。

自己保護では、様々な保護機能が自動で適用されます。
組み込みの機能によって、外部からの攻撃と悪意のある内部ユーザーのどちらからも保護されています。サイバー攻撃、あるいはデータベースにパッチや暗号化が適用されていないといった心配がなくなります。データベースへのパッチは自動的に適用されます。

自己修復では、システム障害やユーザー・エラーを自動的に検出して保護し、データ損失ゼロでスタンバイデータベースにフェイルオーバーします。計画外のメンテナンスなどのダウンタイムを防止できます。自動フェイルオーバーでは、データ損失なしでスタンバイ環境にフェイルオーバーすることも可能です。自律型データベースに要するダウンタイムは、パッチの適用も含めて1か月あたり2.5分以下といわれています。

今後の機能拡張に期待

世の中が生成AIで盛り上がってくる前の2018年の時点で上記のような機能が実装されています。
それ以降、様々な機能が盛り込まれ、より使いやすくなってきています。
例えば本番DBで発生したワークロード(SQL)を、大きな時間差なく開発DBでそのまま実行する機能です。
アプリケーションの機能拡張や検証に活用できそうです。

Cloudはどんどんサービスアップデートが行われるのが特徴です。
今後もさらに使いやすく、かゆいところに手が届くようになっていくことを期待しています。

DCRの生成AIサービス

今回は、ちょっと変わった生成AIということで、SQLの自動生成を行うSelectAIや、データベースの自律管理を紹介しました。DCRではもちろん本流の生成AI(Generative AI)導入支援サービスも行っております。
今後、さらなる発展が期待できる分野です。ぜひ一度ご相談ください

▽ DCRのOracle Cloud ▽